Kimchi-devel
Threads by month
- ----- 2026 -----
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
September 2015
- 19 participants
- 130 discussions
I was looking at the following item in the backlog:
Guests Stats: Display memory utilization (use virt-df or virt-top or ...)
If I understood it right, the idea here is to show the -inner- memory
allocation of the guest. If you have a VM with 4Gb of RAM running an
Ubuntu, we want to know how much memory the Ubuntu OS and its processes
are using.
I've done an investigation and I haven't found any tool to accomplish
this. "virt-top", "virsh dommemstat" and the libvirt API retrieves the
information of the memory usage of the guest relative to the host. In
the example mentioned before, supposing that the host has 64Gb of RAM,
all these tools would show that the VM is using 12% of the host RAM.
They do not dive in the VM and shows the actual mem usage of the Ubuntu
and its processes running there.
Haven't found anything useful in other MLs and forums. The common answer
is 'run top in a terminal inside the VM', which of course does not suit
us. My question is: any thoughts about how we can implement this
feature? Because I am starting to think that, in the end, this kind of
info is strict to the guest OS and can't be polled from the outside.
Thanks!
5
5
[WOK RFC] Update objectstore information while migrating to new structure.
by Paulo Ricardo Paz Vital 13 Oct '15
by Paulo Ricardo Paz Vital 13 Oct '15
13 Oct '15
Hello guys.
Doing some tests in the new Wok and Kimchi (as plugin) code I
discovered something that can cause some issues for us. Let'me show a
possible user case to explain better:
The user uses some version of the current Kimchi (previous of 1.5.1 and
called for now as, Kimchi_old) totally functional and operating. The
user has a few templates created, which are stored in the the
objectstore function of Kimchi, and for each template has the
storagepool URI allocated for that template.
The storagepool information has the following properties in Kimchi-old:
"storagepool": {
"description": "Location of the storage pool",
"type": "string",
"pattern": "^/storagepools/[^/]+/?$",
"error": "KCHTMPL0015E"
}
However, the new Wok+Kimchi_plugin structure changed the URI for all
virtualization features and the pattern now is:
"^/plugins/kimchi/storagepools/[^/]+/?$"
There's an issue when getting the information of all Kimchi-old
templates from the objectstore, the URI information continues with the
older pattern and some checks in the code will fail.
My suggestion is to create an info-update process when the user upgrade
from Kimchi-old to Wok+Kimchi_plugin, modifying the storagepool
information of all templates that not follow the new pattern in the
database already created.
I'd like to know what do you guys think about and ask for more
suggestions also.
Best regards,
--
Paulo Ricardo Paz Vital <pvital(a)linux.vnet.ibm.com>
IBM Linux Technology Center
3
5
There is a remote, but real, possibility that kimchi.min.js breaks and
is not loaded for some reason in Kimchi login page. If this happen, the
form submmit action is not going to be binded to a javascript function
that calls a AJAX POST request. Then the browser is going to submmit the
form in the default way: using a GET request. GET requests add form data
in the URL, so user will be able to see the user and password in the URL
field and in the log:
"GET /login.html?username=321&password=234 HTTP/1.0" 200 2936
"https://localhost:8001/login.html" "Mozilla/5.0 (X11; Fedora; Linux
x86_64; rv:39.0) Gecko/20100101 Firefox/39.0"
This patch fixes this problem adding 'method="post"' in the login html
form.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
ui/pages/login.html.tmpl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/pages/login.html.tmpl b/ui/pages/login.html.tmpl
index e2f6855..55848b4 100644
--- a/ui/pages/login.html.tmpl
+++ b/ui/pages/login.html.tmpl
@@ -79,7 +79,7 @@
<div id="messUserPass" class="err-mess" style="display: none;">$_("The username or password you entered is incorrect. Please try again.")</div>
<div id="messSession" class="err-mess" style="display: none;">$_("Session timeout, please re-login.")</div>
</div>
- <form id="form-login" class="login-panel">
+ <form id="form-login" class="login-panel" method="post">
<div class="row">
<input type="text" id="username" name="username" required="required" placeholder="$_("User Name")" autofocus/>
<div id="username-msg" class="msg-required"></div>
--
2.1.0
6
7
[PATCH 01/15] V2 Ginger Base : Taking off the host tab functionality from kimchi
by chandra@linux.vnet.ibm.com 05 Oct '15
by chandra@linux.vnet.ibm.com 05 Oct '15
05 Oct '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/kimchi/API.json | 134 ------------
plugins/kimchi/Makefile.am | 3 +-
plugins/kimchi/config.py.in | 4 -
plugins/kimchi/control/host.py | 96 ---------
plugins/kimchi/docs/README.md | 6 +-
plugins/kimchi/i18n.py | 47 +----
plugins/kimchi/kimchi.conf | 7 -
plugins/kimchi/mockmodel.py | 18 --
plugins/kimchi/model/config.py | 21 --
plugins/kimchi/model/host.py | 322 +----------------------------
plugins/kimchi/root.py | 1 -
plugins/kimchi/tests/test_authorization.py | 6 -
plugins/kimchi/tests/test_config.py.in | 7 -
plugins/kimchi/tests/test_host.py | 96 +--------
plugins/kimchi/tests/test_model.py | 237 ---------------------
plugins/kimchi/tests/test_rest.py | 54 -----
plugins/kimchi/ui/config/tab-ext.xml | 7 -
17 files changed, 7 insertions(+), 1059 deletions(-)
diff --git a/plugins/kimchi/API.json b/plugins/kimchi/API.json
index f1f58ff..e75b35f 100644
--- a/plugins/kimchi/API.json
+++ b/plugins/kimchi/API.json
@@ -59,30 +59,6 @@
}
},
"properties": {
- "debugreports_create": {
- "type": "object",
- "error": "KCHDR0006E",
- "properties": {
- "name": {
- "description": "The name for the debug report file.",
- "type": "string",
- "pattern": "^[_A-Za-z0-9-]*$",
- "error": "KCHDR0007E"
- }
- }
- },
- "debugreport_update": {
- "type": "object",
- "properties": {
- "name": {
- "description": "New name of debug report",
- "type": "string",
- "pattern": "^[_A-Za-z0-9-]*$",
- "error": "KCHDR0007E"
- }
- },
- "additionalProperties": false
- },
"storagepools_create": {
"type": "object",
"error": "KCHPOOL0026E",
@@ -684,116 +660,6 @@
"additionalProperties": false,
"error": "KCHAPI0001E"
},
- "repositories_create": {
- "type": "object",
- "properties": {
- "repo_id": {
- "description": "Repository ID used for YUM repository.",
- "type": "string",
- "error": "KCHREPOS0001E"
- },
- "baseurl": {
- "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
- "type": "string",
- "error": "KCHREPOS0002E"
- },
- "config": {
- "description": "Dictionary containing repository configuration",
- "type": "object",
- "error": "KCHREPOS0003E",
- "properties": {
- "dist": {
- "description": "Distribution to DEB repository",
- "type": "string",
- "error": "KCHREPOS0004E"
- },
- "comps": {
- "description": "List of components to DEB repository",
- "type": "array",
- "error": "KCHREPOS0005E",
- "uniqueItems": true,
- "items": {
- "description": "Component name",
- "type": "string",
- "error": "KCHREPOS0006E"
- }
- },
- "repo_name": {
- "description": "YUM repository name",
- "type": "string",
- "error": "KCHREPOS0023E"
- },
- "mirrorlist": {
- "description": "URL to a file containing a list of baseurls",
- "type": "string",
- "error": "KCHREPOS0007E"
- },
- "metalink": {
- "description": "URL to a metalink file for the repomd.xml",
- "type": "string",
- "error": "KCHREPOS0029E"
- }
- }
- }
- },
- "additionalProperties": false,
- "error": "KCHAPI0001E"
- },
- "repository_update": {
- "type": "object",
- "properties": {
- "baseurl": {
- "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
- "type": "string",
- "error": "KCHREPOS0002E"
- },
- "config": {
- "description": "Dictionary containing repository configuration",
- "type": "object",
- "error": "KCHREPOS0003E",
- "properties": {
- "dist": {
- "description": "Distribution to DEB repository",
- "type": "string",
- "error": "KCHREPOS0004E"
- },
- "comps": {
- "description": "List of components to DEB repository",
- "type": "array",
- "error": "KCHREPOS0005E",
- "uniqueItems": true,
- "items": {
- "description": "Component name",
- "type": "string",
- "error": "KCHREPOS0006E"
- }
- },
- "repo_name": {
- "description": "Human-readable string describing the YUM repository.",
- "type": "string",
- "error": "KCHREPOS0008E"
- },
- "mirrorlist": {
- "description": "URL to a file containing a list of baseurls for YUM repository",
- "type": "string",
- "error": "KCHREPOS0007E"
- },
- "gpgcheck": {
- "description": "Indicates if a GPG signature check on the packages gotten from repository should be performed.",
- "type": "boolean",
- "error": "KCHREPOS0009E"
- },
- "gpgkey": {
- "description": "URL pointing to the ASCII-armored GPG key file for the repository.",
- "type": "string",
- "error": "KCHREPOS0010E"
- }
- }
- }
- },
- "additionalProperties": false,
- "error": "KCHAPI0001E"
- },
"devices_get_list": {
"type": "object",
"properties": {
diff --git a/plugins/kimchi/Makefile.am b/plugins/kimchi/Makefile.am
index 49c835e..c30e7b9 100644
--- a/plugins/kimchi/Makefile.am
+++ b/plugins/kimchi/Makefile.am
@@ -99,7 +99,6 @@ config.py: config.py.in Makefile
install-deb: install
cp -R $(top_srcdir)/contrib/DEBIAN $(DESTDIR)/
mkdir -p $(DESTDIR)/var/lib/kimchi/vnc-tokens
- mkdir -p $(DESTDIR)/var/lib/kimchi/debugreports
mkdir -p $(DESTDIR)/var/lib/kimchi/screenshots
mkdir -p $(DESTDIR)/var/lib/kimchi/isos
@@ -140,7 +139,7 @@ install-data-local:
$(MKDIR_P) $(DESTDIR)$(kimchidir)
$(INSTALL_DATA) API.json $(DESTDIR)$(kimchidir)/API.json
mkdir -p $(DESTDIR)/var/lib/kimchi/vnc-tokens
- mkdir -p $(DESTDIR)/var/lib/kimchi/{debugreports,isos,screenshots}
+ mkdir -p $(DESTDIR)/var/lib/kimchi/{isos,screenshots}
uninstall-local:
$(RM) $(DESTDIR)$(kimchidir)/API.json
diff --git a/plugins/kimchi/config.py.in b/plugins/kimchi/config.py.in
index 6ae0ccd..43e7811 100644
--- a/plugins/kimchi/config.py.in
+++ b/plugins/kimchi/config.py.in
@@ -38,10 +38,6 @@ def get_distros_store():
return os.path.join(PluginPaths('kimchi').conf_dir, 'distros.d')
-def get_debugreports_path():
- return os.path.join(PluginPaths('kimchi').state_dir, 'debugreports')
-
-
def get_screenshot_path():
return os.path.join(PluginPaths('kimchi').state_dir, 'screenshots')
diff --git a/plugins/kimchi/control/host.py b/plugins/kimchi/control/host.py
index 0a40f1b..c71c47b 100644
--- a/plugins/kimchi/control/host.py
+++ b/plugins/kimchi/control/host.py
@@ -19,7 +19,6 @@
from wok.control.base import Collection, Resource, SimpleCollection
from wok.control.utils import UrlSubNode
-from wok.exception import NotFoundError
from cpuinfo import CPUInfo
@@ -31,14 +30,7 @@ class Host(Resource):
self.role_key = 'host'
self.admin_methods = ['GET', 'POST']
self.uri_fmt = '/host/%s'
- self.reboot = self.generate_action_handler('reboot')
- self.shutdown = self.generate_action_handler('shutdown')
- self.stats = HostStats(self.model)
- self.partitions = Partitions(self.model)
self.devices = Devices(self.model)
- self.packagesupdate = PackagesUpdate(self.model)
- self.repositories = Repositories(self.model)
- self.swupdate = self.generate_action_handler_task('swupdate')
self.cpuinfo = CPUInfo(self.model)
@property
@@ -46,54 +38,6 @@ class Host(Resource):
return self.info
-class HostStats(Resource):
- def __init__(self, model, id=None):
- super(HostStats, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET']
- self.history = HostStatsHistory(self.model)
-
- @property
- def data(self):
- return self.info
-
-
-class HostStatsHistory(Resource):
- @property
- def data(self):
- return self.info
-
-
-class Partitions(Collection):
- def __init__(self, model):
- super(Partitions, self).__init__(model)
- self.role_key = 'storage'
- self.admin_methods = ['GET']
- self.resource = Partition
-
- # Defining get_resources in order to return list of partitions in UI
- # sorted by their path
- def _get_resources(self, flag_filter):
- res_list = super(Partitions, self)._get_resources(flag_filter)
- res_list = filter(lambda x: x.info['available'], res_list)
- res_list.sort(key=lambda x: x.info['path'])
- return res_list
-
-
-class Partition(Resource):
- def __init__(self, model, id):
- self.role_key = 'storage'
- self.admin_methods = ['GET']
- super(Partition, self).__init__(model, id)
-
- @property
- def data(self):
- if not self.info['available']:
- raise NotFoundError("KCHPART0001E", {'name': self.info['name']})
-
- return self.info
-
-
class Devices(Collection):
def __init__(self, model):
super(Devices, self).__init__(model)
@@ -115,43 +59,3 @@ class Device(Resource):
def data(self):
return self.info
-
-class PackagesUpdate(Collection):
- def __init__(self, model):
- super(PackagesUpdate, self).__init__(model)
- self.role_key = 'host'
- self.admin_methods = ['GET']
- self.resource = PackageUpdate
-
-
-class PackageUpdate(Resource):
- def __init__(self, model, id=None):
- super(PackageUpdate, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET']
-
- @property
- def data(self):
- return self.info
-
-
-class Repositories(Collection):
- def __init__(self, model):
- super(Repositories, self).__init__(model)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'POST']
- self.resource = Repository
-
-
-class Repository(Resource):
- def __init__(self, model, id):
- super(Repository, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'PUT', 'POST', 'DELETE']
- self.uri_fmt = "/host/repositories/%s"
- self.enable = self.generate_action_handler('enable')
- self.disable = self.generate_action_handler('disable')
-
- @property
- def data(self):
- return self.info
diff --git a/plugins/kimchi/docs/README.md b/plugins/kimchi/docs/README.md
index f400333..ee6bfed 100644
--- a/plugins/kimchi/docs/README.md
+++ b/plugins/kimchi/docs/README.md
@@ -196,13 +196,13 @@ Usage
Connect your browser to https://localhost:8001. You should see a screen like:
-
+
Wok uses PAM to authenticate users so you can log in with the same username
and password that you would use to log in to the machine itself. Once logged in
you will see a screen like:
-
+
This shows you the list of running guests including a live screenshot of
the guest session. You can use the action buttons to shutdown the guests
@@ -216,7 +216,7 @@ top navigation bar.
The template screen looks like:
-
+
From this view, you can change the parameters of a template or create a
new template using the "+" button in the upper right corner.
diff --git a/plugins/kimchi/i18n.py b/plugins/kimchi/i18n.py
index 253f00d..a2ea858 100644
--- a/plugins/kimchi/i18n.py
+++ b/plugins/kimchi/i18n.py
@@ -244,15 +244,6 @@ messages = {
"KCHNET0021E": _("Failed to activate interface %(iface)s. Please check the physical link status."),
"KCHNET0022E": _("Failed to start network %(name)s. Details: %(err)s"),
- "KCHDR0001E": _("Debug report %(name)s does not exist"),
- "KCHDR0002E": _("Debug report tool not found in system"),
- "KCHDR0003E": _("Unable to create debug report %(name)s. Details: %(err)s."),
- "KCHDR0004E": _("Can not find any debug report with the given name %(name)s"),
- "KCHDR0005E": _("Unable to generate debug report %(name)s. Details: %(err)s"),
- "KCHDR0006E": _("You should give a name for the debug report file."),
- "KCHDR0007E": _("Debug report name must be a string. Only letters, digits, underscore ('_') and hyphen ('-') are allowed."),
- "KCHDR0008E": _("The debug report with specified name \"%(name)s\" already exists. Please use another one."),
-
"KCHSR0001E": _("Storage server %(server)s was not used by Kimchi"),
"KCHDISTRO0001E": _("Distro '%(name)s' does not exist"),
@@ -264,11 +255,6 @@ messages = {
"KCHHOST0003E": _("Node device '%(name)s' not found"),
"KCHHOST0004E": _("Conflicting flag filters specified."),
- "KCHPKGUPD0001E": _("No packages marked for update"),
- "KCHPKGUPD0002E": _("Package %(name)s is not marked to be updated."),
- "KCHPKGUPD0003E": _("Error while getting packages marked to be updated. Details: %(err)s"),
- "KCHPKGUPD0004E": _("There is no compatible package manager for this system."),
-
"KCHUTILS0003E": _("Unable to choose a virtual machine name"),
"KCHVMSTOR0002E": _("Invalid storage type. Types supported: 'cdrom', 'disk'"),
@@ -286,38 +272,7 @@ messages = {
"KCHVMSTOR0016E": _("Volume already in use by other virtual machine."),
"KCHVMSTOR0017E": _("Only one of path or pool/volume can be specified to add a new virtual machine disk"),
"KCHVMSTOR0018E": _("Volume chosen with format %(format)s does not fit in the storage type %(type)s"),
-
- "KCHREPOS0001E": _("YUM Repository ID must be one word only string."),
- "KCHREPOS0002E": _("Repository URL must be an http://, ftp:// or file:// URL."),
- "KCHREPOS0003E": _("Repository configuration is a dictionary with specific values according to repository type."),
- "KCHREPOS0004E": _("Distribution to DEB repository must be a string"),
- "KCHREPOS0005E": _("Components to DEB repository must be listed in a array"),
- "KCHREPOS0006E": _("Components to DEB repository must be a string"),
- "KCHREPOS0007E": _("Mirror list to repository must be a string"),
- "KCHREPOS0008E": _("YUM Repository name must be string."),
- "KCHREPOS0009E": _("GPG check must be a boolean value."),
- "KCHREPOS0010E": _("GPG key must be a URL pointing to the ASCII-armored file."),
- "KCHREPOS0011E": _("Could not update repository %(repo_id)s."),
- "KCHREPOS0012E": _("Repository %(repo_id)s does not exist."),
- "KCHREPOS0013E": _("Specify repository base URL, mirror list or metalink in order to create or update a YUM repository."),
- "KCHREPOS0014E": _("Repository management tool was not recognized for your system."),
- "KCHREPOS0015E": _("Repository %(repo_id)s is already enabled."),
- "KCHREPOS0016E": _("Repository %(repo_id)s is already disabled."),
- "KCHREPOS0017E": _("Could not remove repository %(repo_id)s."),
- "KCHREPOS0018E": _("Could not write repository configuration file %(repo_file)s"),
- "KCHREPOS0019E": _("Specify repository distribution in order to create a DEB repository."),
- "KCHREPOS0020E": _("Could not enable repository %(repo_id)s."),
- "KCHREPOS0021E": _("Could not disable repository %(repo_id)s."),
- "KCHREPOS0022E": _("YUM Repository ID already exists"),
- "KCHREPOS0023E": _("YUM Repository name must be a string"),
- "KCHREPOS0024E": _("Unable to list repositories. Details: '%(err)s'"),
- "KCHREPOS0025E": _("Unable to retrieve repository information. Details: '%(err)s'"),
- "KCHREPOS0026E": _("Unable to add repository. Details: '%(err)s'"),
- "KCHREPOS0027E": _("Unable to remove repository. Details: '%(err)s'"),
- "KCHREPOS0028E": _("Configuration items: '%(items)s' are not supported by repository manager"),
- "KCHREPOS0029E": _("Repository metalink must be an http://, ftp:// or file:// URL."),
- "KCHREPOS0030E": _("Cannot specify mirrorlist and metalink at the same time."),
-
+
"KCHSNAP0001E": _("Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."),
"KCHSNAP0002E": _("Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %(err)s"),
"KCHSNAP0003E": _("Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."),
diff --git a/plugins/kimchi/kimchi.conf b/plugins/kimchi/kimchi.conf
index 1bf78e4..ebf346f 100644
--- a/plugins/kimchi/kimchi.conf
+++ b/plugins/kimchi/kimchi.conf
@@ -23,13 +23,6 @@ tools.staticdir.on = True
tools.staticdir.dir = wok.config.PluginPaths('kimchi').state_dir + '/screenshots'
tools.nocache.on = False
-[/data/debugreports]
-tools.staticdir.on = True
-tools.staticdir.dir = wok.config.PluginPaths('kimchi').state_dir + '/debugreports'
-tools.nocache.on = False
-tools.wokauth.on = True
-tools.staticdir.content_types = {'xz': 'application/x-xz'}
-
[/help]
tools.staticdir.on = True
tools.staticdir.dir = wok.config.PluginPaths('kimchi').ui_dir + '/pages/help'
diff --git a/plugins/kimchi/mockmodel.py b/plugins/kimchi/mockmodel.py
index b269c26..4550c26 100644
--- a/plugins/kimchi/mockmodel.py
+++ b/plugins/kimchi/mockmodel.py
@@ -34,7 +34,6 @@ import config
import imageinfo
import osinfo
from model import cpuinfo
-from model.debugreports import DebugReportsModel
from model.host import DeviceModel
from model.libvirtstoragepool import IscsiPoolDef, NetfsPoolDef
from model.libvirtstoragepool import StoragePoolDef
@@ -114,7 +113,6 @@ class MockModel(Model):
StoragePoolModel._update_lvm_disks = self._update_lvm_disks
StorageVolumesModel.get_list = self._mock_storagevolumes_get_list
StorageVolumeModel.doUpload = self._mock_storagevolume_doUpload
- DebugReportsModel._gen_debugreport_file = self._gen_debugreport_file
LibvirtVMTemplate._get_volume_path = self._get_volume_path
VMTemplate.get_iso_info = self._probe_image
imageinfo.probe_image = self._probe_image
@@ -246,22 +244,6 @@ class MockModel(Model):
return MockModel._libvirt_get_vol_path(pool, vol)
- def _gen_debugreport_file(self, name):
- return add_task('/plugins/kimchi/debugreports/%s' % name,
- self._create_log, self.objstore, name)
-
- def _create_log(self, cb, name):
- path = config.get_debugreports_path()
- tmpf = os.path.join(path, name + '.tmp')
- realf = os.path.join(path, name + '.txt')
- length = random.randint(1000, 10000)
- with open(tmpf, 'w') as fd:
- while length:
- fd.write('I am logged')
- length = length - 1
- os.rename(tmpf, realf)
- cb("OK", True)
-
def _update_lvm_disks(self, pool_name, disks):
conn = self.conn.get()
pool = conn.storagePoolLookupByName(pool_name.encode('utf-8'))
diff --git a/plugins/kimchi/model/config.py b/plugins/kimchi/model/config.py
index 464ffae..702943b 100644
--- a/plugins/kimchi/model/config.py
+++ b/plugins/kimchi/model/config.py
@@ -28,10 +28,7 @@ from wok.utils import check_url_path, run_command, wok_log
from ..config import find_qemu_binary
from ..distroloader import DistroLoader
-from ..repositories import Repositories
from ..screenshot import VMScreenshot
-from ..swupdate import SoftwareUpdate
-from debugreports import DebugReportsModel
from featuretests import FeatureTests, FEATURETEST_POOL_NAME
from featuretests import FEATURETEST_VM_NAME
@@ -116,28 +113,10 @@ class CapabilitiesModel(object):
return False
def lookup(self, *ident):
- report_tool = DebugReportsModel.get_system_report_tool()
- try:
- SoftwareUpdate()
- except Exception:
- update_tool = False
- else:
- update_tool = True
-
- try:
- repo = Repositories()
- except Exception:
- repo_mngt_tool = None
- else:
- repo_mngt_tool = repo._pkg_mnger.TYPE
-
return {'libvirt_stream_protocols': self.libvirt_stream_protocols,
'qemu_spice': self._qemu_support_spice(),
'qemu_stream': self.qemu_stream,
'screenshot': VMScreenshot.get_stream_test_result(),
- 'system_report_tool': bool(report_tool),
- 'update_tool': update_tool,
- 'repo_mngt_tool': repo_mngt_tool,
'federation': kconfig.get("server", "federation"),
'auth': kconfig.get("authentication", "method"),
'kernel_vfio': self.kernel_vfio,
diff --git a/plugins/kimchi/model/host.py b/plugins/kimchi/model/host.py
index 75d4de0..c8f5d24 100644
--- a/plugins/kimchi/model/host.py
+++ b/plugins/kimchi/model/host.py
@@ -18,27 +18,15 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import libvirt
-import os
-import platform
import psutil
-import time
-from cherrypy.process.plugins import BackgroundTask
-from collections import defaultdict
-from wok.basemodel import Singleton
from wok.exception import InvalidOperation, InvalidParameter
from wok.exception import NotFoundError, OperationFailed
-from wok.utils import add_task, wok_log
from wok.xmlutils.utils import xpath_get_text
-from wok.model.tasks import TaskModel
import hostdev
-from .. import disks
-from .. import netinfo
-from ..repositories import Repositories
-from ..swupdate import SoftwareUpdate
from config import CapabilitiesModel
-from vms import DOM_STATE_MAP
+from wok.model.tasks import TaskModel
HOST_STATS_INTERVAL = 1
@@ -49,57 +37,6 @@ class HostModel(object):
self.conn = kargs['conn']
self.objstore = kargs['objstore']
self.task = TaskModel(**kargs)
- self.host_info = self._get_host_info()
-
- def _get_ppc_cpu_info(self):
- res = {}
- with open('/proc/cpuinfo') as f:
- for line in f.xreadlines():
- # Parse CPU, CPU's revision and CPU's clock information
- for key in ['cpu', 'revision', 'clock']:
- if key in line:
- info = line.split(':')[1].strip()
- if key == 'clock':
- value = float(info.split('MHz')[0].strip()) / 1000
- else:
- value = info.split('(')[0].strip()
- res[key] = value
-
- # Power machines show, for each cpu/core, a block with
- # all cpu information. Here we control the scan of the
- # necessary information (1st block provides
- # everything), skipping the function when find all
- # information.
- if len(res.keys()) == 3:
- return "%(cpu)s (%(revision)s) @ %(clock)s GHz\
- " % res
-
- return ""
-
- def _get_host_info(self):
- res = {}
- if platform.machine().startswith('ppc'):
- res['cpu_model'] = self._get_ppc_cpu_info()
- else:
- with open('/proc/cpuinfo') as f:
- for line in f.xreadlines():
- if "model name" in line:
- res['cpu_model'] = line.split(':')[1].strip()
- break
-
- res['cpus'] = 0
- res['memory'] = 0L
-
- # Include IBM PowerKVM name to supported distro names
- _sup_distros = platform._supported_dists + ('ibm_powerkvm',)
- # 'fedora' '17' 'Beefy Miracle'
- distro, version, codename = platform.linux_distribution(
- supported_dists=_sup_distros)
- res['os_distro'] = distro
- res['os_version'] = version
- res['os_codename'] = unicode(codename, "utf-8")
-
- return res
def lookup(self, *name):
cpus = psutil.NUM_CPUS
@@ -121,179 +58,6 @@ class HostModel(object):
self.host_info['memory'] = psutil.phymem_usage().total
return self.host_info
- def swupdate(self, *name):
- try:
- swupdate = SoftwareUpdate()
- except:
- raise OperationFailed('KCHPKGUPD0004E')
-
- pkgs = swupdate.getNumOfUpdates()
- if pkgs == 0:
- raise OperationFailed('KCHPKGUPD0001E')
-
- wok_log.debug('Host is going to be updated.')
- taskid = add_task('/plugins/kimchi/host/swupdate', swupdate.doUpdate,
- self.objstore, None)
- return self.task.lookup(taskid)
-
- def shutdown(self, args=None):
- # Check for running vms before shutdown
- running_vms = self._get_vms_list_by_state('running')
- if len(running_vms) > 0:
- raise OperationFailed("KCHHOST0001E")
-
- wok_log.info('Host is going to shutdown.')
- os.system('shutdown -h now')
-
- def reboot(self, args=None):
- # Find running VMs
- running_vms = self._get_vms_list_by_state('running')
- if len(running_vms) > 0:
- raise OperationFailed("KCHHOST0002E")
-
- wok_log.info('Host is going to reboot.')
- os.system('reboot')
-
- def _get_vms_list_by_state(self, state):
- conn = self.conn.get()
- return [dom.name().decode('utf-8')
- for dom in conn.listAllDomains(0)
- if (DOM_STATE_MAP[dom.info()[0]]) == state]
-
-
-class HostStatsModel(object):
- __metaclass__ = Singleton
-
- def __init__(self, **kargs):
- self.host_stats = defaultdict(list)
- self.host_stats_thread = BackgroundTask(HOST_STATS_INTERVAL,
- self._update_host_stats)
- self.host_stats_thread.start()
-
- def lookup(self, *name):
- return {'cpu_utilization': self.host_stats['cpu_utilization'][-1],
- 'memory': self.host_stats['memory'][-1],
- 'disk_read_rate': self.host_stats['disk_read_rate'][-1],
- 'disk_write_rate': self.host_stats['disk_write_rate'][-1],
- 'net_recv_rate': self.host_stats['net_recv_rate'][-1],
- 'net_sent_rate': self.host_stats['net_sent_rate'][-1]}
-
- def _update_host_stats(self):
- preTimeStamp = self.host_stats['timestamp']
- timestamp = time.time()
- # FIXME when we upgrade psutil, we can get uptime by psutil.uptime
- # we get uptime by float(open("/proc/uptime").readline().split()[0])
- # and calculate the first io_rate after the OS started.
- with open("/proc/uptime") as time_f:
- seconds = (timestamp - preTimeStamp if preTimeStamp else
- float(time_f.readline().split()[0]))
-
- self.host_stats['timestamp'] = timestamp
- self._get_host_disk_io_rate(seconds)
- self._get_host_network_io_rate(seconds)
-
- self._get_percentage_host_cpu_usage()
- self._get_host_memory_stats()
-
- # store only 60 stats (1 min)
- for key, value in self.host_stats.iteritems():
- if isinstance(value, list):
- if len(value) == 60:
- self.host_stats[key] = value[10:]
-
- def _get_percentage_host_cpu_usage(self):
- # This is cpu usage producer. This producer will calculate the usage
- # at an interval of HOST_STATS_INTERVAL.
- # The psutil.cpu_percent works as non blocking.
- # psutil.cpu_percent maintains a cpu time sample.
- # It will update the cpu time sample when it is called.
- # So only this producer can call psutil.cpu_percent in kimchi.
- self.host_stats['cpu_utilization'].append(psutil.cpu_percent(None))
-
- def _get_host_memory_stats(self):
- virt_mem = psutil.virtual_memory()
- # available:
- # the actual amount of available memory that can be given
- # instantly to processes that request more memory in bytes; this
- # is calculated by summing different memory values depending on
- # the platform (e.g. free + buffers + cached on Linux)
- memory_stats = {'total': virt_mem.total,
- 'free': virt_mem.free,
- 'cached': virt_mem.cached,
- 'buffers': virt_mem.buffers,
- 'avail': virt_mem.available}
- self.host_stats['memory'].append(memory_stats)
-
- def _get_host_disk_io_rate(self, seconds):
- disk_read_bytes = self.host_stats['disk_read_bytes']
- disk_write_bytes = self.host_stats['disk_write_bytes']
- prev_read_bytes = disk_read_bytes[-1] if disk_read_bytes else 0
- prev_write_bytes = disk_write_bytes[-1] if disk_write_bytes else 0
-
- disk_io = psutil.disk_io_counters(False)
- read_bytes = disk_io.read_bytes
- write_bytes = disk_io.write_bytes
-
- rd_rate = int(float(read_bytes - prev_read_bytes) / seconds + 0.5)
- wr_rate = int(float(write_bytes - prev_write_bytes) / seconds + 0.5)
-
- self.host_stats['disk_read_rate'].append(rd_rate)
- self.host_stats['disk_write_rate'].append(wr_rate)
- self.host_stats['disk_read_bytes'].append(read_bytes)
- self.host_stats['disk_write_bytes'].append(write_bytes)
-
- def _get_host_network_io_rate(self, seconds):
- net_recv_bytes = self.host_stats['net_recv_bytes']
- net_sent_bytes = self.host_stats['net_sent_bytes']
- prev_recv_bytes = net_recv_bytes[-1] if net_recv_bytes else 0
- prev_sent_bytes = net_sent_bytes[-1] if net_sent_bytes else 0
-
- net_ios = psutil.network_io_counters(True)
- recv_bytes = 0
- sent_bytes = 0
- for key in set(netinfo.nics() +
- netinfo.wlans()) & set(net_ios.iterkeys()):
- recv_bytes = recv_bytes + net_ios[key].bytes_recv
- sent_bytes = sent_bytes + net_ios[key].bytes_sent
-
- rx_rate = int(float(recv_bytes - prev_recv_bytes) / seconds + 0.5)
- tx_rate = int(float(sent_bytes - prev_sent_bytes) / seconds + 0.5)
-
- self.host_stats['net_recv_rate'].append(rx_rate)
- self.host_stats['net_sent_rate'].append(tx_rate)
- self.host_stats['net_recv_bytes'].append(recv_bytes)
- self.host_stats['net_sent_bytes'].append(sent_bytes)
-
-
-class HostStatsHistoryModel(object):
- def __init__(self, **kargs):
- self.history = HostStatsModel(**kargs)
-
- def lookup(self, *name):
- return {'cpu_utilization': self.history.host_stats['cpu_utilization'],
- 'memory': self.history.host_stats['memory'],
- 'disk_read_rate': self.history.host_stats['disk_read_rate'],
- 'disk_write_rate': self.history.host_stats['disk_write_rate'],
- 'net_recv_rate': self.history.host_stats['net_recv_rate'],
- 'net_sent_rate': self.history.host_stats['net_sent_rate']}
-
-
-class PartitionsModel(object):
- def __init__(self, **kargs):
- pass
-
- def get_list(self):
- result = disks.get_partitions_names()
- return result
-
-
-class PartitionModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- return disks.get_partition_details(name)
-
class DevicesModel(object):
def __init__(self, **kargs):
@@ -390,87 +154,3 @@ class DeviceModel(object):
raise NotFoundError('KCHHOST0003E', {'name': nodedev_name})
return hostdev.get_dev_info(dev)
-
-class PackagesUpdateModel(object):
- def __init__(self, **kargs):
- try:
- self.host_swupdate = SoftwareUpdate()
- except:
- self.host_swupdate = None
-
- def get_list(self):
- if self.host_swupdate is None:
- raise OperationFailed('KCHPKGUPD0004E')
-
- return self.host_swupdate.getUpdates()
-
-
-class PackageUpdateModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- try:
- swupdate = SoftwareUpdate()
- except Exception:
- raise OperationFailed('KCHPKGUPD0004E')
-
- return swupdate.getUpdate(name)
-
-
-class RepositoriesModel(object):
- def __init__(self, **kargs):
- try:
- self.host_repositories = Repositories()
- except:
- self.host_repositories = None
-
- def get_list(self):
- if self.host_repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return sorted(self.host_repositories.getRepositories())
-
- def create(self, params):
- if self.host_repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self.host_repositories.addRepository(params)
-
-
-class RepositoryModel(object):
- def __init__(self, **kargs):
- try:
- self._repositories = Repositories()
- except:
- self._repositories = None
-
- def lookup(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.getRepository(repo_id)
-
- def enable(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.enableRepository(repo_id)
-
- def disable(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.disableRepository(repo_id)
-
- def update(self, repo_id, params):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.updateRepository(repo_id, params)
-
- def delete(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.removeRepository(repo_id)
diff --git a/plugins/kimchi/root.py b/plugins/kimchi/root.py
index 1e2bfc7..2c8ac5b 100644
--- a/plugins/kimchi/root.py
+++ b/plugins/kimchi/root.py
@@ -58,7 +58,6 @@ class KimchiRoot(WokRoot):
make_dirs = [
os.path.abspath(config.get_distros_store()),
- os.path.abspath(config.get_debugreports_path()),
os.path.abspath(config.get_screenshot_path())
]
for directory in make_dirs:
diff --git a/plugins/kimchi/tests/test_authorization.py b/plugins/kimchi/tests/test_authorization.py
index 87d68ab..fda86a3 100644
--- a/plugins/kimchi/tests/test_authorization.py
+++ b/plugins/kimchi/tests/test_authorization.py
@@ -77,12 +77,6 @@ class AuthorizationTests(unittest.TestCase):
resp = self.request('/plugins/kimchi/host/shutdown', '{}', 'POST')
self.assertEquals(403, resp.status)
- # Non-root users can not get or debug reports
- resp = self.request('/plugins/kimchi/debugreports', '{}', 'GET')
- self.assertEquals(403, resp.status)
- resp = self.request('/plugins/kimchi/debugreports', '{}', 'POST')
- self.assertEquals(403, resp.status)
-
# Non-root users can not create or delete network (only get)
resp = self.request('/plugins/kimchi/networks', '{}', 'GET')
self.assertEquals(200, resp.status)
diff --git a/plugins/kimchi/tests/test_config.py.in b/plugins/kimchi/tests/test_config.py.in
index 4604eb1..b74ba7c 100644
--- a/plugins/kimchi/tests/test_config.py.in
+++ b/plugins/kimchi/tests/test_config.py.in
@@ -248,13 +248,6 @@ class ConfigTests(unittest.TestCase):
'tools.staticdir.dir': get_screenshot_path(),
'tools.nocache.on': False
},
- '/data/debugreports': {
- 'tools.staticdir.on': True,
- 'tools.staticdir.dir': get_debugreports_path(),
- 'tools.nocache.on': False,
- 'tools.wokauth.on': True,
- 'tools.staticdir.content_types': {'xz': 'application/x-xz'}
- },
'/help': {
'tools.staticdir.on': True,
'tools.staticdir.dir': '%s/ui/pages/help' % pluginPrefix,
diff --git a/plugins/kimchi/tests/test_host.py b/plugins/kimchi/tests/test_host.py
index 6cd0833..530262c 100644
--- a/plugins/kimchi/tests/test_host.py
+++ b/plugins/kimchi/tests/test_host.py
@@ -20,8 +20,6 @@
import json
import os
-import platform
-import psutil
import tempfile
import time
import unittest
@@ -29,7 +27,7 @@ from functools import partial
from wok.plugins.kimchi.mockmodel import MockModel
-from utils import get_free_port, patch_auth, request, run_server, wait_task
+from utils import get_free_port, patch_auth, request, run_server
test_server = None
@@ -62,98 +60,6 @@ class HostTests(unittest.TestCase):
def setUp(self):
self.request = partial(request, host, ssl_port)
- def test_hostinfo(self):
- resp = self.request('/plugins/kimchi/host').read()
- info = json.loads(resp)
- keys = ['os_distro', 'os_version', 'os_codename', 'cpu_model',
- 'memory', 'cpus']
- self.assertEquals(sorted(keys), sorted(info.keys()))
-
- distro, version, codename = platform.linux_distribution()
- self.assertEquals(distro, info['os_distro'])
- self.assertEquals(version, info['os_version'])
- self.assertEquals(unicode(codename, "utf-8"), info['os_codename'])
- self.assertEquals(psutil.TOTAL_PHYMEM, info['memory'])
-
- def test_hoststats(self):
- time.sleep(1)
- stats_keys = ['cpu_utilization', 'memory', 'disk_read_rate',
- 'disk_write_rate', 'net_recv_rate', 'net_sent_rate']
- resp = self.request('/plugins/kimchi/host/stats').read()
- stats = json.loads(resp)
- self.assertEquals(sorted(stats_keys), sorted(stats.keys()))
-
- cpu_utilization = stats['cpu_utilization']
- self.assertIsInstance(cpu_utilization, float)
- self.assertGreaterEqual(cpu_utilization, 0.0)
- self.assertTrue(cpu_utilization <= 100.0)
-
- memory_stats = stats['memory']
- self.assertIn('total', memory_stats)
- self.assertIn('free', memory_stats)
- self.assertIn('cached', memory_stats)
- self.assertIn('buffers', memory_stats)
- self.assertIn('avail', memory_stats)
-
- resp = self.request('/plugins/kimchi/host/stats/history').read()
- history = json.loads(resp)
- self.assertEquals(sorted(stats_keys), sorted(history.keys()))
-
- def test_host_actions(self):
- def _task_lookup(taskid):
- return json.loads(
- self.request('/plugins/kimchi/tasks/%s' % taskid).read()
- )
-
- resp = self.request('/plugins/kimchi/host/shutdown', '{}', 'POST')
- self.assertEquals(200, resp.status)
- resp = self.request('/plugins/kimchi/host/reboot', '{}', 'POST')
- self.assertEquals(200, resp.status)
-
- # Test system update
- resp = self.request('/plugins/kimchi/host/packagesupdate', None, 'GET')
- pkgs = json.loads(resp.read())
- self.assertEquals(3, len(pkgs))
-
- pkg_keys = ['package_name', 'repository', 'arch', 'version']
- for p in pkgs:
- name = p['package_name']
- resp = self.request('/plugins/kimchi/host/packagesupdate/' + name,
- None, 'GET')
- info = json.loads(resp.read())
- self.assertEquals(sorted(pkg_keys), sorted(info.keys()))
-
- resp = self.request('/plugins/kimchi/host/swupdate', '{}', 'POST')
- task = json.loads(resp.read())
- task_params = [u'id', u'message', u'status', u'target_uri']
- self.assertEquals(sorted(task_params), sorted(task.keys()))
-
- resp = self.request('/tasks/' + task[u'id'], None,
- 'GET')
- task_info = json.loads(resp.read())
- self.assertEquals(task_info['status'], 'running')
- wait_task(_task_lookup, task_info['id'])
- resp = self.request('/tasks/' + task[u'id'], None,
- 'GET')
- task_info = json.loads(resp.read())
- self.assertEquals(task_info['status'], 'finished')
- self.assertIn(u'All packages updated', task_info['message'])
- pkgs = model.packagesupdate_get_list()
- self.assertEquals(0, len(pkgs))
-
- def test_host_partitions(self):
- resp = self.request('/plugins/kimchi/host/partitions')
- self.assertEquals(200, resp.status)
- partitions = json.loads(resp.read())
-
- keys = ['name', 'path', 'type', 'fstype', 'size', 'mountpoint',
- 'available']
- for item in partitions:
- resp = self.request('/plugins/kimchi/host/partitions/%s' %
- item['name'])
- info = json.loads(resp.read())
- self.assertEquals(sorted(info.keys()), sorted(keys))
-
def test_host_devices(self):
def asset_devices_type(devices, dev_type):
for dev in devices:
diff --git a/plugins/kimchi/tests/test_model.py b/plugins/kimchi/tests/test_model.py
index 7c89048..1a1ca49 100644
--- a/plugins/kimchi/tests/test_model.py
+++ b/plugins/kimchi/tests/test_model.py
@@ -951,54 +951,6 @@ class ModelTests(unittest.TestCase):
self.assertTrue('kimchi-vm' in vms)
- @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
- def test_debug_reports(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- if not inst.capabilities_lookup()['system_report_tool']:
- raise unittest.SkipTest("Without debug report tool")
-
- try:
- timeout = int(os.environ['TEST_REPORT_TIMEOUT'])
- except (ValueError, KeyError):
- timeout = 120
-
- namePrefix = 'unitTestReport'
- # sosreport always deletes unsual letters like '-' and '_' in the
- # generated report file name.
- uuidstr = str(uuid.uuid4()).translate(None, "-_")
- reportName = namePrefix + uuidstr
- try:
- inst.debugreport_delete(namePrefix + '*')
- except NotFoundError:
- pass
- with RollbackContext() as rollback:
- report_list = inst.debugreports_get_list()
- self.assertFalse(reportName in report_list)
- try:
- tmp_name = reportName + "_1"
- task = inst.debugreports_create({'name': reportName})
- rollback.prependDefer(inst.debugreport_delete, tmp_name)
- taskid = task['id']
- inst.task_wait(taskid, timeout)
- self.assertEquals('finished',
- inst.task_lookup(taskid)['status'],
- "It is not necessary an error. "
- "You may need to increase the "
- "timeout number by "
- "TEST_REPORT_TIMEOUT=200 "
- "./run_tests.sh test_model")
- report_list = inst.debugreports_get_list()
- self.assertTrue(reportName in report_list)
- name = inst.debugreport_update(reportName, {'name': tmp_name})
- self.assertEquals(name, tmp_name)
- report_list = inst.debugreports_get_list()
- self.assertTrue(tmp_name in report_list)
- except OperationFailed, e:
- if 'debugreport tool not found' not in e.message:
- raise e
-
def test_get_distros(self):
inst = model.Model('test:///default',
objstore_loc=self.tmp_store)
@@ -1037,195 +989,6 @@ class ModelTests(unittest.TestCase):
volumes = inst.storagevolumes_get_list(args['name'])
self.assertEquals(len(volumes), 2)
- def test_repository_create(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repos = [{'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'},
- {'repo_id': 'fedora-updates-fake',
- 'config':
- {'mirrorlist': 'http://www.fedoraproject.org'}}]
-
- deb_repos = [{'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}},
- {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal', 'comps': ['main']}}]
-
- yum_invalid_repos = []
- deb_invalid_repos = []
-
- for url in invalid_repository_urls:
- wrong_baseurl = {'repo_id': 'wrong-id', 'baseurl': url}
- wrong_mirrorlist = {'repo_id': 'wrong-id',
- 'baseurl': 'www.example.com',
- 'config': {'mirrorlist': url}}
- wrong_config_item = {
- 'repo_id': 'wrong-id',
- 'baseurl': 'www.example.com',
- 'config': {
- 'gpgkey': 'file:///tmp/KEY-fedora-updates-fake-19'}}
-
- yum_invalid_repos.append(wrong_baseurl)
- yum_invalid_repos.append(wrong_mirrorlist)
- yum_invalid_repos.append(wrong_config_item)
-
- wrong_baseurl['config'] = {'dist': 'tasty'}
- wrong_config = {'baseurl': deb_repos[0]['baseurl'],
- 'config': {
- 'unsupported_item': "a_unsupported_item"}}
- deb_invalid_repos.append(wrong_baseurl)
- deb_invalid_repos.append(wrong_config)
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- test_repos = yum_repos
- invalid_repos = yum_invalid_repos
- elif repo_type == 'deb':
- test_repos = deb_repos
- invalid_repos = deb_invalid_repos
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- # create repositories with invalid data
- for repo in invalid_repos:
- self.assertRaises(InvalidParameter, inst.repositories_create, repo)
-
- for repo in test_repos:
- system_host_repos = len(inst.repositories_get_list())
- repo_id = inst.repositories_create(repo)
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(repo_id, repo_info['repo_id'])
- self.assertEquals(True, repo_info.get('enabled'))
- self.assertEquals(repo.get('baseurl', ''),
- repo_info.get('baseurl'))
-
- original_config = repo.get('config', {})
- config_info = repo_info.get('config', {})
-
- if repo_type == 'yum':
- self.assertEquals(original_config.get('mirrorlist', ''),
- config_info.get('mirrorlist', ''))
- self.assertEquals(True, config_info['gpgcheck'])
- else:
- self.assertEquals(original_config['dist'], config_info['dist'])
- self.assertEquals(original_config.get('comps', []),
- config_info.get('comps', []))
-
- inst.repository_delete(repo_id)
- self.assertRaises(NotFoundError, inst.repository_lookup, repo_id)
-
- self.assertRaises(NotFoundError, inst.repository_lookup, 'google')
-
- def test_repository_update(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repo = {'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'}
- yum_new_repo = {'baseurl': 'http://www.fedoraproject.org'}
-
- deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}}
- deb_new_repo = {'baseurl': 'http://br.archive.canonical.com/ubuntu/',
- 'config': {'dist': 'utopic'}}
-
- yum_invalid_repos = []
- deb_invalid_repos = []
-
- for url in invalid_repository_urls:
- wrong_baseurl = {'baseurl': url}
- wrong_mirrorlist = {'baseurl': 'www.example.com',
- 'config': {'mirrorlist': url}}
-
- yum_invalid_repos.append(wrong_baseurl)
- yum_invalid_repos.append(wrong_mirrorlist)
-
- wrong_baseurl['config'] = {'dist': 'tasty'}
- deb_invalid_repos.append(wrong_baseurl)
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- repo = yum_repo
- new_repo = yum_new_repo
- invalid_repos = yum_invalid_repos
- elif repo_type == 'deb':
- repo = deb_repo
- new_repo = deb_new_repo
- invalid_repos = deb_invalid_repos
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- system_host_repos = len(inst.repositories_get_list())
-
- with RollbackContext() as rollback:
- repo_id = inst.repositories_create(repo)
- rollback.prependDefer(inst.repository_delete, repo_id)
-
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- # update repositories with invalid data
- for tmp_repo in invalid_repos:
- self.assertRaises(InvalidParameter, inst.repository_update,
- repo_id, tmp_repo)
-
- new_repo_id = inst.repository_update(repo_id, new_repo)
- repo_info = inst.repository_lookup(new_repo_id)
-
- self.assertEquals(new_repo_id, repo_info['repo_id'])
- self.assertEquals(new_repo['baseurl'], repo_info['baseurl'])
- self.assertEquals(True, repo_info['enabled'])
- inst.repository_update(new_repo_id, repo)
-
- def test_repository_disable_enable(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repo = {'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'}
- deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}}
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- repo = yum_repo
- elif repo_type == 'deb':
- repo = deb_repo
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- system_host_repos = len(inst.repositories_get_list())
-
- repo_id = inst.repositories_create(repo)
-
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(True, repo_info['enabled'])
-
- inst.repository_disable(repo_id)
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(False, repo_info['enabled'])
-
- inst.repository_enable(repo_id)
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(True, repo_info['enabled'])
-
- # remove files creates
- inst.repository_delete(repo_id)
-
-
class BaseModelTests(unittest.TestCase):
class FoosModel(object):
def __init__(self):
diff --git a/plugins/kimchi/tests/test_rest.py b/plugins/kimchi/tests/test_rest.py
index 243074e..c0f219a 100644
--- a/plugins/kimchi/tests/test_rest.py
+++ b/plugins/kimchi/tests/test_rest.py
@@ -1226,60 +1226,6 @@ class RestTests(unittest.TestCase):
# Distro not found error
self.assertIn('KCHDISTRO0001E', distro.get('reason'))
- def test_debugreports(self):
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports')
- self.assertEquals(200, resp.status)
-
- def _report_delete(self, name):
- request(host, ssl_port, '/plugins/kimchi/debugreports/%s' % name, '{}',
- 'DELETE')
-
- def test_create_debugreport(self):
- req = json.dumps({'name': 'report1'})
- with RollbackContext() as rollback:
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports', req,
- 'POST')
- self.assertEquals(202, resp.status)
- task = json.loads(resp.read())
- # make sure the debugreport doesn't exist until the
- # the task is finished
- wait_task(self._task_lookup, task['id'])
- rollback.prependDefer(self._report_delete, 'report2')
- resp = request(host, ssl_port,
- '/plugins/kimchi/debugreports/report1')
- debugreport = json.loads(resp.read())
- self.assertEquals("report1", debugreport['name'])
- self.assertEquals(200, resp.status)
- req = json.dumps({'name': 'report2'})
- resp = request(host, ssl_port,
- '/plugins/kimchi/debugreports/report1', req, 'PUT')
- self.assertEquals(303, resp.status)
-
- def test_debugreport_download(self):
- req = json.dumps({'name': 'report1'})
- with RollbackContext() as rollback:
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports', req,
- 'POST')
- self.assertEquals(202, resp.status)
- task = json.loads(resp.read())
- # make sure the debugreport doesn't exist until the
- # the task is finished
- wait_task(self._task_lookup, task['id'], 20)
- rollback.prependDefer(self._report_delete, 'report1')
- resp = request(host, ssl_port,
- '/plugins/kimchi/debugreports/report1')
- debugreport = json.loads(resp.read())
- self.assertEquals("report1", debugreport['name'])
- self.assertEquals(200, resp.status)
- resp = request(host, ssl_port,
- '/plugins/kimchi/debugreports/report1/content')
- self.assertEquals(200, resp.status)
- resp = request(host, ssl_port,
- '/plugins/kimchi/debugreports/report1')
- debugre = json.loads(resp.read())
- resp = request(host, ssl_port, debugre['uri'])
- self.assertEquals(200, resp.status)
-
def test_repositories(self):
def verify_repo(t, res):
for field in ('repo_id', 'enabled', 'baseurl', 'config'):
diff --git a/plugins/kimchi/ui/config/tab-ext.xml b/plugins/kimchi/ui/config/tab-ext.xml
index ee88c88..48ec9ec 100644
--- a/plugins/kimchi/ui/config/tab-ext.xml
+++ b/plugins/kimchi/ui/config/tab-ext.xml
@@ -2,13 +2,6 @@
<tabs-ext>
<tab>
<access role="admin" mode="admin"/>
- <access role="user" mode="none"/>
-
- <title>Host</title>
- <path>plugins/kimchi/host.html</path>
- </tab>
- <tab>
- <access role="admin" mode="admin"/>
<access role="user" mode="byInstance"/>
<title>Guests</title>
--
2.1.0
2
1
30 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
V1 -> V2:
- Grammar fixes
V1:
Update the README file of Wok and Kimchi projects after the split of code
and changed the header of all back-end and front-end files of Wok.
Paulo Vital (3):
Update README.md of Wok and Kimchi after slipt.
Update the header of all Wok back-end files
Update the header of all Wok front-end files
Makefile.am | 6 +-
autogen.sh | 20 +++++
configure.ac | 4 +-
contrib/DEBIAN/Makefile.am | 7 +-
contrib/DEBIAN/postrm | 6 +-
contrib/Makefile.am | 7 +-
contrib/check_i18n.py | 4 +-
docs/Makefile.am | 6 +-
docs/README.md | 93 ++++++++++++++++++++++
src/Makefile.am | 4 +-
src/nginx/Makefile.am | 4 +-
src/nginx/wok.conf.in | 4 +-
src/wok/Makefile.am | 6 +-
src/wok/__init__.py | 6 +-
src/wok/asynctask.py | 6 +-
src/wok/auth.py | 4 +-
src/wok/basemodel.py | 6 +-
src/wok/cachebust.py | 6 +-
src/wok/config.py.in | 4 +-
src/wok/control/Makefile.am | 6 +-
src/wok/control/__init__.py | 6 +-
src/wok/control/base.py | 4 +-
src/wok/control/plugins.py | 6 +-
src/wok/control/tasks.py | 6 +-
src/wok/control/utils.py | 6 +-
src/wok/exception.py | 6 +-
src/wok/i18n.py | 4 +-
src/wok/model/Makefile.am | 6 +-
src/wok/model/__init__.py | 6 +-
src/wok/model/model.py | 4 +-
src/wok/model/plugins.py | 6 +-
src/wok/model/tasks.py | 6 +-
src/wok/objectstore.py | 6 +-
src/wok/plugins/Makefile.am | 6 +-
src/wok/plugins/__init__.py | 6 +-
src/wok/plugins/kimchi/docs/README.md | 86 ++++++++------------
src/wok/plugins/sample/Makefile.am | 6 +-
src/wok/plugins/sample/__init__.py | 6 +-
src/wok/plugins/sample/i18n.py | 4 +-
src/wok/plugins/sample/model.py | 6 +-
src/wok/plugins/sample/ui/Makefile.am | 8 +-
src/wok/plugins/sample/ui/config/Makefile.am | 7 +-
src/wok/plugins/sample/ui/js/Makefile.am | 6 +-
src/wok/plugins/sample/ui/js/util.js | 6 +-
src/wok/plugins/sample/ui/pages/Makefile.am | 6 +-
src/wok/plugins/sample/ui/pages/i18n.json.tmpl | 6 +-
.../plugins/sample/ui/pages/sample-tab1.html.tmpl | 6 +-
.../plugins/sample/ui/pages/sample-tab2.html.tmpl | 6 +-
src/wok/proxy.py | 4 +-
src/wok/rollbackcontext.py | 6 +-
src/wok/root.py | 4 +-
src/wok/server.py | 6 +-
src/wok/sslcert.py | 6 +-
src/wok/template.py | 6 +-
src/wok/utils.py | 4 +-
src/wok/xmlutils/Makefile.am | 6 +-
src/wok/xmlutils/__init__.py | 6 +-
src/wok/xmlutils/utils.py | 6 +-
src/wokd.in | 4 +-
ui/Makefile.am | 6 +-
ui/base64/Makefile.am | 4 +-
ui/css/Makefile.am | 6 +-
ui/css/fontawesome/Makefile.am | 4 +-
ui/css/jquery-ui.custom.css | 4 +-
ui/css/opensans/Makefile.am | 4 +-
ui/css/theme-default/about.css | 6 +-
ui/css/theme-default/base.css | 6 +-
ui/css/theme-default/button-flat.css | 4 +-
ui/css/theme-default/button.css | 4 +-
ui/css/theme-default/checkbox-flat.css | 6 +-
ui/css/theme-default/circleGauge.css | 6 +-
ui/css/theme-default/datagrid.css | 4 +-
ui/css/theme-default/dialog-flat.css | 6 +-
ui/css/theme-default/error.css | 6 +-
ui/css/theme-default/form.css | 4 +-
ui/css/theme-default/framework.css | 6 +-
ui/css/theme-default/gauge-flat.css | 6 +-
ui/css/theme-default/grid.css | 6 +-
ui/css/theme-default/jquery-ui.custom.css | 6 +-
ui/css/theme-default/line-chart.css | 6 +-
ui/css/theme-default/line.css | 4 +-
ui/css/theme-default/list-flat.css | 6 +-
ui/css/theme-default/login-window.css | 6 +-
ui/css/theme-default/menu-flat.css | 4 +-
ui/css/theme-default/message-flat.css | 6 +-
ui/css/theme-default/message.css | 4 +-
ui/css/theme-default/messagebar-flat.css | 6 +-
ui/css/theme-default/nav-tree.css | 6 +-
ui/css/theme-default/navbar.css | 6 +-
ui/css/theme-default/popover.css | 6 +-
ui/css/theme-default/radio-flat.css | 8 +-
ui/css/theme-default/reset.css | 4 +-
ui/css/theme-default/selectmenu-flat.css | 4 +-
ui/css/theme-default/tabs.css | 4 +-
ui/css/theme-default/textbox-flat.css | 6 +-
ui/css/theme-default/theme.css | 4 +-
ui/css/theme-default/tile-check.css | 6 +-
ui/css/theme-default/toolbar.css | 6 +-
ui/css/theme-default/topbar.css | 4 +-
ui/css/theme-default/window.css | 4 +-
ui/js/Makefile.am | 6 +-
ui/js/src/wok.api.js | 4 +-
ui/js/src/wok.cookie.js | 6 +-
ui/js/src/wok.form.js | 6 +-
ui/js/src/wok.grid.js | 4 +-
ui/js/src/wok.lang.js | 6 +-
ui/js/src/wok.line-chart.js | 6 +-
ui/js/src/wok.login.js | 4 +-
ui/js/src/wok.main.js | 4 +-
ui/js/src/wok.message.js | 6 +-
ui/js/src/wok.object.js | 6 +-
ui/js/src/wok.popable.js | 6 +-
ui/js/src/wok.select.js | 6 +-
ui/js/src/wok.string.js | 6 +-
ui/js/src/wok.substitute.js | 6 +-
ui/js/src/wok.topic.js | 6 +-
ui/js/src/wok.user.js | 6 +-
ui/js/src/wok.utils.js | 4 +-
ui/js/src/wok.window.js | 6 +-
ui/js/widgets/button-dropDown.js | 6 +-
ui/js/widgets/button-flat.js | 4 +-
ui/js/widgets/checkbox-flat.js | 4 +-
ui/js/widgets/circleGauge.js | 6 +-
ui/js/widgets/combobox.js | 6 +-
ui/js/widgets/dialog-flat.js | 4 +-
ui/js/widgets/filter-select.js | 6 +-
ui/js/widgets/gauge-flat.js | 4 +-
ui/js/widgets/grid.js | 4 +-
ui/js/widgets/line.js | 4 +-
ui/js/widgets/list-flat.js | 4 +-
ui/js/widgets/menu-flat.js | 4 +-
ui/js/widgets/message-flat.js | 4 +-
ui/js/widgets/messagebar-flat.js | 4 +-
ui/js/widgets/radio-flat.js | 4 +-
ui/js/widgets/samples/dialog.html | 4 +-
ui/js/widgets/samples/gauge-flat.html | 6 +-
ui/js/widgets/samples/grid.html | 4 +-
ui/js/widgets/samples/line.html | 4 +-
ui/js/widgets/samples/list.html | 4 +-
.../menu-button-radio-checkbox-text-select.html | 4 +-
ui/js/widgets/samples/message.html | 4 +-
ui/js/widgets/samples/messagebar-flat.html | 4 +-
ui/js/widgets/samples/tabs.html | 4 +-
ui/js/widgets/select-menu.js | 6 +-
ui/js/widgets/selectmenu-flat.js | 4 +-
ui/js/widgets/textbox-flat.js | 4 +-
ui/libs/Makefile.am | 6 +-
ui/libs/bootstrap-select/Makefile.am | 4 +-
ui/libs/bootstrap/Makefile.am | 4 +-
ui/libs/es5-shim/Makefile.am | 4 +-
ui/libs/jquery-i18n/Makefile.am | 4 +-
ui/libs/jquery-ui/Makefile.am | 2 +
ui/libs/jquery-ui/themes/Makefile.am | 6 +-
ui/libs/jquery-ui/themes/base/Makefile.am | 6 +-
ui/libs/jquery-ui/themes/base/images/Makefile.am | 6 +-
ui/libs/jquery/Makefile.am | 4 +-
ui/pages/Makefile.am | 6 +-
ui/pages/error.html.tmpl | 6 +-
ui/pages/i18n.json.tmpl | 4 +-
ui/pages/login.html.tmpl | 6 +-
ui/pages/websockify/Makefile.am | 4 +-
ui/pages/wok-ui.html.tmpl | 6 +-
162 files changed, 721 insertions(+), 305 deletions(-)
--
2.4.3
2
5
The PYTHONPATH must point to wok and plugins directories in order to run
the tests properly.
Fix it.
There are a lot of tests failing that will be fixed in a next patch set.
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
src/wok/plugins/kimchi/tests/run_tests.sh.in | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/wok/plugins/kimchi/tests/run_tests.sh.in b/src/wok/plugins/kimchi/tests/run_tests.sh.in
index beef75e..0e848c8 100644
--- a/src/wok/plugins/kimchi/tests/run_tests.sh.in
+++ b/src/wok/plugins/kimchi/tests/run_tests.sh.in
@@ -52,4 +52,6 @@ for ((i=0;i<${#LIST[@]};i++)); do
fi
done
-PYTHONPATH=../plugins:../src:../ $CMD $OPTS ${MODEL_LIST[@]} ${MOCK_LIST[@]}
+# ../../../../ refers to wok directory
+# ../../../ refers to plugins directory
+PYTHONPATH=../../../../:../../../ $CMD $OPTS ${MODEL_LIST[@]} ${MOCK_LIST[@]}
--
2.1.0
2
2
30 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Move the KCHASYNC0003E ("Timeout of %(seconds)s seconds expired while running
task '%(task)s.") message error from Kimchi to Wok and update its code to
WOKASYNC0003E.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
src/wok/i18n.py | 2 ++
src/wok/model/tasks.py | 2 +-
src/wok/plugins/kimchi/i18n.py | 2 --
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/wok/i18n.py b/src/wok/i18n.py
index 43a1edf..a6376bd 100644
--- a/src/wok/i18n.py
+++ b/src/wok/i18n.py
@@ -33,6 +33,8 @@ messages = {
"WOKASYNC0001E": _("Datastore is not initiated in the model object."),
"WOKASYNC0002E": _("Unable to start task due error: %(err)s"),
+ "WOKASYNC0003E": _("Timeout of %(seconds)s seconds expired while running task '%(task)s."),
+
"WOKAUTH0001E": _("Authentication failed for user '%(username)s'. [Error code: %(code)s]"),
"WOKAUTH0002E": _("You are not authorized to access Kimchi"),
diff --git a/src/wok/model/tasks.py b/src/wok/model/tasks.py
index 678fdc2..d57c908 100644
--- a/src/wok/model/tasks.py
+++ b/src/wok/model/tasks.py
@@ -60,5 +60,5 @@ class TaskModel(object):
time.sleep(1)
- raise TimeoutExpired('KCHASYNC0003E', {'seconds': timeout,
+ raise TimeoutExpired('WOKASYNC0003E', {'seconds': timeout,
'task': task['target_uri']})
diff --git a/src/wok/plugins/kimchi/i18n.py b/src/wok/plugins/kimchi/i18n.py
index 2274d6f..ea325b8 100644
--- a/src/wok/plugins/kimchi/i18n.py
+++ b/src/wok/plugins/kimchi/i18n.py
@@ -25,8 +25,6 @@ _ = gettext.gettext
messages = {
"KCHAPI0001E": _("Unknown parameter %(value)s"),
- "KCHASYNC0003E": _("Timeout of %(seconds)s seconds expired while running task '%(task)s."),
-
"KCHAUTH0004E": _("User %(user_id)s not found with given LDAP settings."),
"KCHDEVS0001E": _('Unknown "_cap" specified'),
--
2.4.3
2
1
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Moved those tests related to Wok framework from plugins/kimchi to wok structure.
Updated build files and tests to make all test structure usable.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
Makefile.am | 4 +-
configure.ac | 1 +
plugins/kimchi/tests/test_exception.py | 123 ------------
plugins/kimchi/tests/test_objectstore.py | 97 ---------
plugins/kimchi/tests/test_plugin.py | 126 ------------
plugins/kimchi/tests/test_rollbackcontext.py | 99 ---------
plugins/kimchi/tests/test_server.py | 289 ---------------------------
plugins/kimchi/tests/test_utils.py | 69 -------
tests/Makefile.am | 50 +++++
tests/run_tests.sh.in | 55 +++++
tests/test_config.py.in | 107 ++++++++++
tests/test_exception.py | 132 ++++++++++++
tests/test_objectstore.py | 99 +++++++++
tests/test_plugin.py | 122 +++++++++++
tests/test_rollbackcontext.py | 101 ++++++++++
tests/test_server.py | 284 ++++++++++++++++++++++++++
tests/test_utils.py | 71 +++++++
tests/utils.py | 261 ++++++++++++++++++++++++
18 files changed, 1285 insertions(+), 805 deletions(-)
delete mode 100644 plugins/kimchi/tests/test_exception.py
delete mode 100644 plugins/kimchi/tests/test_objectstore.py
delete mode 100644 plugins/kimchi/tests/test_plugin.py
delete mode 100644 plugins/kimchi/tests/test_rollbackcontext.py
delete mode 100644 plugins/kimchi/tests/test_server.py
delete mode 100644 plugins/kimchi/tests/test_utils.py
create mode 100644 tests/Makefile.am
create mode 100644 tests/run_tests.sh.in
create mode 100644 tests/test_config.py.in
create mode 100644 tests/test_exception.py
create mode 100644 tests/test_objectstore.py
create mode 100644 tests/test_plugin.py
create mode 100644 tests/test_rollbackcontext.py
create mode 100644 tests/test_server.py
create mode 100644 tests/test_utils.py
create mode 100644 tests/utils.py
diff --git a/Makefile.am b/Makefile.am
index 337aa24..0eabd3d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -17,7 +17,7 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-SUBDIRS = src ui docs contrib po
+SUBDIRS = src ui docs contrib po tests
man_MANS = docs/wokd.8
@@ -36,7 +36,7 @@ EXTRA_DIST = \
$(NULL)
-PEP8_BLACKLIST = *src/wok/config.py,*src/wok/i18n.py,*src/wok/plugins/kimchi
+PEP8_BLACKLIST = *src/wok/config.py,*src/wok/i18n.py,*src/wok/plugins/kimchi,*tests/test_config.py
SKIP_PYFLAKES_ERR = "\./src/wok/websocket\.py"
diff --git a/configure.ac b/configure.ac
index 8b2302f..98ce5ee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -127,6 +127,7 @@ AC_CONFIG_FILES([
contrib/DEBIAN/control
contrib/wok.spec.fedora
contrib/wok.spec.suse
+ tests/Makefile
],[
chmod +x po/gen-pot
])
diff --git a/plugins/kimchi/tests/test_exception.py b/plugins/kimchi/tests/test_exception.py
deleted file mode 100644
index 4459aa6..0000000
--- a/plugins/kimchi/tests/test_exception.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013-2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import json
-import os
-import unittest
-
-from wok.plugins.kimchi import mockmodel
-
-from utils import get_free_port, patch_auth, request, run_server
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-
-
-def setup_server(environment='development'):
- global test_server, model, host, port, ssl_port
-
- patch_auth()
- model = mockmodel.MockModel('/tmp/obj-store-test')
- host = '127.0.0.1'
- port = get_free_port('http')
- ssl_port = get_free_port('https')
- test_server = run_server(host, port, ssl_port, test_mode=True, model=model,
- environment=environment)
-
-
-class ExceptionTests(unittest.TestCase):
- def tearDown(self):
- test_server.stop()
- os.unlink('/tmp/obj-store-test')
-
- def test_production_env(self):
- """
- Test reasons sanitized in production env
- """
- setup_server('production')
- # test 404
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms/blah').read()
- )
- self.assertEquals('404 Not Found', resp.get('code'))
-
- # test 405 wrong method
- resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
- msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
- self.assertEquals('405 Method Not Allowed', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
-
- # test 400 parse error
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
- )
- msg = u'WOKAPI0006E: Unable to parse JSON request'
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
- self.assertNotIn('call_stack', resp)
-
- # test 400 missing required parameter
- req = json.dumps({})
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST').read()
- )
- self.assertEquals('400 Bad Request', resp.get('code'))
- m = u"KCHVM0016E: Specify a template to create a virtual machine from"
- self.assertEquals(m, resp.get('reason'))
- self.assertNotIn('call_stack', resp)
-
- def test_development_env(self):
- """
- Test traceback thrown in development env
- """
- setup_server()
- # test 404
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms/blah').read()
- )
- self.assertEquals('404 Not Found', resp.get('code'))
-
- # test 405 wrong method
- resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
- msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
- self.assertEquals('405 Method Not Allowed', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
-
- # test 400 parse error
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
- )
- msg = u'WOKAPI0006E: Unable to parse JSON request'
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
- self.assertIn('call_stack', resp)
-
- # test 400 missing required parameter
- req = json.dumps({})
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST').read()
- )
- m = u"KCHVM0016E: Specify a template to create a virtual machine from"
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(m, resp.get('reason'))
- self.assertIn('call_stack', resp)
diff --git a/plugins/kimchi/tests/test_objectstore.py b/plugins/kimchi/tests/test_objectstore.py
deleted file mode 100644
index 632786f..0000000
--- a/plugins/kimchi/tests/test_objectstore.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import os
-import tempfile
-import threading
-import unittest
-
-from wok import objectstore
-from wok.exception import NotFoundError
-
-
-tmpfile = None
-
-
-def setUpModule():
- global tmpfile
- tmpfile = tempfile.mktemp()
-
-
-def tearDownModule():
- os.unlink(tmpfile)
-
-
-class ObjectStoreTests(unittest.TestCase):
- def test_objectstore(self):
- store = objectstore.ObjectStore(tmpfile)
-
- with store as session:
- # Test create
- session.store('fǒǒ', 'těst1', {'α': 1})
- session.store('fǒǒ', 'těst2', {'β': 2})
-
- # Test list
- items = session.get_list('fǒǒ')
- self.assertTrue(u'těst1' in items)
- self.assertTrue(u'těst2' in items)
-
- # Test get
- item = session.get('fǒǒ', 'těst1')
- self.assertEquals(1, item[u'α'])
-
- # Test delete
- session.delete('fǒǒ', 'těst2')
- self.assertEquals(1, len(session.get_list('fǒǒ')))
-
- # Test get non-existent item
-
- self.assertRaises(NotFoundError, session.get,
- 'α', 'β')
-
- # Test delete non-existent item
- self.assertRaises(NotFoundError, session.delete,
- 'fǒǒ', 'těst2')
-
- # Test refresh existing item
- session.store('fǒǒ', 'těst1', {'α': 2})
- item = session.get('fǒǒ', 'těst1')
- self.assertEquals(2, item[u'α'])
-
- def test_object_store_threaded(self):
- def worker(ident):
- with store as session:
- session.store('foo', ident, {})
-
- store = objectstore.ObjectStore(tmpfile)
-
- threads = []
- for i in xrange(50):
- t = threading.Thread(target=worker, args=(i,))
- t.setDaemon(True)
- t.start()
- threads.append(t)
-
- for t in threads:
- t.join()
-
- with store as session:
- self.assertEquals(50, len(session.get_list('foo')))
- self.assertEquals(10, len(store._connections.keys()))
diff --git a/plugins/kimchi/tests/test_plugin.py b/plugins/kimchi/tests/test_plugin.py
deleted file mode 100644
index fc8e277..0000000
--- a/plugins/kimchi/tests/test_plugin.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import json
-import os
-import unittest
-from functools import partial
-
-from wok.utils import get_enabled_plugins
-
-from wok.plugins.kimchi import mockmodel
-
-import utils
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-
-
-def setUpModule():
- global test_server, model, host, port, ssl_port
-
- utils.patch_auth()
- model = mockmodel.MockModel('/tmp/obj-store-test')
- host = '127.0.0.1'
- port = utils.get_free_port('http')
- ssl_port = utils.get_free_port('https')
- test_server = utils.run_server(host, port, ssl_port, test_mode=True,
- model=model)
-
-
-def tearDownModule():
- test_server.stop()
- os.unlink('/tmp/obj-store-test')
-
-
-(a)unittest.skipUnless(
- 'sample' in [plugin for plugin, _config in get_enabled_plugins()],
- 'sample plugin is not enabled, skip this test!')
-class PluginTests(unittest.TestCase):
-
- def setUp(self):
- self.request = partial(utils.request, host, ssl_port)
-
- def _create_rectangle(self, name, length, width):
- req = json.dumps({'name': name, 'length': length, 'width': width})
- resp = self.request('/plugins/sample/rectangles', req, 'POST')
- return resp
-
- def _get_rectangle(self, name):
- resp = self.request('/plugins/sample/rectangles/%s' % name)
- return json.loads(resp.read())
-
- def _create_rectangle_and_assert(self, name, length, width):
- resp = self._create_rectangle(name, length, width)
- self.assertEquals(201, resp.status)
-
- rectangle = self._get_rectangle(name)
- self.assertEquals(rectangle['name'], name)
- self.assertEquals(rectangle['length'], length)
- self.assertEquals(rectangle['width'], width)
-
- def _get_rectangles_list(self):
- resp = self.request('/plugins/sample/rectangles')
- rectangles = json.loads(resp.read())
- name_list = [rectangle['name'] for rectangle in rectangles]
- return name_list
-
- def test_rectangles(self):
- # Create two new rectangles
- self._create_rectangle_and_assert('small', 10, 8)
- self._create_rectangle_and_assert('big', 20, 16)
-
- # Verify they're in the list
- name_list = self._get_rectangles_list()
- self.assertIn('small', name_list)
- self.assertIn('big', name_list)
-
- # Update the big rectangle.
- req = json.dumps({'length': 40, 'width': 30})
- resp = self.request('/plugins/sample/rectangles/big', req, 'PUT')
- self.assertEquals(200, resp.status)
- big = self._get_rectangle('big')
- self.assertEquals(big['length'], 40)
- self.assertEquals(big['width'], 30)
-
- # Delete two rectangles
- resp = self.request('/plugins/sample/rectangles/big', '{}', 'DELETE')
- self.assertEquals(204, resp.status)
- resp = self.request('/plugins/sample/rectangles/small', '{}', 'DELETE')
- self.assertEquals(204, resp.status)
- name_list = self._get_rectangles_list()
- self.assertEquals([], name_list)
-
- def test_bad_params(self):
- # Bad name
- resp = self._create_rectangle(1.0, 30, 40)
- self.assertEquals(400, resp.status)
-
- # Bad length value
- resp = self._create_rectangle('test', -10.0, 40)
- self.assertEquals(400, resp.status)
-
- # Missing param for width
- req = json.dumps({'name': 'nowidth', 'length': 40})
- resp = self.request('/plugins/sample/rectangles', req, 'POST')
- self.assertEquals(400, resp.status)
diff --git a/plugins/kimchi/tests/test_rollbackcontext.py b/plugins/kimchi/tests/test_rollbackcontext.py
deleted file mode 100644
index 6eac6d0..0000000
--- a/plugins/kimchi/tests/test_rollbackcontext.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import unittest
-
-from wok.rollbackcontext import RollbackContext
-
-
-class FirstError(Exception):
- '''A hypothetical exception to be raise in the test firstly.'''
- pass
-
-
-class SecondError(Exception):
- '''A hypothetical exception to be raise in the test secondly.'''
- pass
-
-
-class RollbackContextTests(unittest.TestCase):
-
- def setUp(self):
- self._counter = 0
-
- def _inc_counter(self):
- self._counter += 1
-
- def _raise(self, exception=FirstError):
- raise exception()
-
- def test_rollback(self):
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._inc_counter)
- self.assertEquals(self._counter, 2)
-
- def test_raise(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._inc_counter)
- raise FirstError()
- rollback.prependDefer(self._inc_counter)
- except FirstError:
- # All undo before the FirstError should be run
- self.assertEquals(self._counter, 2)
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_undo(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._raise)
- rollback.prependDefer(self._inc_counter)
- except FirstError:
- # All undo should be run
- self.assertEquals(self._counter, 2)
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_prefer_original(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._raise, SecondError)
- raise FirstError()
- except FirstError:
- pass
- except SecondError:
- self.fail('Should have preferred FirstError to SecondError')
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_prefer_first_undo(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._raise, SecondError)
- rollback.prependDefer(self._raise, FirstError)
- except FirstError:
- pass
- except SecondError:
- self.fail('Should have preferred FirstError to SecondError')
- else:
- self.fail('Should have raised FirstError')
diff --git a/plugins/kimchi/tests/test_server.py b/plugins/kimchi/tests/test_server.py
deleted file mode 100644
index d5ef565..0000000
--- a/plugins/kimchi/tests/test_server.py
+++ /dev/null
@@ -1,289 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import base64
-import cherrypy
-import json
-import os
-import tempfile
-import threading
-import unittest
-from functools import partial
-
-from wok.control.base import Collection, Resource
-
-from wok.plugins.kimchi import mockmodel
-
-import utils
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-cherrypy_port = None
-tmpfile = None
-
-
-def setUpModule():
- global test_server, model, host, port, ssl_port, cherrypy_port, tmpfile
-
- utils.patch_auth()
- tmpfile = tempfile.mktemp()
- model = mockmodel.MockModel(tmpfile)
- host = '127.0.0.1'
- port = utils.get_free_port('http')
- ssl_port = utils.get_free_port('https')
- cherrypy_port = utils.get_free_port('cherrypy_port')
- test_server = utils.run_server(host, port, ssl_port, test_mode=True,
- cherrypy_port=cherrypy_port, model=model)
-
-
-def tearDownModule():
- test_server.stop()
- os.unlink(tmpfile)
-
-
-class ServerTests(unittest.TestCase):
- def setUp(self):
- self.request = partial(utils.request, host, ssl_port)
- model.reset()
-
- def assertValidJSON(self, txt):
- try:
- json.loads(txt)
- except ValueError:
- self.fail("Invalid JSON: %s" % txt)
-
- def test_server_start(self):
- """
- Test that we can start a server and receive HTTP:200.
- """
- resp = self.request('/')
- self.assertEquals(200, resp.status)
-
- def test_multithreaded_connection(self):
- def worker():
- for i in xrange(100):
- ret = model.vms_get_list()
- self.assertEquals('test', ret[0])
-
- threads = []
- for i in xrange(100):
- t = threading.Thread(target=worker)
- t.setDaemon(True)
- t.start()
- threads.append(t)
- for t in threads:
- t.join()
-
- def test_collection(self):
- c = Collection(model)
-
- # The base Collection is always empty
- cherrypy.request.method = 'GET'
- cherrypy.request.headers['Accept'] = 'application/json'
- self.assertEquals('[]', c.index())
-
- # POST and DELETE raise HTTP:405 by default
- for method in ('POST', 'DELETE'):
- cherrypy.request.method = method
- try:
- c.index()
- except cherrypy.HTTPError, e:
- self.assertEquals(405, e.code)
- else:
- self.fail("Expected exception not raised")
-
- def test_resource(self):
- r = Resource(model)
-
- # Test the base Resource representation
- cherrypy.request.method = 'GET'
- cherrypy.request.headers['Accept'] = 'application/json'
- self.assertEquals('{}', r.index())
-
- # POST and DELETE raise HTTP:405 by default
- for method in ('POST', 'DELETE'):
- cherrypy.request.method = method
- try:
- r.index()
- except cherrypy.HTTPError, e:
- self.assertEquals(405, e.code)
- else:
- self.fail("Expected exception not raised")
-
- def test_404(self):
- """
- A non-existent path should return HTTP:404
- """
- url_list = ['/plugins/kimchi/doesnotexist', '/plugins/kimchi/vms/blah']
- for url in url_list:
- resp = self.request(url)
- self.assertEquals(404, resp.status)
-
- # Verify it works for DELETE too
- resp = self.request('/plugins/kimchi/templates/blah', '', 'DELETE')
- self.assertEquals(404, resp.status)
-
- def test_accepts(self):
- """
- Verify the following expectations regarding the client Accept header:
- If omitted, default to html
- If 'application/json', serve the rest api
- If 'text/html', serve the UI
- If both of the above (in any order), serve the rest api
- If neither of the above, HTTP:406
- """
- resp = self.request("/", headers={})
- location = resp.getheader('location')
- self.assertTrue(location.endswith("login.html"))
- resp = self.request("/login.html", headers={})
- self.assertTrue('<!doctype html>' in resp.read().lower())
-
- resp = self.request("/", headers={'Accept': 'application/json'})
- self.assertValidJSON(resp.read())
-
- resp = self.request("/", headers={'Accept': 'text/html'})
- location = resp.getheader('location')
- self.assertTrue(location.endswith("login.html"))
-
- resp = self.request("/", headers={'Accept':
- 'application/json, text/html'})
- self.assertValidJSON(resp.read())
-
- resp = self.request("/", headers={'Accept':
- 'text/html, application/json'})
- self.assertValidJSON(resp.read())
-
- h = {'Accept': 'text/plain'}
- resp = self.request('/', None, 'GET', h)
- self.assertEquals(406, resp.status)
-
- def test_auth_unprotected(self):
- hdrs = {'AUTHORIZATION': ''}
- uris = ['/plugins/kimchi/js/kimchi.min.js',
- '/plugins/kimchi/css/theme-default.min.css',
- '/plugins/kimchi/images/icon-vm.png',
- '/libs/jquery-1.10.0.min.js',
- '/login.html',
- '/logout']
-
- for uri in uris:
- resp = self.request(uri, None, 'HEAD', hdrs)
- self.assertEquals(200, resp.status)
-
- def test_auth_protected(self):
- hdrs = {'AUTHORIZATION': ''}
- uris = ['/plugins/kimchi/vms',
- '/plugins/kimchi/vms/doesnotexist',
- '/tasks']
-
- for uri in uris:
- resp = self.request(uri, None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_auth_bad_creds(self):
- # Test HTTPBA
- hdrs = {'AUTHORIZATION': "Basic " + base64.b64encode("nouser:badpass")}
- resp = self.request('/plugins/kimchi/vms', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- # Test REST API
- hdrs = {'AUTHORIZATION': ''}
- req = json.dumps({'username': 'nouser', 'password': 'badpass'})
- resp = self.request('/login', req, 'POST', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_auth_browser_no_httpba(self):
- # Kimchi detects REST requests from the browser by looking for a
- # specific header
- hdrs = {"X-Requested-With": "XMLHttpRequest"}
-
- # Try our request (Note that request() will add a valid HTTPBA header)
- resp = self.request('/plugins/kimchi/vms', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
- self.assertEquals(None, resp.getheader('WWW-Authenticate'))
-
- def test_auth_session(self):
- hdrs = {'AUTHORIZATION': '',
- 'Content-Type': 'application/json',
- 'Accept': 'application/json'}
-
- # Test we are logged out
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- # Execute a login call
- user, pw = mockmodel.fake_user.items()[0]
- req = json.dumps({'username': user, 'password': pw})
- resp = self.request('/login', req, 'POST', hdrs)
- self.assertEquals(200, resp.status)
-
- user_info = json.loads(resp.read())
- self.assertEquals(sorted(user_info.keys()),
- ['groups', 'roles', 'username'])
- roles = user_info['roles']
- for tab, role in roles.iteritems():
- self.assertEquals(role, u'admin')
-
- cookie = resp.getheader('set-cookie')
- hdrs['Cookie'] = cookie
-
- # Test we are logged in with the cookie
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(200, resp.status)
-
- # Execute a logout call
- resp = self.request('/logout', '{}', 'POST', hdrs)
- self.assertEquals(200, resp.status)
- del hdrs['Cookie']
-
- # Test we are logged out
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_get_param(self):
- # Create a mock ISO file
- mockiso = '/tmp/mock.iso'
- open('/tmp/mock.iso', 'w').close()
-
- # Create 2 different templates
- req = json.dumps({'name': 'test-tmpl1', 'cdrom': mockiso})
- self.request('/plugins/kimchi/templates', req, 'POST')
-
- req = json.dumps({'name': 'test-tmpl2', 'cdrom': mockiso})
- self.request('/plugins/kimchi/templates', req, 'POST')
-
- # Remove mock iso
- os.unlink(mockiso)
-
- # Get the templates
- resp = self.request('/plugins/kimchi/templates')
- self.assertEquals(200, resp.status)
- res = json.loads(resp.read())
- self.assertEquals(2, len(res))
-
- # Get a specific template
- resp = self.request('/plugins/kimchi/templates?name=test-tmpl1')
- self.assertEquals(200, resp.status)
- res = json.loads(resp.read())
- self.assertEquals(1, len(res))
- self.assertEquals('test-tmpl1', res[0]['name'])
diff --git a/plugins/kimchi/tests/test_utils.py b/plugins/kimchi/tests/test_utils.py
deleted file mode 100644
index bcb14e2..0000000
--- a/plugins/kimchi/tests/test_utils.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import unittest
-
-from wok.exception import InvalidParameter
-from wok.utils import convert_data_size
-
-
-class UtilsTests(unittest.TestCase):
- def test_convert_data_size(self):
- failure_data = [{'val': None, 'from': 'MiB'},
- {'val': self, 'from': 'MiB'},
- {'val': 1, 'from': None},
- {'val': 1, 'from': ''},
- {'val': 1, 'from': 'foo'},
- {'val': 1, 'from': 'kib'},
- {'val': 1, 'from': 'MiB', 'to': None},
- {'val': 1, 'from': 'MiB', 'to': ''},
- {'val': 1, 'from': 'MiB', 'to': 'foo'},
- {'val': 1, 'from': 'MiB', 'to': 'kib'}]
-
- for d in failure_data:
- if 'to' in d:
- self.assertRaises(InvalidParameter, convert_data_size,
- d['val'], d['from'], d['to'])
- else:
- self.assertRaises(InvalidParameter, convert_data_size,
- d['val'], d['from'])
-
- success_data = [{'got': convert_data_size(5, 'MiB', 'MiB'),
- 'want': 5},
- {'got': convert_data_size(5, 'MiB', 'KiB'),
- 'want': 5120},
- {'got': convert_data_size(5, 'MiB', 'M'),
- 'want': 5.24288},
- {'got': convert_data_size(5, 'MiB', 'GiB'),
- 'want': 0.0048828125},
- {'got': convert_data_size(5, 'MiB', 'Tb'),
- 'want': 4.194304e-05},
- {'got': convert_data_size(5, 'KiB', 'MiB'),
- 'want': 0.0048828125},
- {'got': convert_data_size(5, 'M', 'MiB'),
- 'want': 4.76837158203125},
- {'got': convert_data_size(5, 'GiB', 'MiB'),
- 'want': 5120},
- {'got': convert_data_size(5, 'Tb', 'MiB'),
- 'want': 596046.4477539062},
- {'got': convert_data_size(5, 'MiB'),
- 'want': convert_data_size(5, 'MiB', 'B')}]
-
- for d in success_data:
- self.assertEquals(d['got'], d['want'])
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..e9800a5
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,50 @@
+#
+# Project wok
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+EXTRA_DIST = \
+ Makefile.am \
+ run_tests.sh.in \
+ test_config.py.in \
+ $(filter-out test_config.py, $(wildcard *.py)) \
+ $(NULL)
+
+noinst_SCRIPTS = run_tests.sh
+
+do_substitution = \
+ sed -e 's,[@]HAVE_PYMOD_UNITTEST[@],$(HAVE_PYMOD_UNITTEST),g' \
+ -e 's,[@]prefix[@],$(prefix),g' \
+ -e 's,[@]datadir[@],$(datadir),g' \
+ -e 's,[@]PYTHON_VERSION[@],$(PYTHON_VERSION),g' \
+ -e 's,[@]wokdir[@],$(pythondir)/wok,g' \
+ -e 's,[@]pkgdatadir[@],$(pkgdatadir),g'
+
+
+run_tests.sh: run_tests.sh.in Makefile
+ $(do_substitution) < $(srcdir)/run_tests.sh.in > run_tests.sh
+ chmod +x run_tests.sh
+
+test_config.py: test_config.py.in Makefile
+ $(do_substitution) < $(srcdir)/test_config.py.in > test_config.py
+
+check-local:
+ $(MKDIR_P) $(top_srcdir)/data/screenshots
+ ./run_tests.sh
+
+BUILT_SOURCES = test_config.py
+CLEANFILES = run_tests.sh test_config.py
diff --git a/tests/run_tests.sh.in b/tests/run_tests.sh.in
new file mode 100644
index 0000000..d31b194
--- /dev/null
+++ b/tests/run_tests.sh.in
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+HAVE_UNITTEST=@HAVE_PYMOD_UNITTEST@
+PYTHON_VER=@PYTHON_VERSION@
+
+if [ "$1" = "-v" ]; then
+ OPTS="-v"
+ shift
+else
+ OPTS=""
+fi
+
+if [ $# -ne 0 ]; then
+ ARGS="$@"
+else
+ ARGS=`find -name "test_*.py" | xargs -I @ basename @ .py`
+fi
+
+if [ "$HAVE_UNITTEST" != "yes" -o "$PYTHON_VER" == "2.6" ]; then
+ CMD="unit2"
+else
+ CMD="python -m unittest"
+fi
+
+LIST=($ARGS)
+MODEL_LIST=()
+MOCK_LIST=()
+for ((i=0;i<${#LIST[@]};i++)); do
+
+ if [[ ${LIST[$i]} == test_model* ]]; then
+ MODEL_LIST+=(${LIST[$i]})
+ else
+ MOCK_LIST+=(${LIST[$i]})
+ fi
+done
+
+PYTHONPATH=../src:../ $CMD $OPTS ${MODEL_LIST[@]} ${MOCK_LIST[@]}
diff --git a/tests/test_config.py.in b/tests/test_config.py.in
new file mode 100644
index 0000000..b4b46e1
--- /dev/null
+++ b/tests/test_config.py.in
@@ -0,0 +1,107 @@
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+
+from wok.config import Paths, WokConfig
+
+
+get_prefix = None
+
+
+def setUpModule():
+ global get_prefix
+ get_prefix = Paths.get_prefix
+
+
+def tearDownModule():
+ Paths.get_prefix = get_prefix
+
+
+class ConfigTests(unittest.TestCase):
+ def assertInstalledPath(self, actual, expected):
+ if '@pkgdatadir@' != '/usr/share/wok':
+ usr_local = '/usr/local'
+ if not expected.startswith('/usr'):
+ expected = usr_local + expected
+ self.assertEquals(actual, expected)
+
+ def test_installed_paths(self):
+ Paths.get_prefix = lambda self: '@datadir@/wok'
+ paths = Paths()
+ self.assertInstalledPath(paths.state_dir, '/var/lib/wok')
+ self.assertInstalledPath(paths.log_dir, '/var/log/wok')
+ self.assertInstalledPath(paths.conf_dir, '/etc/wok')
+ self.assertInstalledPath(paths.src_dir, '@wokdir@')
+ self.assertInstalledPath(paths.plugins_dir, '@wokdir@/plugins')
+ self.assertInstalledPath(paths.ui_dir, '@datadir@/wok/ui')
+ self.assertInstalledPath(paths.mo_dir, '@prefix@/share/locale')
+
+ def test_uninstalled_paths(self):
+ Paths.get_prefix = lambda self: '/home/user/wok'
+ paths = Paths()
+ self.assertEquals(paths.state_dir, '/home/user/wok/data')
+ self.assertEquals(paths.log_dir, '/home/user/wok/log')
+ self.assertEquals(paths.conf_dir, '/home/user/wok/src')
+ self.assertEquals(paths.src_dir, '/home/user/wok/src/wok')
+ self.assertEquals(paths.plugins_dir, '/home/user/wok/src/wok/plugins')
+ self.assertEquals(paths.ui_dir, '/home/user/wok/ui')
+ self.assertEquals(paths.mo_dir, '/home/user/wok/mo')
+
+ def test_wok_config(self):
+ Paths.get_prefix = get_prefix
+ paths = Paths()
+ SESSIONSTIMEOUT = 10
+ configObj = {
+ '/': {
+ 'tools.trailing_slash.on': False,
+ 'request.methods_with_bodies': ('POST', 'PUT'),
+ 'tools.nocache.on': True,
+ 'tools.proxy.on': True,
+ 'tools.sessions.on': True,
+ 'tools.sessions.name': 'wok',
+ 'tools.sessions.secure': True,
+ 'tools.sessions.httponly': True,
+ 'tools.sessions.locking': 'explicit',
+ 'tools.sessions.storage_type': 'ram',
+ 'tools.sessions.timeout': SESSIONSTIMEOUT,
+ 'tools.wokauth.on': False
+ },
+ '/base64/jquery.base64.js': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/base64/jquery.base64.js' %
+ paths.ui_dir,
+ 'tools.nocache.on': True,
+ },
+ '/wok-ui.html': {
+ 'tools.wokauth.on': True
+ },
+ '/favicon.ico': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename':
+ '%s/images/logo.ico' % paths.ui_dir
+ },
+ '/robots.txt': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/robots.txt' % paths.ui_dir
+ },
+ }
+
+ wok_config = WokConfig.wok_config
+ self.assertEquals(wok_config, configObj)
diff --git a/tests/test_exception.py b/tests/test_exception.py
new file mode 100644
index 0000000..f012569
--- /dev/null
+++ b/tests/test_exception.py
@@ -0,0 +1,132 @@
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Code delivered from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import unittest
+
+from utils import get_free_port, patch_auth, request, run_server
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+
+
+def setup_server(environment='development'):
+ global test_server, model, host, port, ssl_port
+
+ patch_auth()
+ host = '127.0.0.1'
+ port = get_free_port('http')
+ ssl_port = get_free_port('https')
+ test_server = run_server(host, port, ssl_port, test_mode=True,
+ environment=environment)
+
+
+class ExceptionTests(unittest.TestCase):
+ def tearDown(self):
+ test_server.stop()
+
+ def test_production_env(self):
+ """
+ Test reasons sanitized in production env
+ """
+ setup_server('production')
+
+ # test 404
+ resp = json.loads(request(host, ssl_port, '/tasks/blah').read())
+ self.assertEquals('404 Not Found', resp.get('code'))
+
+ # test 405 wrong method
+ resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
+ msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+
+ # test 400 parse error
+ resp = json.loads(request(host, ssl_port, '/tasks', '{',
+ 'POST').read())
+ msg = u'WOKAPI0006E: Unable to parse JSON request'
+ self.assertEquals('400 Bad Request', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+ self.assertNotIn('call_stack', resp)
+
+ # test 400 missing required parameter
+ # TODO: need add this test when some REST API from wok accepts POST
+# req = json.dumps({})
+# resp = json.loads(request(host, ssl_port, '/tasks', req,
+# 'POST').read())
+# self.assertEquals('400 Bad Request', resp.get('code'))
+# m = u"KCHVM0016E: Specify a template to create a virtual machine from"
+# self.assertEquals(m, resp.get('reason'))
+# self.assertNotIn('call_stack', resp)
+
+ # test 405 method not allowed
+ req = json.dumps({})
+ resp = json.loads(request(host, ssl_port, '/tasks', req,
+ 'POST').read())
+ m = u"WOKAPI0005E: Create is not allowed for tasks"
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(m, resp.get('reason'))
+
+ def test_development_env(self):
+ """
+ Test traceback thrown in development env
+ """
+ setup_server()
+ # test 404
+ resp = json.loads(request(host, ssl_port, '/tasks/blah').read())
+ self.assertEquals('404 Not Found', resp.get('code'))
+
+ # test 405 wrong method
+ resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
+ msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+
+ # test 400 parse error
+ resp = json.loads(request(host, ssl_port, '/tasks', '{',
+ 'POST').read())
+ msg = u'WOKAPI0006E: Unable to parse JSON request'
+ self.assertEquals('400 Bad Request', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+ self.assertIn('call_stack', resp)
+
+ # test 400 missing required parameter
+ # TODO: need add this test when some REST API from wok accepts POST
+# req = json.dumps({})
+# resp = json.loads(request(host, ssl_port, '/tasks', req,
+# 'POST').read())
+# m = u"KCHVM0016E: Specify a template to create a virtual machine from"
+# self.assertEquals('400 Bad Request', resp.get('code'))
+# self.assertEquals(m, resp.get('reason'))
+# self.assertIn('call_stack', resp)
+
+ # test 405 method not allowed
+ req = json.dumps({})
+ resp = json.loads(request(host, ssl_port, '/tasks', req,
+ 'POST').read())
+ m = u"WOKAPI0005E: Create is not allowed for tasks"
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(m, resp.get('reason'))
+ self.assertIn('call_stack', resp)
diff --git a/tests/test_objectstore.py b/tests/test_objectstore.py
new file mode 100644
index 0000000..bce125e
--- /dev/null
+++ b/tests/test_objectstore.py
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2015
+#
+# Code delivered from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+import tempfile
+import threading
+import unittest
+
+from wok import objectstore
+from wok.exception import NotFoundError
+
+
+tmpfile = None
+
+
+def setUpModule():
+ global tmpfile
+ tmpfile = tempfile.mktemp()
+
+
+def tearDownModule():
+ os.unlink(tmpfile)
+
+
+class ObjectStoreTests(unittest.TestCase):
+ def test_objectstore(self):
+ store = objectstore.ObjectStore(tmpfile)
+
+ with store as session:
+ # Test create
+ session.store('fǒǒ', 'těst1', {'α': 1})
+ session.store('fǒǒ', 'těst2', {'β': 2})
+
+ # Test list
+ items = session.get_list('fǒǒ')
+ self.assertTrue(u'těst1' in items)
+ self.assertTrue(u'těst2' in items)
+
+ # Test get
+ item = session.get('fǒǒ', 'těst1')
+ self.assertEquals(1, item[u'α'])
+
+ # Test delete
+ session.delete('fǒǒ', 'těst2')
+ self.assertEquals(1, len(session.get_list('fǒǒ')))
+
+ # Test get non-existent item
+
+ self.assertRaises(NotFoundError, session.get,
+ 'α', 'β')
+
+ # Test delete non-existent item
+ self.assertRaises(NotFoundError, session.delete,
+ 'fǒǒ', 'těst2')
+
+ # Test refresh existing item
+ session.store('fǒǒ', 'těst1', {'α': 2})
+ item = session.get('fǒǒ', 'těst1')
+ self.assertEquals(2, item[u'α'])
+
+ def test_object_store_threaded(self):
+ def worker(ident):
+ with store as session:
+ session.store('foo', ident, {})
+
+ store = objectstore.ObjectStore(tmpfile)
+
+ threads = []
+ for i in xrange(50):
+ t = threading.Thread(target=worker, args=(i,))
+ t.setDaemon(True)
+ t.start()
+ threads.append(t)
+
+ for t in threads:
+ t.join()
+
+ with store as session:
+ self.assertEquals(50, len(session.get_list('foo')))
+ self.assertEquals(10, len(store._connections.keys()))
diff --git a/tests/test_plugin.py b/tests/test_plugin.py
new file mode 100644
index 0000000..f2e12d3
--- /dev/null
+++ b/tests/test_plugin.py
@@ -0,0 +1,122 @@
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Code delivered from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import unittest
+from functools import partial
+
+from wok.utils import get_enabled_plugins
+
+import utils
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+
+
+def setUpModule():
+ global test_server, model, host, port, ssl_port
+
+ utils.patch_auth()
+ host = '127.0.0.1'
+ port = utils.get_free_port('http')
+ ssl_port = utils.get_free_port('https')
+ test_server = utils.run_server(host, port, ssl_port, test_mode=True)
+
+
+def tearDownModule():
+ test_server.stop()
+
+
+(a)unittest.skipUnless(
+ 'sample' in [plugin for plugin, _config in get_enabled_plugins()],
+ 'sample plugin is not enabled, skip this test!')
+class PluginTests(unittest.TestCase):
+
+ def setUp(self):
+ self.request = partial(utils.request, host, ssl_port)
+
+ def _create_rectangle(self, name, length, width):
+ req = json.dumps({'name': name, 'length': length, 'width': width})
+ resp = self.request('/plugins/sample/rectangles', req, 'POST')
+ return resp
+
+ def _get_rectangle(self, name):
+ resp = self.request('/plugins/sample/rectangles/%s' % name)
+ return json.loads(resp.read())
+
+ def _create_rectangle_and_assert(self, name, length, width):
+ resp = self._create_rectangle(name, length, width)
+ self.assertEquals(201, resp.status)
+
+ rectangle = self._get_rectangle(name)
+ self.assertEquals(rectangle['name'], name)
+ self.assertEquals(rectangle['length'], length)
+ self.assertEquals(rectangle['width'], width)
+
+ def _get_rectangles_list(self):
+ resp = self.request('/plugins/sample/rectangles')
+ rectangles = json.loads(resp.read())
+ name_list = [rectangle['name'] for rectangle in rectangles]
+ return name_list
+
+ def test_rectangles(self):
+ # Create two new rectangles
+ self._create_rectangle_and_assert('small', 10, 8)
+ self._create_rectangle_and_assert('big', 20, 16)
+
+ # Verify they're in the list
+ name_list = self._get_rectangles_list()
+ self.assertIn('small', name_list)
+ self.assertIn('big', name_list)
+
+ # Update the big rectangle.
+ req = json.dumps({'length': 40, 'width': 30})
+ resp = self.request('/plugins/sample/rectangles/big', req, 'PUT')
+ self.assertEquals(200, resp.status)
+ big = self._get_rectangle('big')
+ self.assertEquals(big['length'], 40)
+ self.assertEquals(big['width'], 30)
+
+ # Delete two rectangles
+ resp = self.request('/plugins/sample/rectangles/big', '{}', 'DELETE')
+ self.assertEquals(204, resp.status)
+ resp = self.request('/plugins/sample/rectangles/small', '{}', 'DELETE')
+ self.assertEquals(204, resp.status)
+ name_list = self._get_rectangles_list()
+ self.assertEquals([], name_list)
+
+ def test_bad_params(self):
+ # Bad name
+ resp = self._create_rectangle(1.0, 30, 40)
+ self.assertEquals(400, resp.status)
+
+ # Bad length value
+ resp = self._create_rectangle('test', -10.0, 40)
+ self.assertEquals(400, resp.status)
+
+ # Missing param for width
+ req = json.dumps({'name': 'nowidth', 'length': 40})
+ resp = self.request('/plugins/sample/rectangles', req, 'POST')
+ self.assertEquals(400, resp.status)
diff --git a/tests/test_rollbackcontext.py b/tests/test_rollbackcontext.py
new file mode 100644
index 0000000..3282be5
--- /dev/null
+++ b/tests/test_rollbackcontext.py
@@ -0,0 +1,101 @@
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# Code delivered from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+
+from wok.rollbackcontext import RollbackContext
+
+
+class FirstError(Exception):
+ '''A hypothetical exception to be raise in the test firstly.'''
+ pass
+
+
+class SecondError(Exception):
+ '''A hypothetical exception to be raise in the test secondly.'''
+ pass
+
+
+class RollbackContextTests(unittest.TestCase):
+
+ def setUp(self):
+ self._counter = 0
+
+ def _inc_counter(self):
+ self._counter += 1
+
+ def _raise(self, exception=FirstError):
+ raise exception()
+
+ def test_rollback(self):
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._inc_counter)
+ self.assertEquals(self._counter, 2)
+
+ def test_raise(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._inc_counter)
+ raise FirstError()
+ rollback.prependDefer(self._inc_counter)
+ except FirstError:
+ # All undo before the FirstError should be run
+ self.assertEquals(self._counter, 2)
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_undo(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._raise)
+ rollback.prependDefer(self._inc_counter)
+ except FirstError:
+ # All undo should be run
+ self.assertEquals(self._counter, 2)
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_prefer_original(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._raise, SecondError)
+ raise FirstError()
+ except FirstError:
+ pass
+ except SecondError:
+ self.fail('Should have preferred FirstError to SecondError')
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_prefer_first_undo(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._raise, SecondError)
+ rollback.prependDefer(self._raise, FirstError)
+ except FirstError:
+ pass
+ except SecondError:
+ self.fail('Should have preferred FirstError to SecondError')
+ else:
+ self.fail('Should have raised FirstError')
diff --git a/tests/test_server.py b/tests/test_server.py
new file mode 100644
index 0000000..8ffc388
--- /dev/null
+++ b/tests/test_server.py
@@ -0,0 +1,284 @@
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Code delivered from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import base64
+import cherrypy
+import json
+import tempfile
+import threading
+import unittest
+from functools import partial
+
+from wok.control.base import Collection, Resource
+
+import utils
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+cherrypy_port = None
+tmpfile = None
+
+
+def setUpModule():
+ global test_server, model, host, port, ssl_port, cherrypy_port, tmpfile
+
+ utils.patch_auth()
+ tmpfile = tempfile.mktemp()
+ host = '127.0.0.1'
+ port = utils.get_free_port('http')
+ ssl_port = utils.get_free_port('https')
+ cherrypy_port = utils.get_free_port('cherrypy_port')
+ test_server = utils.run_server(host, port, ssl_port, test_mode=True,
+ cherrypy_port=cherrypy_port)
+
+
+def tearDownModule():
+ test_server.stop()
+
+
+class ServerTests(unittest.TestCase):
+ def setUp(self):
+ self.request = partial(utils.request, host, ssl_port)
+
+ def assertValidJSON(self, txt):
+ try:
+ json.loads(txt)
+ except ValueError:
+ self.fail("Invalid JSON: %s" % txt)
+
+ def test_server_start(self):
+ """
+ Test that we can start a server and receive HTTP:200.
+ """
+ resp = self.request('/')
+ self.assertEquals(200, resp.status)
+
+ def test_multithreaded_connection(self):
+ def worker():
+ for i in xrange(100):
+ ret = ['test']
+ self.assertEquals('test', ret[0])
+
+ threads = []
+ for i in xrange(100):
+ t = threading.Thread(target=worker)
+ t.setDaemon(True)
+ t.start()
+ threads.append(t)
+ for t in threads:
+ t.join()
+
+ def test_collection(self):
+ c = Collection(model)
+
+ # The base Collection is always empty
+ cherrypy.request.method = 'GET'
+ cherrypy.request.headers['Accept'] = 'application/json'
+ self.assertEquals('[]', c.index())
+
+ # POST and DELETE raise HTTP:405 by default
+ for method in ('POST', 'DELETE'):
+ cherrypy.request.method = method
+ try:
+ c.index()
+ except cherrypy.HTTPError, e:
+ self.assertEquals(405, e.code)
+ else:
+ self.fail("Expected exception not raised")
+
+ def test_resource(self):
+ r = Resource(model)
+
+ # Test the base Resource representation
+ cherrypy.request.method = 'GET'
+ cherrypy.request.headers['Accept'] = 'application/json'
+ self.assertEquals('{}', r.index())
+
+ # POST and DELETE raise HTTP:405 by default
+ for method in ('POST', 'DELETE'):
+ cherrypy.request.method = method
+ try:
+ r.index()
+ except cherrypy.HTTPError, e:
+ self.assertEquals(405, e.code)
+ else:
+ self.fail("Expected exception not raised")
+
+ def test_404(self):
+ """
+ A non-existent path should return HTTP:404
+ """
+ url_list = ['/doesnotexist', '/tasks/blah']
+ for url in url_list:
+ resp = self.request(url)
+ self.assertEquals(404, resp.status)
+
+ # Verify it works for DELETE too
+ resp = self.request('/tasks/blah', '', 'DELETE')
+ self.assertEquals(404, resp.status)
+
+ def test_accepts(self):
+ """
+ Verify the following expectations regarding the client Accept header:
+ If omitted, default to html
+ If 'application/json', serve the rest api
+ If 'text/html', serve the UI
+ If both of the above (in any order), serve the rest api
+ If neither of the above, HTTP:406
+ """
+ resp = self.request("/", headers={})
+ location = resp.getheader('location')
+ self.assertTrue(location.endswith("login.html"))
+ resp = self.request("/login.html", headers={})
+ self.assertTrue('<!doctype html>' in resp.read().lower())
+
+ resp = self.request("/", headers={'Accept': 'application/json'})
+ self.assertValidJSON(resp.read())
+
+ resp = self.request("/", headers={'Accept': 'text/html'})
+ location = resp.getheader('location')
+ self.assertTrue(location.endswith("login.html"))
+
+ resp = self.request("/", headers={'Accept':
+ 'application/json, text/html'})
+ self.assertValidJSON(resp.read())
+
+ resp = self.request("/", headers={'Accept':
+ 'text/html, application/json'})
+ self.assertValidJSON(resp.read())
+
+ h = {'Accept': 'text/plain'}
+ resp = self.request('/', None, 'GET', h)
+ self.assertEquals(406, resp.status)
+
+ def test_auth_unprotected(self):
+ hdrs = {'AUTHORIZATION': ''}
+ uris = ['/js/wok.min.js',
+ '/css/theme-default.min.css',
+ '/images/favicon.png',
+ '/libs/jquery/jquery.min.js',
+ '/login.html',
+ '/logout']
+
+ for uri in uris:
+ resp = self.request(uri, None, 'HEAD', hdrs)
+ self.assertEquals(200, resp.status)
+
+ def test_auth_protected(self):
+ hdrs = {'AUTHORIZATION': ''}
+ uris = ['/tasks']
+
+ for uri in uris:
+ resp = self.request(uri, None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ def test_auth_bad_creds(self):
+ # Test HTTPBA
+ hdrs = {'AUTHORIZATION': "Basic " + base64.b64encode("nouser:badpass")}
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ # Test REST API
+ hdrs = {'AUTHORIZATION': ''}
+ req = json.dumps({'username': 'nouser', 'password': 'badpass'})
+ resp = self.request('/login', req, 'POST', hdrs)
+ self.assertEquals(401, resp.status)
+
+ def test_auth_browser_no_httpba(self):
+ # Kimchi detects REST requests from the browser by looking for a
+ # specific header
+ hdrs = {"X-Requested-With": "XMLHttpRequest"}
+
+ # Try our request (Note that request() will add a valid HTTPBA header)
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+ self.assertEquals(None, resp.getheader('WWW-Authenticate'))
+
+ def test_auth_session(self):
+ hdrs = {'AUTHORIZATION': '',
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'}
+
+ # Test we are logged out
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ # Execute a login call
+ user, pw = utils.fake_user.items()[0]
+ req = json.dumps({'username': user, 'password': pw})
+ resp = self.request('/login', req, 'POST', hdrs)
+ self.assertEquals(200, resp.status)
+
+ user_info = json.loads(resp.read())
+ self.assertEquals(sorted(user_info.keys()),
+ ['groups', 'roles', 'username'])
+ roles = user_info['roles']
+ for tab, role in roles.iteritems():
+ self.assertEquals(role, u'admin')
+
+ cookie = resp.getheader('set-cookie')
+ hdrs['Cookie'] = cookie
+
+ # Test we are logged in with the cookie
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(200, resp.status)
+
+ # Execute a logout call
+ resp = self.request('/logout', '{}', 'POST', hdrs)
+ self.assertEquals(200, resp.status)
+ del hdrs['Cookie']
+
+ # Test we are logged out
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ # TODO: uncomment and adapt when some wok API accepts parameters to test
+# def test_get_param(self):
+# # Create a mock ISO file
+# mockiso = '/tmp/mock.iso'
+# open('/tmp/mock.iso', 'w').close()
+#
+# # Create 2 different templates
+# req = json.dumps({'name': 'test-tmpl1', 'cdrom': mockiso})
+# self.request('/plugins/kimchi/templates', req, 'POST')
+#
+# req = json.dumps({'name': 'test-tmpl2', 'cdrom': mockiso})
+# self.request('/plugins/kimchi/templates', req, 'POST')
+#
+# # Remove mock iso
+# os.unlink(mockiso)
+#
+# # Get the templates
+# resp = self.request('/plugins/kimchi/templates')
+# self.assertEquals(200, resp.status)
+# res = json.loads(resp.read())
+# self.assertEquals(2, len(res))
+#
+# # Get a specific template
+# resp = self.request('/plugins/kimchi/templates?name=test-tmpl1')
+# self.assertEquals(200, resp.status)
+# res = json.loads(resp.read())
+# self.assertEquals(1, len(res))
+# self.assertEquals('test-tmpl1', res[0]['name'])
diff --git a/tests/test_utils.py b/tests/test_utils.py
new file mode 100644
index 0000000..745d3d6
--- /dev/null
+++ b/tests/test_utils.py
@@ -0,0 +1,71 @@
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2015
+#
+# Code delivered from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+
+from wok.exception import InvalidParameter
+from wok.utils import convert_data_size
+
+
+class UtilsTests(unittest.TestCase):
+ def test_convert_data_size(self):
+ failure_data = [{'val': None, 'from': 'MiB'},
+ {'val': self, 'from': 'MiB'},
+ {'val': 1, 'from': None},
+ {'val': 1, 'from': ''},
+ {'val': 1, 'from': 'foo'},
+ {'val': 1, 'from': 'kib'},
+ {'val': 1, 'from': 'MiB', 'to': None},
+ {'val': 1, 'from': 'MiB', 'to': ''},
+ {'val': 1, 'from': 'MiB', 'to': 'foo'},
+ {'val': 1, 'from': 'MiB', 'to': 'kib'}]
+
+ for d in failure_data:
+ if 'to' in d:
+ self.assertRaises(InvalidParameter, convert_data_size,
+ d['val'], d['from'], d['to'])
+ else:
+ self.assertRaises(InvalidParameter, convert_data_size,
+ d['val'], d['from'])
+
+ success_data = [{'got': convert_data_size(5, 'MiB', 'MiB'),
+ 'want': 5},
+ {'got': convert_data_size(5, 'MiB', 'KiB'),
+ 'want': 5120},
+ {'got': convert_data_size(5, 'MiB', 'M'),
+ 'want': 5.24288},
+ {'got': convert_data_size(5, 'MiB', 'GiB'),
+ 'want': 0.0048828125},
+ {'got': convert_data_size(5, 'MiB', 'Tb'),
+ 'want': 4.194304e-05},
+ {'got': convert_data_size(5, 'KiB', 'MiB'),
+ 'want': 0.0048828125},
+ {'got': convert_data_size(5, 'M', 'MiB'),
+ 'want': 4.76837158203125},
+ {'got': convert_data_size(5, 'GiB', 'MiB'),
+ 'want': 5120},
+ {'got': convert_data_size(5, 'Tb', 'MiB'),
+ 'want': 596046.4477539062},
+ {'got': convert_data_size(5, 'MiB'),
+ 'want': convert_data_size(5, 'MiB', 'B')}]
+
+ for d in success_data:
+ self.assertEquals(d['got'], d['want'])
diff --git a/tests/utils.py b/tests/utils.py
new file mode 100644
index 0000000..dcea7d9
--- /dev/null
+++ b/tests/utils.py
@@ -0,0 +1,261 @@
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Code delivered from Project Kimchi
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+import base64
+import cherrypy
+import grp
+import httplib
+import inspect
+import json
+import os
+import socket
+import ssl
+import sys
+import threading
+import time
+import unittest
+from contextlib import closing
+from lxml import etree
+
+import wok.server
+from wok.config import config, PluginPaths
+from wok.auth import User, USER_NAME, USER_GROUPS, USER_ROLES, tabs
+from wok.exception import NotFoundError, OperationFailed
+from wok.utils import wok_log
+
+
+_ports = {}
+fake_user = {'test': 'passw0rd'}
+
+# provide missing unittest decorators and API for python 2.6; these decorators
+# do not actually work, just avoid the syntax failure
+if sys.version_info[:2] == (2, 6):
+ def skipUnless(condition, reason):
+ if not condition:
+ sys.stderr.write('[expected failure] ')
+ raise Exception(reason)
+ return lambda obj: obj
+
+ unittest.skipUnless = skipUnless
+ unittest.expectedFailure = lambda obj: obj
+
+ def assertGreater(self, a, b, msg=None):
+ if not a > b:
+ self.fail('%s not greater than %s' % (repr(a), repr(b)))
+
+ def assertGreaterEqual(self, a, b, msg=None):
+ if not a >= b:
+ self.fail('%s not greater than or equal to %s'
+ % (repr(a), repr(b)))
+
+ def assertIsInstance(self, obj, cls, msg=None):
+ if not isinstance(obj, cls):
+ self.fail('%s is not an instance of %r' % (repr(obj), cls))
+
+ def assertIn(self, a, b, msg=None):
+ if a not in b:
+ self.fail("%s is not in %b" % (repr(a), repr(b)))
+
+ def assertNotIn(self, a, b, msg=None):
+ if a in b:
+ self.fail("%s is in %b" % (repr(a), repr(b)))
+
+ unittest.TestCase.assertGreaterEqual = assertGreaterEqual
+ unittest.TestCase.assertGreater = assertGreater
+ unittest.TestCase.assertIsInstance = assertIsInstance
+ unittest.TestCase.assertIn = assertIn
+ unittest.TestCase.assertNotIn = assertNotIn
+
+
+def get_free_port(name='http'):
+ global _ports
+ if _ports.get(name) is not None:
+ return _ports[name]
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ with closing(sock):
+ try:
+ sock.bind(("0.0.0.0", 0))
+ except:
+ raise Exception("Could not find a free port")
+ _ports[name] = sock.getsockname()[1]
+ return _ports[name]
+
+
+def run_server(host, port, ssl_port, test_mode, cherrypy_port=None,
+ model=None, environment='development'):
+
+ if cherrypy_port is None:
+ cherrypy_port = get_free_port('cherrypy_port')
+
+ if ssl_port is None:
+ ssl_port = get_free_port('https')
+
+ args = type('_', (object,),
+ {'host': host, 'port': port, 'ssl_port': ssl_port,
+ 'cherrypy_port': cherrypy_port, 'max_body_size': '4*1024',
+ 'ssl_cert': '', 'ssl_key': '',
+ 'test': test_mode, 'access_log': '/dev/null',
+ 'error_log': '/dev/null', 'environment': environment,
+ 'log_level': 'debug'})()
+ if model is not None:
+ setattr(args, 'model', model)
+
+ s = wok.server.Server(args)
+ t = threading.Thread(target=s.start)
+ t.setDaemon(True)
+ t.start()
+ cherrypy.engine.wait(cherrypy.engine.states.STARTED)
+ return s
+
+
+def silence_server():
+ """
+ Silence server status messages on stdout
+ """
+ cherrypy.config.update({"environment": "embedded"})
+
+
+def running_as_root():
+ return os.geteuid() == 0
+
+
+def _request(conn, path, data, method, headers):
+ if headers is None:
+ headers = {'Content-Type': 'application/json',
+ 'Accept': 'application/json'}
+ if 'AUTHORIZATION' not in headers.keys():
+ user, pw = fake_user.items()[0]
+ hdr = "Basic " + base64.b64encode("%s:%s" % (user, pw))
+ headers['AUTHORIZATION'] = hdr
+ conn.request(method, path, data, headers)
+ return conn.getresponse()
+
+
+def request(host, port, path, data=None, method='GET', headers=None):
+ # verify if HTTPSConnection has context parameter
+ if "context" in inspect.getargspec(httplib.HTTPSConnection.__init__).args:
+ context = ssl._create_unverified_context()
+ conn = httplib.HTTPSConnection(host, port, context=context)
+ else:
+ conn = httplib.HTTPSConnection(host, port)
+
+ return _request(conn, path, data, method, headers)
+
+
+def get_remote_iso_path():
+ """
+ Get a remote iso with the right arch from the distro files shipped
+ with kimchi.
+ """
+ host_arch = os.uname()[4]
+ remote_path = ''
+ with open(os.path.join(PluginPaths('kimchi').conf_dir, 'distros.d',
+ 'fedora.json')) as fedora_isos:
+ # Get a list of dicts
+ json_isos_list = json.load(fedora_isos)
+ for iso in json_isos_list:
+ if (iso.get('os_arch')) == host_arch:
+ remote_path = iso.get('path')
+ break
+
+ return remote_path
+
+
+class FakeUser(User):
+ auth_type = "fake"
+ sudo = True
+
+ def __init__(self, username):
+ self.user = {}
+ self.user[USER_NAME] = username
+ self.user[USER_GROUPS] = None
+ self.user[USER_ROLES] = dict.fromkeys(tabs, 'user')
+
+ def get_groups(self):
+ return sorted([group.gr_name for group in grp.getgrall()])[0:3]
+
+ def get_roles(self):
+ if self.sudo:
+ self.user[USER_ROLES] = dict.fromkeys(tabs, 'admin')
+ return self.user[USER_ROLES]
+
+ def get_user(self):
+ return self.user
+
+ @staticmethod
+ def authenticate(username, password, service="passwd"):
+ try:
+ return fake_user[username] == password
+ except KeyError, e:
+ raise OperationFailed("WOKAUTH0001E", {'username': 'username',
+ 'code': e.message})
+
+
+def patch_auth(sudo=True):
+ """
+ Override the authenticate function with a simple test against an
+ internal dict of users and passwords.
+ """
+ config.set("authentication", "method", "fake")
+ FakeUser.sudo = sudo
+
+
+def normalize_xml(xml_str):
+ return etree.tostring(etree.fromstring(xml_str,
+ etree.XMLParser(remove_blank_text=True)))
+
+
+def wait_task(task_lookup, taskid, timeout=10):
+ for i in range(0, timeout):
+ task_info = task_lookup(taskid)
+ if task_info['status'] == "running":
+ wok_log.info("Waiting task %s, message: %s",
+ taskid, task_info['message'])
+ time.sleep(1)
+ else:
+ return
+ wok_log.error("Timeout while process long-run task, "
+ "try to increase timeout value.")
+
+
+# The action functions in model backend raise NotFoundError exception if the
+# element is not found. But in some tests, these functions are called after
+# the element has been deleted if test finishes correctly, then NofFoundError
+# exception is raised and rollback breaks. To avoid it, this wrapper ignores
+# the NotFoundError.
+def rollback_wrapper(func, resource, *args):
+ try:
+ func(resource, *args)
+ except NotFoundError:
+ # VM has been deleted already
+ return
+
+
+# This function is used to test storage volume upload.
+# If we use self.request, we may encode multipart formdata by ourselves
+# requests lib take care of encode part, so use this lib instead
+def fake_auth_header():
+ headers = {'Accept': 'application/json'}
+ user, pw = fake_user.items()[0]
+ hdr = "Basic " + base64.b64encode("%s:%s" % (user, pw))
+ headers['AUTHORIZATION'] = hdr
+ return headers
--
2.4.3
2
1
30 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Update the README file of Wok and Kimchi projects after the split of code
and changed the header of all back-end and front-end files of Wok.
Paulo Vital (3):
Update README.md of Wok and Kimchi after slipt.
Update the header of all Wok back-end files
Update the header of all Wok front-end files
Makefile.am | 6 +-
autogen.sh | 20 +++++
configure.ac | 4 +-
contrib/DEBIAN/Makefile.am | 7 +-
contrib/DEBIAN/postrm | 6 +-
contrib/Makefile.am | 7 +-
contrib/check_i18n.py | 4 +-
docs/Makefile.am | 6 +-
docs/README.md | 95 ++++++++++++++++++++++
plugins/Makefile.am | 6 +-
plugins/__init__.py | 6 +-
plugins/kimchi/docs/README.md | 86 ++++++++------------
plugins/sample/Makefile.am | 6 +-
plugins/sample/__init__.py | 6 +-
plugins/sample/i18n.py | 4 +-
plugins/sample/model.py | 6 +-
plugins/sample/ui/Makefile.am | 8 +-
plugins/sample/ui/config/Makefile.am | 7 +-
plugins/sample/ui/js/Makefile.am | 6 +-
plugins/sample/ui/js/util.js | 6 +-
plugins/sample/ui/pages/Makefile.am | 6 +-
plugins/sample/ui/pages/i18n.json.tmpl | 6 +-
plugins/sample/ui/pages/sample-tab1.html.tmpl | 6 +-
plugins/sample/ui/pages/sample-tab2.html.tmpl | 6 +-
src/Makefile.am | 4 +-
src/nginx/Makefile.am | 4 +-
src/nginx/wok.conf.in | 4 +-
src/wok/Makefile.am | 6 +-
src/wok/__init__.py | 6 +-
src/wok/asynctask.py | 6 +-
src/wok/auth.py | 4 +-
src/wok/basemodel.py | 6 +-
src/wok/cachebust.py | 6 +-
src/wok/config.py.in | 4 +-
src/wok/control/Makefile.am | 6 +-
src/wok/control/__init__.py | 6 +-
src/wok/control/base.py | 4 +-
src/wok/control/plugins.py | 6 +-
src/wok/control/tasks.py | 6 +-
src/wok/control/utils.py | 6 +-
src/wok/exception.py | 6 +-
src/wok/i18n.py | 4 +-
src/wok/model/Makefile.am | 6 +-
src/wok/model/__init__.py | 6 +-
src/wok/model/model.py | 4 +-
src/wok/model/plugins.py | 6 +-
src/wok/model/tasks.py | 6 +-
src/wok/objectstore.py | 6 +-
src/wok/proxy.py | 4 +-
src/wok/rollbackcontext.py | 6 +-
src/wok/root.py | 4 +-
src/wok/server.py | 6 +-
src/wok/sslcert.py | 6 +-
src/wok/template.py | 6 +-
src/wok/utils.py | 4 +-
src/wok/xmlutils/Makefile.am | 6 +-
src/wok/xmlutils/__init__.py | 6 +-
src/wok/xmlutils/utils.py | 6 +-
src/wokd.in | 4 +-
ui/Makefile.am | 6 +-
ui/base64/Makefile.am | 4 +-
ui/css/Makefile.am | 6 +-
ui/css/fontawesome/Makefile.am | 4 +-
ui/css/jquery-ui.custom.css | 4 +-
ui/css/opensans/Makefile.am | 4 +-
ui/css/theme-default/about.css | 6 +-
ui/css/theme-default/base.css | 6 +-
ui/css/theme-default/button-flat.css | 4 +-
ui/css/theme-default/button.css | 4 +-
ui/css/theme-default/checkbox-flat.css | 6 +-
ui/css/theme-default/circleGauge.css | 6 +-
ui/css/theme-default/datagrid.css | 4 +-
ui/css/theme-default/dialog-flat.css | 6 +-
ui/css/theme-default/error.css | 6 +-
ui/css/theme-default/form.css | 4 +-
ui/css/theme-default/framework.css | 6 +-
ui/css/theme-default/gauge-flat.css | 6 +-
ui/css/theme-default/grid.css | 6 +-
ui/css/theme-default/jquery-ui.custom.css | 6 +-
ui/css/theme-default/line-chart.css | 6 +-
ui/css/theme-default/line.css | 4 +-
ui/css/theme-default/list-flat.css | 6 +-
ui/css/theme-default/login-window.css | 6 +-
ui/css/theme-default/menu-flat.css | 4 +-
ui/css/theme-default/message-flat.css | 6 +-
ui/css/theme-default/message.css | 4 +-
ui/css/theme-default/messagebar-flat.css | 6 +-
ui/css/theme-default/nav-tree.css | 6 +-
ui/css/theme-default/navbar.css | 6 +-
ui/css/theme-default/popover.css | 6 +-
ui/css/theme-default/radio-flat.css | 8 +-
ui/css/theme-default/reset.css | 4 +-
ui/css/theme-default/selectmenu-flat.css | 4 +-
ui/css/theme-default/tabs.css | 4 +-
ui/css/theme-default/textbox-flat.css | 6 +-
ui/css/theme-default/theme.css | 4 +-
ui/css/theme-default/tile-check.css | 6 +-
ui/css/theme-default/toolbar.css | 6 +-
ui/css/theme-default/topbar.css | 4 +-
ui/css/theme-default/window.css | 4 +-
ui/js/Makefile.am | 6 +-
ui/js/src/wok.api.js | 4 +-
ui/js/src/wok.cookie.js | 6 +-
ui/js/src/wok.form.js | 6 +-
ui/js/src/wok.grid.js | 4 +-
ui/js/src/wok.lang.js | 6 +-
ui/js/src/wok.line-chart.js | 6 +-
ui/js/src/wok.login.js | 4 +-
ui/js/src/wok.main.js | 4 +-
ui/js/src/wok.message.js | 6 +-
ui/js/src/wok.object.js | 6 +-
ui/js/src/wok.popable.js | 6 +-
ui/js/src/wok.select.js | 6 +-
ui/js/src/wok.string.js | 6 +-
ui/js/src/wok.substitute.js | 6 +-
ui/js/src/wok.topic.js | 6 +-
ui/js/src/wok.user.js | 6 +-
ui/js/src/wok.utils.js | 4 +-
ui/js/src/wok.window.js | 6 +-
ui/js/widgets/button-dropDown.js | 6 +-
ui/js/widgets/button-flat.js | 4 +-
ui/js/widgets/checkbox-flat.js | 4 +-
ui/js/widgets/circleGauge.js | 6 +-
ui/js/widgets/combobox.js | 6 +-
ui/js/widgets/dialog-flat.js | 4 +-
ui/js/widgets/filter-select.js | 6 +-
ui/js/widgets/gauge-flat.js | 4 +-
ui/js/widgets/grid.js | 4 +-
ui/js/widgets/line.js | 4 +-
ui/js/widgets/list-flat.js | 4 +-
ui/js/widgets/menu-flat.js | 4 +-
ui/js/widgets/message-flat.js | 4 +-
ui/js/widgets/messagebar-flat.js | 4 +-
ui/js/widgets/radio-flat.js | 4 +-
ui/js/widgets/samples/dialog.html | 4 +-
ui/js/widgets/samples/gauge-flat.html | 6 +-
ui/js/widgets/samples/grid.html | 4 +-
ui/js/widgets/samples/line.html | 4 +-
ui/js/widgets/samples/list.html | 4 +-
.../menu-button-radio-checkbox-text-select.html | 4 +-
ui/js/widgets/samples/message.html | 4 +-
ui/js/widgets/samples/messagebar-flat.html | 4 +-
ui/js/widgets/samples/tabs.html | 4 +-
ui/js/widgets/select-menu.js | 6 +-
ui/js/widgets/selectmenu-flat.js | 4 +-
ui/js/widgets/textbox-flat.js | 4 +-
ui/libs/Makefile.am | 6 +-
ui/libs/bootstrap-select/Makefile.am | 4 +-
ui/libs/bootstrap/Makefile.am | 4 +-
ui/libs/es5-shim/Makefile.am | 4 +-
ui/libs/jquery-i18n/Makefile.am | 4 +-
ui/libs/jquery-ui/Makefile.am | 2 +
ui/libs/jquery-ui/themes/Makefile.am | 6 +-
ui/libs/jquery-ui/themes/base/Makefile.am | 6 +-
ui/libs/jquery-ui/themes/base/images/Makefile.am | 6 +-
ui/libs/jquery/Makefile.am | 4 +-
ui/pages/Makefile.am | 6 +-
ui/pages/error.html.tmpl | 6 +-
ui/pages/i18n.json.tmpl | 4 +-
ui/pages/login.html.tmpl | 6 +-
ui/pages/websockify/Makefile.am | 4 +-
ui/pages/wok-ui.html.tmpl | 6 +-
162 files changed, 723 insertions(+), 305 deletions(-)
--
2.4.3
2
4
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
V1 -> V2:
- Rebase with new plugins structure.
- Changed headers
V1:
Patch-set with Wok tests, provided from old Kimchi tests, and modification of one
error message to Wok format.
Paulo Vital (2):
Wok tests
Move KCHASYNC0003E to Wok and update code.
Makefile.am | 4 +-
configure.ac | 1 +
plugins/kimchi/tests/test_exception.py | 123 ------------
plugins/kimchi/tests/test_objectstore.py | 97 ---------
plugins/kimchi/tests/test_plugin.py | 126 ------------
plugins/kimchi/tests/test_rollbackcontext.py | 99 ---------
plugins/kimchi/tests/test_server.py | 289 ---------------------------
plugins/kimchi/tests/test_utils.py | 69 -------
src/wok/i18n.py | 2 +
src/wok/model/tasks.py | 2 +-
src/wok/plugins/kimchi/i18n.py | 2 -
tests/Makefile.am | 50 +++++
tests/run_tests.sh.in | 55 +++++
tests/test_config.py.in | 132 ++++++++++++
tests/test_exception.py | 132 ++++++++++++
tests/test_objectstore.py | 99 +++++++++
tests/test_plugin.py | 122 +++++++++++
tests/test_rollbackcontext.py | 101 ++++++++++
tests/test_server.py | 284 ++++++++++++++++++++++++++
tests/test_utils.py | 71 +++++++
tests/utils.py | 261 ++++++++++++++++++++++++
21 files changed, 1313 insertions(+), 808 deletions(-)
delete mode 100644 plugins/kimchi/tests/test_exception.py
delete mode 100644 plugins/kimchi/tests/test_objectstore.py
delete mode 100644 plugins/kimchi/tests/test_plugin.py
delete mode 100644 plugins/kimchi/tests/test_rollbackcontext.py
delete mode 100644 plugins/kimchi/tests/test_server.py
delete mode 100644 plugins/kimchi/tests/test_utils.py
create mode 100644 tests/Makefile.am
create mode 100644 tests/run_tests.sh.in
create mode 100644 tests/test_config.py.in
create mode 100644 tests/test_exception.py
create mode 100644 tests/test_objectstore.py
create mode 100644 tests/test_plugin.py
create mode 100644 tests/test_rollbackcontext.py
create mode 100644 tests/test_server.py
create mode 100644 tests/test_utils.py
create mode 100644 tests/utils.py
--
2.4.3
1
2
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Moved those tests related to Wok framework from plugins/kimchi to wok structure.
Updated build files and tests to make all test structure usable.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
Makefile.am | 5 +-
configure.ac | 1 +
plugins/kimchi/tests/test_exception.py | 123 ------------
plugins/kimchi/tests/test_objectstore.py | 97 ---------
plugins/kimchi/tests/test_plugin.py | 126 ------------
plugins/kimchi/tests/test_rollbackcontext.py | 99 ---------
plugins/kimchi/tests/test_server.py | 289 ---------------------------
plugins/kimchi/tests/test_utils.py | 69 -------
tests/Makefile.am | 50 +++++
tests/run_tests.sh.in | 55 +++++
tests/test_config.py.in | 132 ++++++++++++
tests/test_exception.py | 130 ++++++++++++
tests/test_objectstore.py | 97 +++++++++
tests/test_plugin.py | 120 +++++++++++
tests/test_rollbackcontext.py | 99 +++++++++
tests/test_server.py | 282 ++++++++++++++++++++++++++
tests/test_utils.py | 69 +++++++
tests/utils.py | 259 ++++++++++++++++++++++++
18 files changed, 1297 insertions(+), 805 deletions(-)
delete mode 100644 plugins/kimchi/tests/test_exception.py
delete mode 100644 plugins/kimchi/tests/test_objectstore.py
delete mode 100644 plugins/kimchi/tests/test_plugin.py
delete mode 100644 plugins/kimchi/tests/test_rollbackcontext.py
delete mode 100644 plugins/kimchi/tests/test_server.py
delete mode 100644 plugins/kimchi/tests/test_utils.py
create mode 100644 tests/Makefile.am
create mode 100644 tests/run_tests.sh.in
create mode 100644 tests/test_config.py.in
create mode 100644 tests/test_exception.py
create mode 100644 tests/test_objectstore.py
create mode 100644 tests/test_plugin.py
create mode 100644 tests/test_rollbackcontext.py
create mode 100644 tests/test_server.py
create mode 100644 tests/test_utils.py
create mode 100644 tests/utils.py
diff --git a/Makefile.am b/Makefile.am
index c7914d0..1d76260 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -16,7 +16,8 @@
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-SUBDIRS = src ui docs contrib po plugins
+
+SUBDIRS = src ui docs contrib po plugins tests
man_MANS = docs/wokd.8
@@ -35,7 +36,7 @@ EXTRA_DIST = \
$(NULL)
-PEP8_BLACKLIST = *src/wok/config.py,*src/wok/i18n.py,*plugins/kimchi
+PEP8_BLACKLIST = *src/wok/config.py,*src/wok/i18n.py,*plugins/kimchi,*tests/test_config.py
SKIP_PYFLAKES_ERR = "\./src/wok/websocket\.py"
diff --git a/configure.ac b/configure.ac
index e11a17d..ee139e6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -126,6 +126,7 @@ AC_CONFIG_FILES([
contrib/DEBIAN/control
contrib/wok.spec.fedora
contrib/wok.spec.suse
+ tests/Makefile
],[
chmod +x po/gen-pot
])
diff --git a/plugins/kimchi/tests/test_exception.py b/plugins/kimchi/tests/test_exception.py
deleted file mode 100644
index 4459aa6..0000000
--- a/plugins/kimchi/tests/test_exception.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013-2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import json
-import os
-import unittest
-
-from wok.plugins.kimchi import mockmodel
-
-from utils import get_free_port, patch_auth, request, run_server
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-
-
-def setup_server(environment='development'):
- global test_server, model, host, port, ssl_port
-
- patch_auth()
- model = mockmodel.MockModel('/tmp/obj-store-test')
- host = '127.0.0.1'
- port = get_free_port('http')
- ssl_port = get_free_port('https')
- test_server = run_server(host, port, ssl_port, test_mode=True, model=model,
- environment=environment)
-
-
-class ExceptionTests(unittest.TestCase):
- def tearDown(self):
- test_server.stop()
- os.unlink('/tmp/obj-store-test')
-
- def test_production_env(self):
- """
- Test reasons sanitized in production env
- """
- setup_server('production')
- # test 404
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms/blah').read()
- )
- self.assertEquals('404 Not Found', resp.get('code'))
-
- # test 405 wrong method
- resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
- msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
- self.assertEquals('405 Method Not Allowed', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
-
- # test 400 parse error
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
- )
- msg = u'WOKAPI0006E: Unable to parse JSON request'
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
- self.assertNotIn('call_stack', resp)
-
- # test 400 missing required parameter
- req = json.dumps({})
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST').read()
- )
- self.assertEquals('400 Bad Request', resp.get('code'))
- m = u"KCHVM0016E: Specify a template to create a virtual machine from"
- self.assertEquals(m, resp.get('reason'))
- self.assertNotIn('call_stack', resp)
-
- def test_development_env(self):
- """
- Test traceback thrown in development env
- """
- setup_server()
- # test 404
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms/blah').read()
- )
- self.assertEquals('404 Not Found', resp.get('code'))
-
- # test 405 wrong method
- resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
- msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
- self.assertEquals('405 Method Not Allowed', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
-
- # test 400 parse error
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
- )
- msg = u'WOKAPI0006E: Unable to parse JSON request'
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
- self.assertIn('call_stack', resp)
-
- # test 400 missing required parameter
- req = json.dumps({})
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST').read()
- )
- m = u"KCHVM0016E: Specify a template to create a virtual machine from"
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(m, resp.get('reason'))
- self.assertIn('call_stack', resp)
diff --git a/plugins/kimchi/tests/test_objectstore.py b/plugins/kimchi/tests/test_objectstore.py
deleted file mode 100644
index 632786f..0000000
--- a/plugins/kimchi/tests/test_objectstore.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import os
-import tempfile
-import threading
-import unittest
-
-from wok import objectstore
-from wok.exception import NotFoundError
-
-
-tmpfile = None
-
-
-def setUpModule():
- global tmpfile
- tmpfile = tempfile.mktemp()
-
-
-def tearDownModule():
- os.unlink(tmpfile)
-
-
-class ObjectStoreTests(unittest.TestCase):
- def test_objectstore(self):
- store = objectstore.ObjectStore(tmpfile)
-
- with store as session:
- # Test create
- session.store('f����', 't��st1', {'��': 1})
- session.store('f����', 't��st2', {'��': 2})
-
- # Test list
- items = session.get_list('f����')
- self.assertTrue(u't��st1' in items)
- self.assertTrue(u't��st2' in items)
-
- # Test get
- item = session.get('f����', 't��st1')
- self.assertEquals(1, item[u'��'])
-
- # Test delete
- session.delete('f����', 't��st2')
- self.assertEquals(1, len(session.get_list('f����')))
-
- # Test get non-existent item
-
- self.assertRaises(NotFoundError, session.get,
- '��', '��')
-
- # Test delete non-existent item
- self.assertRaises(NotFoundError, session.delete,
- 'f����', 't��st2')
-
- # Test refresh existing item
- session.store('f����', 't��st1', {'��': 2})
- item = session.get('f����', 't��st1')
- self.assertEquals(2, item[u'��'])
-
- def test_object_store_threaded(self):
- def worker(ident):
- with store as session:
- session.store('foo', ident, {})
-
- store = objectstore.ObjectStore(tmpfile)
-
- threads = []
- for i in xrange(50):
- t = threading.Thread(target=worker, args=(i,))
- t.setDaemon(True)
- t.start()
- threads.append(t)
-
- for t in threads:
- t.join()
-
- with store as session:
- self.assertEquals(50, len(session.get_list('foo')))
- self.assertEquals(10, len(store._connections.keys()))
diff --git a/plugins/kimchi/tests/test_plugin.py b/plugins/kimchi/tests/test_plugin.py
deleted file mode 100644
index fc8e277..0000000
--- a/plugins/kimchi/tests/test_plugin.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import json
-import os
-import unittest
-from functools import partial
-
-from wok.utils import get_enabled_plugins
-
-from wok.plugins.kimchi import mockmodel
-
-import utils
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-
-
-def setUpModule():
- global test_server, model, host, port, ssl_port
-
- utils.patch_auth()
- model = mockmodel.MockModel('/tmp/obj-store-test')
- host = '127.0.0.1'
- port = utils.get_free_port('http')
- ssl_port = utils.get_free_port('https')
- test_server = utils.run_server(host, port, ssl_port, test_mode=True,
- model=model)
-
-
-def tearDownModule():
- test_server.stop()
- os.unlink('/tmp/obj-store-test')
-
-
-(a)unittest.skipUnless(
- 'sample' in [plugin for plugin, _config in get_enabled_plugins()],
- 'sample plugin is not enabled, skip this test!')
-class PluginTests(unittest.TestCase):
-
- def setUp(self):
- self.request = partial(utils.request, host, ssl_port)
-
- def _create_rectangle(self, name, length, width):
- req = json.dumps({'name': name, 'length': length, 'width': width})
- resp = self.request('/plugins/sample/rectangles', req, 'POST')
- return resp
-
- def _get_rectangle(self, name):
- resp = self.request('/plugins/sample/rectangles/%s' % name)
- return json.loads(resp.read())
-
- def _create_rectangle_and_assert(self, name, length, width):
- resp = self._create_rectangle(name, length, width)
- self.assertEquals(201, resp.status)
-
- rectangle = self._get_rectangle(name)
- self.assertEquals(rectangle['name'], name)
- self.assertEquals(rectangle['length'], length)
- self.assertEquals(rectangle['width'], width)
-
- def _get_rectangles_list(self):
- resp = self.request('/plugins/sample/rectangles')
- rectangles = json.loads(resp.read())
- name_list = [rectangle['name'] for rectangle in rectangles]
- return name_list
-
- def test_rectangles(self):
- # Create two new rectangles
- self._create_rectangle_and_assert('small', 10, 8)
- self._create_rectangle_and_assert('big', 20, 16)
-
- # Verify they're in the list
- name_list = self._get_rectangles_list()
- self.assertIn('small', name_list)
- self.assertIn('big', name_list)
-
- # Update the big rectangle.
- req = json.dumps({'length': 40, 'width': 30})
- resp = self.request('/plugins/sample/rectangles/big', req, 'PUT')
- self.assertEquals(200, resp.status)
- big = self._get_rectangle('big')
- self.assertEquals(big['length'], 40)
- self.assertEquals(big['width'], 30)
-
- # Delete two rectangles
- resp = self.request('/plugins/sample/rectangles/big', '{}', 'DELETE')
- self.assertEquals(204, resp.status)
- resp = self.request('/plugins/sample/rectangles/small', '{}', 'DELETE')
- self.assertEquals(204, resp.status)
- name_list = self._get_rectangles_list()
- self.assertEquals([], name_list)
-
- def test_bad_params(self):
- # Bad name
- resp = self._create_rectangle(1.0, 30, 40)
- self.assertEquals(400, resp.status)
-
- # Bad length value
- resp = self._create_rectangle('test', -10.0, 40)
- self.assertEquals(400, resp.status)
-
- # Missing param for width
- req = json.dumps({'name': 'nowidth', 'length': 40})
- resp = self.request('/plugins/sample/rectangles', req, 'POST')
- self.assertEquals(400, resp.status)
diff --git a/plugins/kimchi/tests/test_rollbackcontext.py b/plugins/kimchi/tests/test_rollbackcontext.py
deleted file mode 100644
index 6eac6d0..0000000
--- a/plugins/kimchi/tests/test_rollbackcontext.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import unittest
-
-from wok.rollbackcontext import RollbackContext
-
-
-class FirstError(Exception):
- '''A hypothetical exception to be raise in the test firstly.'''
- pass
-
-
-class SecondError(Exception):
- '''A hypothetical exception to be raise in the test secondly.'''
- pass
-
-
-class RollbackContextTests(unittest.TestCase):
-
- def setUp(self):
- self._counter = 0
-
- def _inc_counter(self):
- self._counter += 1
-
- def _raise(self, exception=FirstError):
- raise exception()
-
- def test_rollback(self):
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._inc_counter)
- self.assertEquals(self._counter, 2)
-
- def test_raise(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._inc_counter)
- raise FirstError()
- rollback.prependDefer(self._inc_counter)
- except FirstError:
- # All undo before the FirstError should be run
- self.assertEquals(self._counter, 2)
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_undo(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._raise)
- rollback.prependDefer(self._inc_counter)
- except FirstError:
- # All undo should be run
- self.assertEquals(self._counter, 2)
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_prefer_original(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._raise, SecondError)
- raise FirstError()
- except FirstError:
- pass
- except SecondError:
- self.fail('Should have preferred FirstError to SecondError')
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_prefer_first_undo(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._raise, SecondError)
- rollback.prependDefer(self._raise, FirstError)
- except FirstError:
- pass
- except SecondError:
- self.fail('Should have preferred FirstError to SecondError')
- else:
- self.fail('Should have raised FirstError')
diff --git a/plugins/kimchi/tests/test_server.py b/plugins/kimchi/tests/test_server.py
deleted file mode 100644
index d5ef565..0000000
--- a/plugins/kimchi/tests/test_server.py
+++ /dev/null
@@ -1,289 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import base64
-import cherrypy
-import json
-import os
-import tempfile
-import threading
-import unittest
-from functools import partial
-
-from wok.control.base import Collection, Resource
-
-from wok.plugins.kimchi import mockmodel
-
-import utils
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-cherrypy_port = None
-tmpfile = None
-
-
-def setUpModule():
- global test_server, model, host, port, ssl_port, cherrypy_port, tmpfile
-
- utils.patch_auth()
- tmpfile = tempfile.mktemp()
- model = mockmodel.MockModel(tmpfile)
- host = '127.0.0.1'
- port = utils.get_free_port('http')
- ssl_port = utils.get_free_port('https')
- cherrypy_port = utils.get_free_port('cherrypy_port')
- test_server = utils.run_server(host, port, ssl_port, test_mode=True,
- cherrypy_port=cherrypy_port, model=model)
-
-
-def tearDownModule():
- test_server.stop()
- os.unlink(tmpfile)
-
-
-class ServerTests(unittest.TestCase):
- def setUp(self):
- self.request = partial(utils.request, host, ssl_port)
- model.reset()
-
- def assertValidJSON(self, txt):
- try:
- json.loads(txt)
- except ValueError:
- self.fail("Invalid JSON: %s" % txt)
-
- def test_server_start(self):
- """
- Test that we can start a server and receive HTTP:200.
- """
- resp = self.request('/')
- self.assertEquals(200, resp.status)
-
- def test_multithreaded_connection(self):
- def worker():
- for i in xrange(100):
- ret = model.vms_get_list()
- self.assertEquals('test', ret[0])
-
- threads = []
- for i in xrange(100):
- t = threading.Thread(target=worker)
- t.setDaemon(True)
- t.start()
- threads.append(t)
- for t in threads:
- t.join()
-
- def test_collection(self):
- c = Collection(model)
-
- # The base Collection is always empty
- cherrypy.request.method = 'GET'
- cherrypy.request.headers['Accept'] = 'application/json'
- self.assertEquals('[]', c.index())
-
- # POST and DELETE raise HTTP:405 by default
- for method in ('POST', 'DELETE'):
- cherrypy.request.method = method
- try:
- c.index()
- except cherrypy.HTTPError, e:
- self.assertEquals(405, e.code)
- else:
- self.fail("Expected exception not raised")
-
- def test_resource(self):
- r = Resource(model)
-
- # Test the base Resource representation
- cherrypy.request.method = 'GET'
- cherrypy.request.headers['Accept'] = 'application/json'
- self.assertEquals('{}', r.index())
-
- # POST and DELETE raise HTTP:405 by default
- for method in ('POST', 'DELETE'):
- cherrypy.request.method = method
- try:
- r.index()
- except cherrypy.HTTPError, e:
- self.assertEquals(405, e.code)
- else:
- self.fail("Expected exception not raised")
-
- def test_404(self):
- """
- A non-existent path should return HTTP:404
- """
- url_list = ['/plugins/kimchi/doesnotexist', '/plugins/kimchi/vms/blah']
- for url in url_list:
- resp = self.request(url)
- self.assertEquals(404, resp.status)
-
- # Verify it works for DELETE too
- resp = self.request('/plugins/kimchi/templates/blah', '', 'DELETE')
- self.assertEquals(404, resp.status)
-
- def test_accepts(self):
- """
- Verify the following expectations regarding the client Accept header:
- If omitted, default to html
- If 'application/json', serve the rest api
- If 'text/html', serve the UI
- If both of the above (in any order), serve the rest api
- If neither of the above, HTTP:406
- """
- resp = self.request("/", headers={})
- location = resp.getheader('location')
- self.assertTrue(location.endswith("login.html"))
- resp = self.request("/login.html", headers={})
- self.assertTrue('<!doctype html>' in resp.read().lower())
-
- resp = self.request("/", headers={'Accept': 'application/json'})
- self.assertValidJSON(resp.read())
-
- resp = self.request("/", headers={'Accept': 'text/html'})
- location = resp.getheader('location')
- self.assertTrue(location.endswith("login.html"))
-
- resp = self.request("/", headers={'Accept':
- 'application/json, text/html'})
- self.assertValidJSON(resp.read())
-
- resp = self.request("/", headers={'Accept':
- 'text/html, application/json'})
- self.assertValidJSON(resp.read())
-
- h = {'Accept': 'text/plain'}
- resp = self.request('/', None, 'GET', h)
- self.assertEquals(406, resp.status)
-
- def test_auth_unprotected(self):
- hdrs = {'AUTHORIZATION': ''}
- uris = ['/plugins/kimchi/js/kimchi.min.js',
- '/plugins/kimchi/css/theme-default.min.css',
- '/plugins/kimchi/images/icon-vm.png',
- '/libs/jquery-1.10.0.min.js',
- '/login.html',
- '/logout']
-
- for uri in uris:
- resp = self.request(uri, None, 'HEAD', hdrs)
- self.assertEquals(200, resp.status)
-
- def test_auth_protected(self):
- hdrs = {'AUTHORIZATION': ''}
- uris = ['/plugins/kimchi/vms',
- '/plugins/kimchi/vms/doesnotexist',
- '/tasks']
-
- for uri in uris:
- resp = self.request(uri, None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_auth_bad_creds(self):
- # Test HTTPBA
- hdrs = {'AUTHORIZATION': "Basic " + base64.b64encode("nouser:badpass")}
- resp = self.request('/plugins/kimchi/vms', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- # Test REST API
- hdrs = {'AUTHORIZATION': ''}
- req = json.dumps({'username': 'nouser', 'password': 'badpass'})
- resp = self.request('/login', req, 'POST', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_auth_browser_no_httpba(self):
- # Kimchi detects REST requests from the browser by looking for a
- # specific header
- hdrs = {"X-Requested-With": "XMLHttpRequest"}
-
- # Try our request (Note that request() will add a valid HTTPBA header)
- resp = self.request('/plugins/kimchi/vms', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
- self.assertEquals(None, resp.getheader('WWW-Authenticate'))
-
- def test_auth_session(self):
- hdrs = {'AUTHORIZATION': '',
- 'Content-Type': 'application/json',
- 'Accept': 'application/json'}
-
- # Test we are logged out
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- # Execute a login call
- user, pw = mockmodel.fake_user.items()[0]
- req = json.dumps({'username': user, 'password': pw})
- resp = self.request('/login', req, 'POST', hdrs)
- self.assertEquals(200, resp.status)
-
- user_info = json.loads(resp.read())
- self.assertEquals(sorted(user_info.keys()),
- ['groups', 'roles', 'username'])
- roles = user_info['roles']
- for tab, role in roles.iteritems():
- self.assertEquals(role, u'admin')
-
- cookie = resp.getheader('set-cookie')
- hdrs['Cookie'] = cookie
-
- # Test we are logged in with the cookie
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(200, resp.status)
-
- # Execute a logout call
- resp = self.request('/logout', '{}', 'POST', hdrs)
- self.assertEquals(200, resp.status)
- del hdrs['Cookie']
-
- # Test we are logged out
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_get_param(self):
- # Create a mock ISO file
- mockiso = '/tmp/mock.iso'
- open('/tmp/mock.iso', 'w').close()
-
- # Create 2 different templates
- req = json.dumps({'name': 'test-tmpl1', 'cdrom': mockiso})
- self.request('/plugins/kimchi/templates', req, 'POST')
-
- req = json.dumps({'name': 'test-tmpl2', 'cdrom': mockiso})
- self.request('/plugins/kimchi/templates', req, 'POST')
-
- # Remove mock iso
- os.unlink(mockiso)
-
- # Get the templates
- resp = self.request('/plugins/kimchi/templates')
- self.assertEquals(200, resp.status)
- res = json.loads(resp.read())
- self.assertEquals(2, len(res))
-
- # Get a specific template
- resp = self.request('/plugins/kimchi/templates?name=test-tmpl1')
- self.assertEquals(200, resp.status)
- res = json.loads(resp.read())
- self.assertEquals(1, len(res))
- self.assertEquals('test-tmpl1', res[0]['name'])
diff --git a/plugins/kimchi/tests/test_utils.py b/plugins/kimchi/tests/test_utils.py
deleted file mode 100644
index bcb14e2..0000000
--- a/plugins/kimchi/tests/test_utils.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import unittest
-
-from wok.exception import InvalidParameter
-from wok.utils import convert_data_size
-
-
-class UtilsTests(unittest.TestCase):
- def test_convert_data_size(self):
- failure_data = [{'val': None, 'from': 'MiB'},
- {'val': self, 'from': 'MiB'},
- {'val': 1, 'from': None},
- {'val': 1, 'from': ''},
- {'val': 1, 'from': 'foo'},
- {'val': 1, 'from': 'kib'},
- {'val': 1, 'from': 'MiB', 'to': None},
- {'val': 1, 'from': 'MiB', 'to': ''},
- {'val': 1, 'from': 'MiB', 'to': 'foo'},
- {'val': 1, 'from': 'MiB', 'to': 'kib'}]
-
- for d in failure_data:
- if 'to' in d:
- self.assertRaises(InvalidParameter, convert_data_size,
- d['val'], d['from'], d['to'])
- else:
- self.assertRaises(InvalidParameter, convert_data_size,
- d['val'], d['from'])
-
- success_data = [{'got': convert_data_size(5, 'MiB', 'MiB'),
- 'want': 5},
- {'got': convert_data_size(5, 'MiB', 'KiB'),
- 'want': 5120},
- {'got': convert_data_size(5, 'MiB', 'M'),
- 'want': 5.24288},
- {'got': convert_data_size(5, 'MiB', 'GiB'),
- 'want': 0.0048828125},
- {'got': convert_data_size(5, 'MiB', 'Tb'),
- 'want': 4.194304e-05},
- {'got': convert_data_size(5, 'KiB', 'MiB'),
- 'want': 0.0048828125},
- {'got': convert_data_size(5, 'M', 'MiB'),
- 'want': 4.76837158203125},
- {'got': convert_data_size(5, 'GiB', 'MiB'),
- 'want': 5120},
- {'got': convert_data_size(5, 'Tb', 'MiB'),
- 'want': 596046.4477539062},
- {'got': convert_data_size(5, 'MiB'),
- 'want': convert_data_size(5, 'MiB', 'B')}]
-
- for d in success_data:
- self.assertEquals(d['got'], d['want'])
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..c1f6784
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,50 @@
+#
+# Kimchi
+#
+# Copyright IBM Corp, 2013
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+EXTRA_DIST = \
+ Makefile.am \
+ run_tests.sh.in \
+ test_config.py.in \
+ $(filter-out test_config.py, $(wildcard *.py)) \
+ $(NULL)
+
+noinst_SCRIPTS = run_tests.sh
+
+do_substitution = \
+ sed -e 's,[@]HAVE_PYMOD_UNITTEST[@],$(HAVE_PYMOD_UNITTEST),g' \
+ -e 's,[@]prefix[@],$(prefix),g' \
+ -e 's,[@]datadir[@],$(datadir),g' \
+ -e 's,[@]PYTHON_VERSION[@],$(PYTHON_VERSION),g' \
+ -e 's,[@]wokdir[@],$(pythondir)/wok,g' \
+ -e 's,[@]pkgdatadir[@],$(pkgdatadir),g'
+
+
+run_tests.sh: run_tests.sh.in Makefile
+ $(do_substitution) < $(srcdir)/run_tests.sh.in > run_tests.sh
+ chmod +x run_tests.sh
+
+test_config.py: test_config.py.in Makefile
+ $(do_substitution) < $(srcdir)/test_config.py.in > test_config.py
+
+check-local:
+ $(MKDIR_P) $(top_srcdir)/data/screenshots
+ ./run_tests.sh
+
+BUILT_SOURCES = test_config.py
+CLEANFILES = run_tests.sh test_config.py
diff --git a/tests/run_tests.sh.in b/tests/run_tests.sh.in
new file mode 100644
index 0000000..d1f4b38
--- /dev/null
+++ b/tests/run_tests.sh.in
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+HAVE_UNITTEST=@HAVE_PYMOD_UNITTEST@
+PYTHON_VER=@PYTHON_VERSION@
+
+if [ "$1" = "-v" ]; then
+ OPTS="-v"
+ shift
+else
+ OPTS=""
+fi
+
+if [ $# -ne 0 ]; then
+ ARGS="$@"
+else
+ ARGS=`find -name "test_*.py" | xargs -I @ basename @ .py`
+fi
+
+if [ "$HAVE_UNITTEST" != "yes" -o "$PYTHON_VER" == "2.6" ]; then
+ CMD="unit2"
+else
+ CMD="python -m unittest"
+fi
+
+LIST=($ARGS)
+MODEL_LIST=()
+MOCK_LIST=()
+for ((i=0;i<${#LIST[@]};i++)); do
+
+ if [[ ${LIST[$i]} == test_model* ]]; then
+ MODEL_LIST+=(${LIST[$i]})
+ else
+ MOCK_LIST+=(${LIST[$i]})
+ fi
+done
+
+PYTHONPATH=../src:../ $CMD $OPTS ${MODEL_LIST[@]} ${MOCK_LIST[@]}
diff --git a/tests/test_config.py.in b/tests/test_config.py.in
new file mode 100644
index 0000000..3ef431f
--- /dev/null
+++ b/tests/test_config.py.in
@@ -0,0 +1,132 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+
+from wok.config import Paths, WokConfig
+
+
+get_prefix = None
+
+
+def setUpModule():
+ global get_prefix
+ get_prefix = Paths.get_prefix
+
+
+def tearDownModule():
+ Paths.get_prefix = get_prefix
+
+
+class ConfigTests(unittest.TestCase):
+ def assertInstalledPath(self, actual, expected):
+ if '@pkgdatadir@' != '/usr/share/wok':
+ usr_local = '/usr/local'
+ if not expected.startswith('/usr'):
+ expected = usr_local + expected
+ self.assertEquals(actual, expected)
+
+ def test_installed_paths(self):
+ Paths.get_prefix = lambda self: '@datadir@/wok'
+ paths = Paths()
+ self.assertInstalledPath(paths.state_dir, '/var/lib/wok')
+ self.assertInstalledPath(paths.log_dir, '/var/log/wok')
+ self.assertInstalledPath(paths.conf_dir, '/etc/wok')
+ self.assertInstalledPath(paths.src_dir, '@wokdir@')
+ self.assertInstalledPath(paths.plugins_dir, '@wokdir@/plugins')
+ self.assertInstalledPath(paths.ui_dir, '@datadir@/wok/ui')
+ self.assertInstalledPath(paths.mo_dir, '@prefix@/share/locale')
+
+ def test_uninstalled_paths(self):
+ Paths.get_prefix = lambda self: '/home/user/wok'
+ paths = Paths()
+ self.assertEquals(paths.state_dir, '/home/user/wok/data')
+ self.assertEquals(paths.log_dir, '/home/user/wok/log')
+ self.assertEquals(paths.conf_dir, '/home/user/wok/src')
+ self.assertEquals(paths.src_dir, '/home/user/wok/src/wok')
+ self.assertEquals(paths.plugins_dir, '/home/user/wok/plugins')
+ self.assertEquals(paths.ui_dir, '/home/user/wok/ui')
+ self.assertEquals(paths.mo_dir, '/home/user/wok/mo')
+
+ def test_wok_config(self):
+ Paths.get_prefix = get_prefix
+ paths = Paths()
+ CACHEEXPIRES = 31536000
+ SESSIONSTIMEOUT = 10
+ configObj = {
+ '/': {
+ 'tools.trailing_slash.on': False,
+ 'request.methods_with_bodies': ('POST', 'PUT'),
+ 'tools.nocache.on': True,
+ 'tools.proxy.on': True,
+ 'tools.sessions.on': True,
+ 'tools.sessions.name': 'wok',
+ 'tools.sessions.secure': True,
+ 'tools.sessions.httponly': True,
+ 'tools.sessions.locking': 'explicit',
+ 'tools.sessions.storage_type': 'ram',
+ 'tools.sessions.timeout': SESSIONSTIMEOUT,
+ 'tools.wokauth.on': False
+ },
+ '/wok-ui.html': {
+ 'tools.wokauth.on': True
+ },
+ '/css': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/css' % paths.prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/js': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/js' % paths.prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/libs': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/libs' % paths.prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/images': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/images' % paths.prefix,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/favicon.ico': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename':
+ '%s/images/logo.ico' % paths.ui_dir
+ },
+ '/robots.txt': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/robots.txt' % paths.ui_dir
+ },
+ }
+
+ wok_config = WokConfig()
+ self.assertEquals(wok_config, configObj)
diff --git a/tests/test_exception.py b/tests/test_exception.py
new file mode 100644
index 0000000..c0fc11e
--- /dev/null
+++ b/tests/test_exception.py
@@ -0,0 +1,130 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import unittest
+
+from utils import get_free_port, patch_auth, request, run_server
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+
+
+def setup_server(environment='development'):
+ global test_server, model, host, port, ssl_port
+
+ patch_auth()
+ host = '127.0.0.1'
+ port = get_free_port('http')
+ ssl_port = get_free_port('https')
+ test_server = run_server(host, port, ssl_port, test_mode=True,
+ environment=environment)
+
+
+class ExceptionTests(unittest.TestCase):
+ def tearDown(self):
+ test_server.stop()
+
+ def test_production_env(self):
+ """
+ Test reasons sanitized in production env
+ """
+ setup_server('production')
+
+ # test 404
+ resp = json.loads(request(host, ssl_port, '/tasks/blah').read())
+ self.assertEquals('404 Not Found', resp.get('code'))
+
+ # test 405 wrong method
+ resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
+ msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+
+ # test 400 parse error
+ resp = json.loads(request(host, ssl_port, '/tasks', '{',
+ 'POST').read())
+ msg = u'WOKAPI0006E: Unable to parse JSON request'
+ self.assertEquals('400 Bad Request', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+ self.assertNotIn('call_stack', resp)
+
+ # test 400 missing required parameter
+ # TODO: need add this test when some REST API from wok accepts POST
+# req = json.dumps({})
+# resp = json.loads(request(host, ssl_port, '/tasks', req,
+# 'POST').read())
+# self.assertEquals('400 Bad Request', resp.get('code'))
+# m = u"KCHVM0016E: Specify a template to create a virtual machine from"
+# self.assertEquals(m, resp.get('reason'))
+# self.assertNotIn('call_stack', resp)
+
+ # test 405 method not allowed
+ req = json.dumps({})
+ resp = json.loads(request(host, ssl_port, '/tasks', req,
+ 'POST').read())
+ m = u"WOKAPI0005E: Create is not allowed for tasks"
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(m, resp.get('reason'))
+
+ def test_development_env(self):
+ """
+ Test traceback thrown in development env
+ """
+ setup_server()
+ # test 404
+ resp = json.loads(request(host, ssl_port, '/tasks/blah').read())
+ self.assertEquals('404 Not Found', resp.get('code'))
+
+ # test 405 wrong method
+ resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
+ msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+
+ # test 400 parse error
+ resp = json.loads(request(host, ssl_port, '/tasks', '{',
+ 'POST').read())
+ msg = u'WOKAPI0006E: Unable to parse JSON request'
+ self.assertEquals('400 Bad Request', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+ self.assertIn('call_stack', resp)
+
+ # test 400 missing required parameter
+ # TODO: need add this test when some REST API from wok accepts POST
+# req = json.dumps({})
+# resp = json.loads(request(host, ssl_port, '/tasks', req,
+# 'POST').read())
+# m = u"KCHVM0016E: Specify a template to create a virtual machine from"
+# self.assertEquals('400 Bad Request', resp.get('code'))
+# self.assertEquals(m, resp.get('reason'))
+# self.assertIn('call_stack', resp)
+
+ # test 405 method not allowed
+ req = json.dumps({})
+ resp = json.loads(request(host, ssl_port, '/tasks', req,
+ 'POST').read())
+ m = u"WOKAPI0005E: Create is not allowed for tasks"
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(m, resp.get('reason'))
+ self.assertIn('call_stack', resp)
diff --git a/tests/test_objectstore.py b/tests/test_objectstore.py
new file mode 100644
index 0000000..632786f
--- /dev/null
+++ b/tests/test_objectstore.py
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+import tempfile
+import threading
+import unittest
+
+from wok import objectstore
+from wok.exception import NotFoundError
+
+
+tmpfile = None
+
+
+def setUpModule():
+ global tmpfile
+ tmpfile = tempfile.mktemp()
+
+
+def tearDownModule():
+ os.unlink(tmpfile)
+
+
+class ObjectStoreTests(unittest.TestCase):
+ def test_objectstore(self):
+ store = objectstore.ObjectStore(tmpfile)
+
+ with store as session:
+ # Test create
+ session.store('f����', 't��st1', {'��': 1})
+ session.store('f����', 't��st2', {'��': 2})
+
+ # Test list
+ items = session.get_list('f����')
+ self.assertTrue(u't��st1' in items)
+ self.assertTrue(u't��st2' in items)
+
+ # Test get
+ item = session.get('f����', 't��st1')
+ self.assertEquals(1, item[u'��'])
+
+ # Test delete
+ session.delete('f����', 't��st2')
+ self.assertEquals(1, len(session.get_list('f����')))
+
+ # Test get non-existent item
+
+ self.assertRaises(NotFoundError, session.get,
+ '��', '��')
+
+ # Test delete non-existent item
+ self.assertRaises(NotFoundError, session.delete,
+ 'f����', 't��st2')
+
+ # Test refresh existing item
+ session.store('f����', 't��st1', {'��': 2})
+ item = session.get('f����', 't��st1')
+ self.assertEquals(2, item[u'��'])
+
+ def test_object_store_threaded(self):
+ def worker(ident):
+ with store as session:
+ session.store('foo', ident, {})
+
+ store = objectstore.ObjectStore(tmpfile)
+
+ threads = []
+ for i in xrange(50):
+ t = threading.Thread(target=worker, args=(i,))
+ t.setDaemon(True)
+ t.start()
+ threads.append(t)
+
+ for t in threads:
+ t.join()
+
+ with store as session:
+ self.assertEquals(50, len(session.get_list('foo')))
+ self.assertEquals(10, len(store._connections.keys()))
diff --git a/tests/test_plugin.py b/tests/test_plugin.py
new file mode 100644
index 0000000..5d371e5
--- /dev/null
+++ b/tests/test_plugin.py
@@ -0,0 +1,120 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import unittest
+from functools import partial
+
+from wok.utils import get_enabled_plugins
+
+import utils
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+
+
+def setUpModule():
+ global test_server, model, host, port, ssl_port
+
+ utils.patch_auth()
+ host = '127.0.0.1'
+ port = utils.get_free_port('http')
+ ssl_port = utils.get_free_port('https')
+ test_server = utils.run_server(host, port, ssl_port, test_mode=True)
+
+
+def tearDownModule():
+ test_server.stop()
+
+
+(a)unittest.skipUnless(
+ 'sample' in [plugin for plugin, _config in get_enabled_plugins()],
+ 'sample plugin is not enabled, skip this test!')
+class PluginTests(unittest.TestCase):
+
+ def setUp(self):
+ self.request = partial(utils.request, host, ssl_port)
+
+ def _create_rectangle(self, name, length, width):
+ req = json.dumps({'name': name, 'length': length, 'width': width})
+ resp = self.request('/plugins/sample/rectangles', req, 'POST')
+ return resp
+
+ def _get_rectangle(self, name):
+ resp = self.request('/plugins/sample/rectangles/%s' % name)
+ return json.loads(resp.read())
+
+ def _create_rectangle_and_assert(self, name, length, width):
+ resp = self._create_rectangle(name, length, width)
+ self.assertEquals(201, resp.status)
+
+ rectangle = self._get_rectangle(name)
+ self.assertEquals(rectangle['name'], name)
+ self.assertEquals(rectangle['length'], length)
+ self.assertEquals(rectangle['width'], width)
+
+ def _get_rectangles_list(self):
+ resp = self.request('/plugins/sample/rectangles')
+ rectangles = json.loads(resp.read())
+ name_list = [rectangle['name'] for rectangle in rectangles]
+ return name_list
+
+ def test_rectangles(self):
+ # Create two new rectangles
+ self._create_rectangle_and_assert('small', 10, 8)
+ self._create_rectangle_and_assert('big', 20, 16)
+
+ # Verify they're in the list
+ name_list = self._get_rectangles_list()
+ self.assertIn('small', name_list)
+ self.assertIn('big', name_list)
+
+ # Update the big rectangle.
+ req = json.dumps({'length': 40, 'width': 30})
+ resp = self.request('/plugins/sample/rectangles/big', req, 'PUT')
+ self.assertEquals(200, resp.status)
+ big = self._get_rectangle('big')
+ self.assertEquals(big['length'], 40)
+ self.assertEquals(big['width'], 30)
+
+ # Delete two rectangles
+ resp = self.request('/plugins/sample/rectangles/big', '{}', 'DELETE')
+ self.assertEquals(204, resp.status)
+ resp = self.request('/plugins/sample/rectangles/small', '{}', 'DELETE')
+ self.assertEquals(204, resp.status)
+ name_list = self._get_rectangles_list()
+ self.assertEquals([], name_list)
+
+ def test_bad_params(self):
+ # Bad name
+ resp = self._create_rectangle(1.0, 30, 40)
+ self.assertEquals(400, resp.status)
+
+ # Bad length value
+ resp = self._create_rectangle('test', -10.0, 40)
+ self.assertEquals(400, resp.status)
+
+ # Missing param for width
+ req = json.dumps({'name': 'nowidth', 'length': 40})
+ resp = self.request('/plugins/sample/rectangles', req, 'POST')
+ self.assertEquals(400, resp.status)
diff --git a/tests/test_rollbackcontext.py b/tests/test_rollbackcontext.py
new file mode 100644
index 0000000..6eac6d0
--- /dev/null
+++ b/tests/test_rollbackcontext.py
@@ -0,0 +1,99 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+
+from wok.rollbackcontext import RollbackContext
+
+
+class FirstError(Exception):
+ '''A hypothetical exception to be raise in the test firstly.'''
+ pass
+
+
+class SecondError(Exception):
+ '''A hypothetical exception to be raise in the test secondly.'''
+ pass
+
+
+class RollbackContextTests(unittest.TestCase):
+
+ def setUp(self):
+ self._counter = 0
+
+ def _inc_counter(self):
+ self._counter += 1
+
+ def _raise(self, exception=FirstError):
+ raise exception()
+
+ def test_rollback(self):
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._inc_counter)
+ self.assertEquals(self._counter, 2)
+
+ def test_raise(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._inc_counter)
+ raise FirstError()
+ rollback.prependDefer(self._inc_counter)
+ except FirstError:
+ # All undo before the FirstError should be run
+ self.assertEquals(self._counter, 2)
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_undo(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._raise)
+ rollback.prependDefer(self._inc_counter)
+ except FirstError:
+ # All undo should be run
+ self.assertEquals(self._counter, 2)
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_prefer_original(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._raise, SecondError)
+ raise FirstError()
+ except FirstError:
+ pass
+ except SecondError:
+ self.fail('Should have preferred FirstError to SecondError')
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_prefer_first_undo(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._raise, SecondError)
+ rollback.prependDefer(self._raise, FirstError)
+ except FirstError:
+ pass
+ except SecondError:
+ self.fail('Should have preferred FirstError to SecondError')
+ else:
+ self.fail('Should have raised FirstError')
diff --git a/tests/test_server.py b/tests/test_server.py
new file mode 100644
index 0000000..636591d
--- /dev/null
+++ b/tests/test_server.py
@@ -0,0 +1,282 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import base64
+import cherrypy
+import json
+import tempfile
+import threading
+import unittest
+from functools import partial
+
+from wok.control.base import Collection, Resource
+
+import utils
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+cherrypy_port = None
+tmpfile = None
+
+
+def setUpModule():
+ global test_server, model, host, port, ssl_port, cherrypy_port, tmpfile
+
+ utils.patch_auth()
+ tmpfile = tempfile.mktemp()
+ host = '127.0.0.1'
+ port = utils.get_free_port('http')
+ ssl_port = utils.get_free_port('https')
+ cherrypy_port = utils.get_free_port('cherrypy_port')
+ test_server = utils.run_server(host, port, ssl_port, test_mode=True,
+ cherrypy_port=cherrypy_port)
+
+
+def tearDownModule():
+ test_server.stop()
+
+
+class ServerTests(unittest.TestCase):
+ def setUp(self):
+ self.request = partial(utils.request, host, ssl_port)
+
+ def assertValidJSON(self, txt):
+ try:
+ json.loads(txt)
+ except ValueError:
+ self.fail("Invalid JSON: %s" % txt)
+
+ def test_server_start(self):
+ """
+ Test that we can start a server and receive HTTP:200.
+ """
+ resp = self.request('/')
+ self.assertEquals(200, resp.status)
+
+ def test_multithreaded_connection(self):
+ def worker():
+ for i in xrange(100):
+ ret = ['test']
+ self.assertEquals('test', ret[0])
+
+ threads = []
+ for i in xrange(100):
+ t = threading.Thread(target=worker)
+ t.setDaemon(True)
+ t.start()
+ threads.append(t)
+ for t in threads:
+ t.join()
+
+ def test_collection(self):
+ c = Collection(model)
+
+ # The base Collection is always empty
+ cherrypy.request.method = 'GET'
+ cherrypy.request.headers['Accept'] = 'application/json'
+ self.assertEquals('[]', c.index())
+
+ # POST and DELETE raise HTTP:405 by default
+ for method in ('POST', 'DELETE'):
+ cherrypy.request.method = method
+ try:
+ c.index()
+ except cherrypy.HTTPError, e:
+ self.assertEquals(405, e.code)
+ else:
+ self.fail("Expected exception not raised")
+
+ def test_resource(self):
+ r = Resource(model)
+
+ # Test the base Resource representation
+ cherrypy.request.method = 'GET'
+ cherrypy.request.headers['Accept'] = 'application/json'
+ self.assertEquals('{}', r.index())
+
+ # POST and DELETE raise HTTP:405 by default
+ for method in ('POST', 'DELETE'):
+ cherrypy.request.method = method
+ try:
+ r.index()
+ except cherrypy.HTTPError, e:
+ self.assertEquals(405, e.code)
+ else:
+ self.fail("Expected exception not raised")
+
+ def test_404(self):
+ """
+ A non-existent path should return HTTP:404
+ """
+ url_list = ['/doesnotexist', '/tasks/blah']
+ for url in url_list:
+ resp = self.request(url)
+ self.assertEquals(404, resp.status)
+
+ # Verify it works for DELETE too
+ resp = self.request('/tasks/blah', '', 'DELETE')
+ self.assertEquals(404, resp.status)
+
+ def test_accepts(self):
+ """
+ Verify the following expectations regarding the client Accept header:
+ If omitted, default to html
+ If 'application/json', serve the rest api
+ If 'text/html', serve the UI
+ If both of the above (in any order), serve the rest api
+ If neither of the above, HTTP:406
+ """
+ resp = self.request("/", headers={})
+ location = resp.getheader('location')
+ self.assertTrue(location.endswith("login.html"))
+ resp = self.request("/login.html", headers={})
+ self.assertTrue('<!doctype html>' in resp.read().lower())
+
+ resp = self.request("/", headers={'Accept': 'application/json'})
+ self.assertValidJSON(resp.read())
+
+ resp = self.request("/", headers={'Accept': 'text/html'})
+ location = resp.getheader('location')
+ self.assertTrue(location.endswith("login.html"))
+
+ resp = self.request("/", headers={'Accept':
+ 'application/json, text/html'})
+ self.assertValidJSON(resp.read())
+
+ resp = self.request("/", headers={'Accept':
+ 'text/html, application/json'})
+ self.assertValidJSON(resp.read())
+
+ h = {'Accept': 'text/plain'}
+ resp = self.request('/', None, 'GET', h)
+ self.assertEquals(406, resp.status)
+
+ def test_auth_unprotected(self):
+ hdrs = {'AUTHORIZATION': ''}
+ uris = ['/js/wok.min.js',
+ '/css/theme-default.min.css',
+ '/images/favicon.png',
+ '/libs/jquery/jquery.min.js',
+ '/login.html',
+ '/logout']
+
+ for uri in uris:
+ resp = self.request(uri, None, 'HEAD', hdrs)
+ self.assertEquals(200, resp.status)
+
+ def test_auth_protected(self):
+ hdrs = {'AUTHORIZATION': ''}
+ uris = ['/tasks']
+
+ for uri in uris:
+ resp = self.request(uri, None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ def test_auth_bad_creds(self):
+ # Test HTTPBA
+ hdrs = {'AUTHORIZATION': "Basic " + base64.b64encode("nouser:badpass")}
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ # Test REST API
+ hdrs = {'AUTHORIZATION': ''}
+ req = json.dumps({'username': 'nouser', 'password': 'badpass'})
+ resp = self.request('/login', req, 'POST', hdrs)
+ self.assertEquals(401, resp.status)
+
+ def test_auth_browser_no_httpba(self):
+ # Kimchi detects REST requests from the browser by looking for a
+ # specific header
+ hdrs = {"X-Requested-With": "XMLHttpRequest"}
+
+ # Try our request (Note that request() will add a valid HTTPBA header)
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+ self.assertEquals(None, resp.getheader('WWW-Authenticate'))
+
+ def test_auth_session(self):
+ hdrs = {'AUTHORIZATION': '',
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'}
+
+ # Test we are logged out
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ # Execute a login call
+ user, pw = utils.fake_user.items()[0]
+ req = json.dumps({'username': user, 'password': pw})
+ resp = self.request('/login', req, 'POST', hdrs)
+ self.assertEquals(200, resp.status)
+
+ user_info = json.loads(resp.read())
+ self.assertEquals(sorted(user_info.keys()),
+ ['groups', 'roles', 'username'])
+ roles = user_info['roles']
+ for tab, role in roles.iteritems():
+ self.assertEquals(role, u'admin')
+
+ cookie = resp.getheader('set-cookie')
+ hdrs['Cookie'] = cookie
+
+ # Test we are logged in with the cookie
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(200, resp.status)
+
+ # Execute a logout call
+ resp = self.request('/logout', '{}', 'POST', hdrs)
+ self.assertEquals(200, resp.status)
+ del hdrs['Cookie']
+
+ # Test we are logged out
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ # TODO: uncomment and adapt when some wok API accepts parameters to test
+# def test_get_param(self):
+# # Create a mock ISO file
+# mockiso = '/tmp/mock.iso'
+# open('/tmp/mock.iso', 'w').close()
+#
+# # Create 2 different templates
+# req = json.dumps({'name': 'test-tmpl1', 'cdrom': mockiso})
+# self.request('/plugins/kimchi/templates', req, 'POST')
+#
+# req = json.dumps({'name': 'test-tmpl2', 'cdrom': mockiso})
+# self.request('/plugins/kimchi/templates', req, 'POST')
+#
+# # Remove mock iso
+# os.unlink(mockiso)
+#
+# # Get the templates
+# resp = self.request('/plugins/kimchi/templates')
+# self.assertEquals(200, resp.status)
+# res = json.loads(resp.read())
+# self.assertEquals(2, len(res))
+#
+# # Get a specific template
+# resp = self.request('/plugins/kimchi/templates?name=test-tmpl1')
+# self.assertEquals(200, resp.status)
+# res = json.loads(resp.read())
+# self.assertEquals(1, len(res))
+# self.assertEquals('test-tmpl1', res[0]['name'])
diff --git a/tests/test_utils.py b/tests/test_utils.py
new file mode 100644
index 0000000..bcb14e2
--- /dev/null
+++ b/tests/test_utils.py
@@ -0,0 +1,69 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+
+from wok.exception import InvalidParameter
+from wok.utils import convert_data_size
+
+
+class UtilsTests(unittest.TestCase):
+ def test_convert_data_size(self):
+ failure_data = [{'val': None, 'from': 'MiB'},
+ {'val': self, 'from': 'MiB'},
+ {'val': 1, 'from': None},
+ {'val': 1, 'from': ''},
+ {'val': 1, 'from': 'foo'},
+ {'val': 1, 'from': 'kib'},
+ {'val': 1, 'from': 'MiB', 'to': None},
+ {'val': 1, 'from': 'MiB', 'to': ''},
+ {'val': 1, 'from': 'MiB', 'to': 'foo'},
+ {'val': 1, 'from': 'MiB', 'to': 'kib'}]
+
+ for d in failure_data:
+ if 'to' in d:
+ self.assertRaises(InvalidParameter, convert_data_size,
+ d['val'], d['from'], d['to'])
+ else:
+ self.assertRaises(InvalidParameter, convert_data_size,
+ d['val'], d['from'])
+
+ success_data = [{'got': convert_data_size(5, 'MiB', 'MiB'),
+ 'want': 5},
+ {'got': convert_data_size(5, 'MiB', 'KiB'),
+ 'want': 5120},
+ {'got': convert_data_size(5, 'MiB', 'M'),
+ 'want': 5.24288},
+ {'got': convert_data_size(5, 'MiB', 'GiB'),
+ 'want': 0.0048828125},
+ {'got': convert_data_size(5, 'MiB', 'Tb'),
+ 'want': 4.194304e-05},
+ {'got': convert_data_size(5, 'KiB', 'MiB'),
+ 'want': 0.0048828125},
+ {'got': convert_data_size(5, 'M', 'MiB'),
+ 'want': 4.76837158203125},
+ {'got': convert_data_size(5, 'GiB', 'MiB'),
+ 'want': 5120},
+ {'got': convert_data_size(5, 'Tb', 'MiB'),
+ 'want': 596046.4477539062},
+ {'got': convert_data_size(5, 'MiB'),
+ 'want': convert_data_size(5, 'MiB', 'B')}]
+
+ for d in success_data:
+ self.assertEquals(d['got'], d['want'])
diff --git a/tests/utils.py b/tests/utils.py
new file mode 100644
index 0000000..1c6ee12
--- /dev/null
+++ b/tests/utils.py
@@ -0,0 +1,259 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+import base64
+import cherrypy
+import grp
+import httplib
+import inspect
+import json
+import os
+import socket
+import ssl
+import sys
+import threading
+import time
+import unittest
+from contextlib import closing
+from lxml import etree
+
+import wok.server
+from wok.config import config, PluginPaths
+from wok.auth import User, USER_NAME, USER_GROUPS, USER_ROLES, tabs
+from wok.exception import NotFoundError, OperationFailed
+from wok.utils import wok_log
+
+
+_ports = {}
+fake_user = {'test': 'passw0rd'}
+
+# provide missing unittest decorators and API for python 2.6; these decorators
+# do not actually work, just avoid the syntax failure
+if sys.version_info[:2] == (2, 6):
+ def skipUnless(condition, reason):
+ if not condition:
+ sys.stderr.write('[expected failure] ')
+ raise Exception(reason)
+ return lambda obj: obj
+
+ unittest.skipUnless = skipUnless
+ unittest.expectedFailure = lambda obj: obj
+
+ def assertGreater(self, a, b, msg=None):
+ if not a > b:
+ self.fail('%s not greater than %s' % (repr(a), repr(b)))
+
+ def assertGreaterEqual(self, a, b, msg=None):
+ if not a >= b:
+ self.fail('%s not greater than or equal to %s'
+ % (repr(a), repr(b)))
+
+ def assertIsInstance(self, obj, cls, msg=None):
+ if not isinstance(obj, cls):
+ self.fail('%s is not an instance of %r' % (repr(obj), cls))
+
+ def assertIn(self, a, b, msg=None):
+ if a not in b:
+ self.fail("%s is not in %b" % (repr(a), repr(b)))
+
+ def assertNotIn(self, a, b, msg=None):
+ if a in b:
+ self.fail("%s is in %b" % (repr(a), repr(b)))
+
+ unittest.TestCase.assertGreaterEqual = assertGreaterEqual
+ unittest.TestCase.assertGreater = assertGreater
+ unittest.TestCase.assertIsInstance = assertIsInstance
+ unittest.TestCase.assertIn = assertIn
+ unittest.TestCase.assertNotIn = assertNotIn
+
+
+def get_free_port(name='http'):
+ global _ports
+ if _ports.get(name) is not None:
+ return _ports[name]
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ with closing(sock):
+ try:
+ sock.bind(("0.0.0.0", 0))
+ except:
+ raise Exception("Could not find a free port")
+ _ports[name] = sock.getsockname()[1]
+ return _ports[name]
+
+
+def run_server(host, port, ssl_port, test_mode, cherrypy_port=None,
+ model=None, environment='development'):
+
+ if cherrypy_port is None:
+ cherrypy_port = get_free_port('cherrypy_port')
+
+ if ssl_port is None:
+ ssl_port = get_free_port('https')
+
+ args = type('_', (object,),
+ {'host': host, 'port': port, 'ssl_port': ssl_port,
+ 'cherrypy_port': cherrypy_port, 'max_body_size': '4*1024',
+ 'ssl_cert': '', 'ssl_key': '',
+ 'test': test_mode, 'access_log': '/dev/null',
+ 'error_log': '/dev/null', 'environment': environment,
+ 'log_level': 'debug'})()
+ if model is not None:
+ setattr(args, 'model', model)
+
+ s = wok.server.Server(args)
+ t = threading.Thread(target=s.start)
+ t.setDaemon(True)
+ t.start()
+ cherrypy.engine.wait(cherrypy.engine.states.STARTED)
+ return s
+
+
+def silence_server():
+ """
+ Silence server status messages on stdout
+ """
+ cherrypy.config.update({"environment": "embedded"})
+
+
+def running_as_root():
+ return os.geteuid() == 0
+
+
+def _request(conn, path, data, method, headers):
+ if headers is None:
+ headers = {'Content-Type': 'application/json',
+ 'Accept': 'application/json'}
+ if 'AUTHORIZATION' not in headers.keys():
+ user, pw = fake_user.items()[0]
+ hdr = "Basic " + base64.b64encode("%s:%s" % (user, pw))
+ headers['AUTHORIZATION'] = hdr
+ conn.request(method, path, data, headers)
+ return conn.getresponse()
+
+
+def request(host, port, path, data=None, method='GET', headers=None):
+ # verify if HTTPSConnection has context parameter
+ if "context" in inspect.getargspec(httplib.HTTPSConnection.__init__).args:
+ context = ssl._create_unverified_context()
+ conn = httplib.HTTPSConnection(host, port, context=context)
+ else:
+ conn = httplib.HTTPSConnection(host, port)
+
+ return _request(conn, path, data, method, headers)
+
+
+def get_remote_iso_path():
+ """
+ Get a remote iso with the right arch from the distro files shipped
+ with kimchi.
+ """
+ host_arch = os.uname()[4]
+ remote_path = ''
+ with open(os.path.join(PluginPaths('kimchi').conf_dir, 'distros.d',
+ 'fedora.json')) as fedora_isos:
+ # Get a list of dicts
+ json_isos_list = json.load(fedora_isos)
+ for iso in json_isos_list:
+ if (iso.get('os_arch')) == host_arch:
+ remote_path = iso.get('path')
+ break
+
+ return remote_path
+
+
+class FakeUser(User):
+ auth_type = "fake"
+ sudo = True
+
+ def __init__(self, username):
+ self.user = {}
+ self.user[USER_NAME] = username
+ self.user[USER_GROUPS] = None
+ self.user[USER_ROLES] = dict.fromkeys(tabs, 'user')
+
+ def get_groups(self):
+ return sorted([group.gr_name for group in grp.getgrall()])[0:3]
+
+ def get_roles(self):
+ if self.sudo:
+ self.user[USER_ROLES] = dict.fromkeys(tabs, 'admin')
+ return self.user[USER_ROLES]
+
+ def get_user(self):
+ return self.user
+
+ @staticmethod
+ def authenticate(username, password, service="passwd"):
+ try:
+ return fake_user[username] == password
+ except KeyError, e:
+ raise OperationFailed("WOKAUTH0001E", {'username': 'username',
+ 'code': e.message})
+
+
+def patch_auth(sudo=True):
+ """
+ Override the authenticate function with a simple test against an
+ internal dict of users and passwords.
+ """
+ config.set("authentication", "method", "fake")
+ FakeUser.sudo = sudo
+
+
+def normalize_xml(xml_str):
+ return etree.tostring(etree.fromstring(xml_str,
+ etree.XMLParser(remove_blank_text=True)))
+
+
+def wait_task(task_lookup, taskid, timeout=10):
+ for i in range(0, timeout):
+ task_info = task_lookup(taskid)
+ if task_info['status'] == "running":
+ wok_log.info("Waiting task %s, message: %s",
+ taskid, task_info['message'])
+ time.sleep(1)
+ else:
+ return
+ wok_log.error("Timeout while process long-run task, "
+ "try to increase timeout value.")
+
+
+# The action functions in model backend raise NotFoundError exception if the
+# element is not found. But in some tests, these functions are called after
+# the element has been deleted if test finishes correctly, then NofFoundError
+# exception is raised and rollback breaks. To avoid it, this wrapper ignores
+# the NotFoundError.
+def rollback_wrapper(func, resource, *args):
+ try:
+ func(resource, *args)
+ except NotFoundError:
+ # VM has been deleted already
+ return
+
+
+# This function is used to test storage volume upload.
+# If we use self.request, we may encode multipart formdata by ourselves
+# requests lib take care of encode part, so use this lib instead
+def fake_auth_header():
+ headers = {'Accept': 'application/json'}
+ user, pw = fake_user.items()[0]
+ hdr = "Basic " + base64.b64encode("%s:%s" % (user, pw))
+ headers['AUTHORIZATION'] = hdr
+ return headers
--
2.4.3
2
1
30 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Move the KCHASYNC0003E ("Timeout of %(seconds)s seconds expired while running
task '%(task)s.") message error from Kimchi to Wok and update its code to
WOKASYNC0003E.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
plugins/kimchi/i18n.py | 2 --
src/wok/i18n.py | 2 ++
src/wok/model/tasks.py | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/plugins/kimchi/i18n.py b/plugins/kimchi/i18n.py
index 253f00d..23b6f96 100644
--- a/plugins/kimchi/i18n.py
+++ b/plugins/kimchi/i18n.py
@@ -25,8 +25,6 @@ _ = gettext.gettext
messages = {
"KCHAPI0001E": _("Unknown parameter %(value)s"),
- "KCHASYNC0003E": _("Timeout of %(seconds)s seconds expired while running task '%(task)s."),
-
"KCHAUTH0004E": _("User %(user_id)s not found with given LDAP settings."),
"KCHDEVS0001E": _('Unknown "_cap" specified'),
diff --git a/src/wok/i18n.py b/src/wok/i18n.py
index 43a1edf..a6376bd 100644
--- a/src/wok/i18n.py
+++ b/src/wok/i18n.py
@@ -33,6 +33,8 @@ messages = {
"WOKASYNC0001E": _("Datastore is not initiated in the model object."),
"WOKASYNC0002E": _("Unable to start task due error: %(err)s"),
+ "WOKASYNC0003E": _("Timeout of %(seconds)s seconds expired while running task '%(task)s."),
+
"WOKAUTH0001E": _("Authentication failed for user '%(username)s'. [Error code: %(code)s]"),
"WOKAUTH0002E": _("You are not authorized to access Kimchi"),
diff --git a/src/wok/model/tasks.py b/src/wok/model/tasks.py
index 678fdc2..d57c908 100644
--- a/src/wok/model/tasks.py
+++ b/src/wok/model/tasks.py
@@ -60,5 +60,5 @@ class TaskModel(object):
time.sleep(1)
- raise TimeoutExpired('KCHASYNC0003E', {'seconds': timeout,
+ raise TimeoutExpired('WOKASYNC0003E', {'seconds': timeout,
'task': task['target_uri']})
--
2.4.3
2
1
30 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Moving remaining Kimchi tests from old plugins structure to new src/wok structure.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
plugins/kimchi/tests/test_exception.py | 123 ---------
plugins/kimchi/tests/test_objectstore.py | 97 -------
plugins/kimchi/tests/test_plugin.py | 126 ---------
plugins/kimchi/tests/test_rollbackcontext.py | 99 -------
plugins/kimchi/tests/test_server.py | 289 ---------------------
plugins/kimchi/tests/test_utils.py | 69 -----
src/wok/plugins/kimchi/tests/test_exception.py | 123 +++++++++
src/wok/plugins/kimchi/tests/test_objectstore.py | 97 +++++++
src/wok/plugins/kimchi/tests/test_plugin.py | 126 +++++++++
.../plugins/kimchi/tests/test_rollbackcontext.py | 99 +++++++
src/wok/plugins/kimchi/tests/test_server.py | 289 +++++++++++++++++++++
src/wok/plugins/kimchi/tests/test_utils.py | 69 +++++
12 files changed, 803 insertions(+), 803 deletions(-)
delete mode 100644 plugins/kimchi/tests/test_exception.py
delete mode 100644 plugins/kimchi/tests/test_objectstore.py
delete mode 100644 plugins/kimchi/tests/test_plugin.py
delete mode 100644 plugins/kimchi/tests/test_rollbackcontext.py
delete mode 100644 plugins/kimchi/tests/test_server.py
delete mode 100644 plugins/kimchi/tests/test_utils.py
create mode 100644 src/wok/plugins/kimchi/tests/test_exception.py
create mode 100644 src/wok/plugins/kimchi/tests/test_objectstore.py
create mode 100644 src/wok/plugins/kimchi/tests/test_plugin.py
create mode 100644 src/wok/plugins/kimchi/tests/test_rollbackcontext.py
create mode 100644 src/wok/plugins/kimchi/tests/test_server.py
create mode 100644 src/wok/plugins/kimchi/tests/test_utils.py
diff --git a/plugins/kimchi/tests/test_exception.py b/plugins/kimchi/tests/test_exception.py
deleted file mode 100644
index 4459aa6..0000000
--- a/plugins/kimchi/tests/test_exception.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013-2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import json
-import os
-import unittest
-
-from wok.plugins.kimchi import mockmodel
-
-from utils import get_free_port, patch_auth, request, run_server
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-
-
-def setup_server(environment='development'):
- global test_server, model, host, port, ssl_port
-
- patch_auth()
- model = mockmodel.MockModel('/tmp/obj-store-test')
- host = '127.0.0.1'
- port = get_free_port('http')
- ssl_port = get_free_port('https')
- test_server = run_server(host, port, ssl_port, test_mode=True, model=model,
- environment=environment)
-
-
-class ExceptionTests(unittest.TestCase):
- def tearDown(self):
- test_server.stop()
- os.unlink('/tmp/obj-store-test')
-
- def test_production_env(self):
- """
- Test reasons sanitized in production env
- """
- setup_server('production')
- # test 404
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms/blah').read()
- )
- self.assertEquals('404 Not Found', resp.get('code'))
-
- # test 405 wrong method
- resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
- msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
- self.assertEquals('405 Method Not Allowed', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
-
- # test 400 parse error
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
- )
- msg = u'WOKAPI0006E: Unable to parse JSON request'
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
- self.assertNotIn('call_stack', resp)
-
- # test 400 missing required parameter
- req = json.dumps({})
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST').read()
- )
- self.assertEquals('400 Bad Request', resp.get('code'))
- m = u"KCHVM0016E: Specify a template to create a virtual machine from"
- self.assertEquals(m, resp.get('reason'))
- self.assertNotIn('call_stack', resp)
-
- def test_development_env(self):
- """
- Test traceback thrown in development env
- """
- setup_server()
- # test 404
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms/blah').read()
- )
- self.assertEquals('404 Not Found', resp.get('code'))
-
- # test 405 wrong method
- resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
- msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
- self.assertEquals('405 Method Not Allowed', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
-
- # test 400 parse error
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
- )
- msg = u'WOKAPI0006E: Unable to parse JSON request'
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(msg, resp.get('reason'))
- self.assertIn('call_stack', resp)
-
- # test 400 missing required parameter
- req = json.dumps({})
- resp = json.loads(
- request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST').read()
- )
- m = u"KCHVM0016E: Specify a template to create a virtual machine from"
- self.assertEquals('400 Bad Request', resp.get('code'))
- self.assertEquals(m, resp.get('reason'))
- self.assertIn('call_stack', resp)
diff --git a/plugins/kimchi/tests/test_objectstore.py b/plugins/kimchi/tests/test_objectstore.py
deleted file mode 100644
index 632786f..0000000
--- a/plugins/kimchi/tests/test_objectstore.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import os
-import tempfile
-import threading
-import unittest
-
-from wok import objectstore
-from wok.exception import NotFoundError
-
-
-tmpfile = None
-
-
-def setUpModule():
- global tmpfile
- tmpfile = tempfile.mktemp()
-
-
-def tearDownModule():
- os.unlink(tmpfile)
-
-
-class ObjectStoreTests(unittest.TestCase):
- def test_objectstore(self):
- store = objectstore.ObjectStore(tmpfile)
-
- with store as session:
- # Test create
- session.store('fǒǒ', 'těst1', {'α': 1})
- session.store('fǒǒ', 'těst2', {'β': 2})
-
- # Test list
- items = session.get_list('fǒǒ')
- self.assertTrue(u'těst1' in items)
- self.assertTrue(u'těst2' in items)
-
- # Test get
- item = session.get('fǒǒ', 'těst1')
- self.assertEquals(1, item[u'α'])
-
- # Test delete
- session.delete('fǒǒ', 'těst2')
- self.assertEquals(1, len(session.get_list('fǒǒ')))
-
- # Test get non-existent item
-
- self.assertRaises(NotFoundError, session.get,
- 'α', 'β')
-
- # Test delete non-existent item
- self.assertRaises(NotFoundError, session.delete,
- 'fǒǒ', 'těst2')
-
- # Test refresh existing item
- session.store('fǒǒ', 'těst1', {'α': 2})
- item = session.get('fǒǒ', 'těst1')
- self.assertEquals(2, item[u'α'])
-
- def test_object_store_threaded(self):
- def worker(ident):
- with store as session:
- session.store('foo', ident, {})
-
- store = objectstore.ObjectStore(tmpfile)
-
- threads = []
- for i in xrange(50):
- t = threading.Thread(target=worker, args=(i,))
- t.setDaemon(True)
- t.start()
- threads.append(t)
-
- for t in threads:
- t.join()
-
- with store as session:
- self.assertEquals(50, len(session.get_list('foo')))
- self.assertEquals(10, len(store._connections.keys()))
diff --git a/plugins/kimchi/tests/test_plugin.py b/plugins/kimchi/tests/test_plugin.py
deleted file mode 100644
index fc8e277..0000000
--- a/plugins/kimchi/tests/test_plugin.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import json
-import os
-import unittest
-from functools import partial
-
-from wok.utils import get_enabled_plugins
-
-from wok.plugins.kimchi import mockmodel
-
-import utils
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-
-
-def setUpModule():
- global test_server, model, host, port, ssl_port
-
- utils.patch_auth()
- model = mockmodel.MockModel('/tmp/obj-store-test')
- host = '127.0.0.1'
- port = utils.get_free_port('http')
- ssl_port = utils.get_free_port('https')
- test_server = utils.run_server(host, port, ssl_port, test_mode=True,
- model=model)
-
-
-def tearDownModule():
- test_server.stop()
- os.unlink('/tmp/obj-store-test')
-
-
-(a)unittest.skipUnless(
- 'sample' in [plugin for plugin, _config in get_enabled_plugins()],
- 'sample plugin is not enabled, skip this test!')
-class PluginTests(unittest.TestCase):
-
- def setUp(self):
- self.request = partial(utils.request, host, ssl_port)
-
- def _create_rectangle(self, name, length, width):
- req = json.dumps({'name': name, 'length': length, 'width': width})
- resp = self.request('/plugins/sample/rectangles', req, 'POST')
- return resp
-
- def _get_rectangle(self, name):
- resp = self.request('/plugins/sample/rectangles/%s' % name)
- return json.loads(resp.read())
-
- def _create_rectangle_and_assert(self, name, length, width):
- resp = self._create_rectangle(name, length, width)
- self.assertEquals(201, resp.status)
-
- rectangle = self._get_rectangle(name)
- self.assertEquals(rectangle['name'], name)
- self.assertEquals(rectangle['length'], length)
- self.assertEquals(rectangle['width'], width)
-
- def _get_rectangles_list(self):
- resp = self.request('/plugins/sample/rectangles')
- rectangles = json.loads(resp.read())
- name_list = [rectangle['name'] for rectangle in rectangles]
- return name_list
-
- def test_rectangles(self):
- # Create two new rectangles
- self._create_rectangle_and_assert('small', 10, 8)
- self._create_rectangle_and_assert('big', 20, 16)
-
- # Verify they're in the list
- name_list = self._get_rectangles_list()
- self.assertIn('small', name_list)
- self.assertIn('big', name_list)
-
- # Update the big rectangle.
- req = json.dumps({'length': 40, 'width': 30})
- resp = self.request('/plugins/sample/rectangles/big', req, 'PUT')
- self.assertEquals(200, resp.status)
- big = self._get_rectangle('big')
- self.assertEquals(big['length'], 40)
- self.assertEquals(big['width'], 30)
-
- # Delete two rectangles
- resp = self.request('/plugins/sample/rectangles/big', '{}', 'DELETE')
- self.assertEquals(204, resp.status)
- resp = self.request('/plugins/sample/rectangles/small', '{}', 'DELETE')
- self.assertEquals(204, resp.status)
- name_list = self._get_rectangles_list()
- self.assertEquals([], name_list)
-
- def test_bad_params(self):
- # Bad name
- resp = self._create_rectangle(1.0, 30, 40)
- self.assertEquals(400, resp.status)
-
- # Bad length value
- resp = self._create_rectangle('test', -10.0, 40)
- self.assertEquals(400, resp.status)
-
- # Missing param for width
- req = json.dumps({'name': 'nowidth', 'length': 40})
- resp = self.request('/plugins/sample/rectangles', req, 'POST')
- self.assertEquals(400, resp.status)
diff --git a/plugins/kimchi/tests/test_rollbackcontext.py b/plugins/kimchi/tests/test_rollbackcontext.py
deleted file mode 100644
index 6eac6d0..0000000
--- a/plugins/kimchi/tests/test_rollbackcontext.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import unittest
-
-from wok.rollbackcontext import RollbackContext
-
-
-class FirstError(Exception):
- '''A hypothetical exception to be raise in the test firstly.'''
- pass
-
-
-class SecondError(Exception):
- '''A hypothetical exception to be raise in the test secondly.'''
- pass
-
-
-class RollbackContextTests(unittest.TestCase):
-
- def setUp(self):
- self._counter = 0
-
- def _inc_counter(self):
- self._counter += 1
-
- def _raise(self, exception=FirstError):
- raise exception()
-
- def test_rollback(self):
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._inc_counter)
- self.assertEquals(self._counter, 2)
-
- def test_raise(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._inc_counter)
- raise FirstError()
- rollback.prependDefer(self._inc_counter)
- except FirstError:
- # All undo before the FirstError should be run
- self.assertEquals(self._counter, 2)
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_undo(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._inc_counter)
- rollback.prependDefer(self._raise)
- rollback.prependDefer(self._inc_counter)
- except FirstError:
- # All undo should be run
- self.assertEquals(self._counter, 2)
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_prefer_original(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._raise, SecondError)
- raise FirstError()
- except FirstError:
- pass
- except SecondError:
- self.fail('Should have preferred FirstError to SecondError')
- else:
- self.fail('Should have raised FirstError')
-
- def test_raise_prefer_first_undo(self):
- try:
- with RollbackContext() as rollback:
- rollback.prependDefer(self._raise, SecondError)
- rollback.prependDefer(self._raise, FirstError)
- except FirstError:
- pass
- except SecondError:
- self.fail('Should have preferred FirstError to SecondError')
- else:
- self.fail('Should have raised FirstError')
diff --git a/plugins/kimchi/tests/test_server.py b/plugins/kimchi/tests/test_server.py
deleted file mode 100644
index d5ef565..0000000
--- a/plugins/kimchi/tests/test_server.py
+++ /dev/null
@@ -1,289 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import base64
-import cherrypy
-import json
-import os
-import tempfile
-import threading
-import unittest
-from functools import partial
-
-from wok.control.base import Collection, Resource
-
-from wok.plugins.kimchi import mockmodel
-
-import utils
-
-
-test_server = None
-model = None
-host = None
-port = None
-ssl_port = None
-cherrypy_port = None
-tmpfile = None
-
-
-def setUpModule():
- global test_server, model, host, port, ssl_port, cherrypy_port, tmpfile
-
- utils.patch_auth()
- tmpfile = tempfile.mktemp()
- model = mockmodel.MockModel(tmpfile)
- host = '127.0.0.1'
- port = utils.get_free_port('http')
- ssl_port = utils.get_free_port('https')
- cherrypy_port = utils.get_free_port('cherrypy_port')
- test_server = utils.run_server(host, port, ssl_port, test_mode=True,
- cherrypy_port=cherrypy_port, model=model)
-
-
-def tearDownModule():
- test_server.stop()
- os.unlink(tmpfile)
-
-
-class ServerTests(unittest.TestCase):
- def setUp(self):
- self.request = partial(utils.request, host, ssl_port)
- model.reset()
-
- def assertValidJSON(self, txt):
- try:
- json.loads(txt)
- except ValueError:
- self.fail("Invalid JSON: %s" % txt)
-
- def test_server_start(self):
- """
- Test that we can start a server and receive HTTP:200.
- """
- resp = self.request('/')
- self.assertEquals(200, resp.status)
-
- def test_multithreaded_connection(self):
- def worker():
- for i in xrange(100):
- ret = model.vms_get_list()
- self.assertEquals('test', ret[0])
-
- threads = []
- for i in xrange(100):
- t = threading.Thread(target=worker)
- t.setDaemon(True)
- t.start()
- threads.append(t)
- for t in threads:
- t.join()
-
- def test_collection(self):
- c = Collection(model)
-
- # The base Collection is always empty
- cherrypy.request.method = 'GET'
- cherrypy.request.headers['Accept'] = 'application/json'
- self.assertEquals('[]', c.index())
-
- # POST and DELETE raise HTTP:405 by default
- for method in ('POST', 'DELETE'):
- cherrypy.request.method = method
- try:
- c.index()
- except cherrypy.HTTPError, e:
- self.assertEquals(405, e.code)
- else:
- self.fail("Expected exception not raised")
-
- def test_resource(self):
- r = Resource(model)
-
- # Test the base Resource representation
- cherrypy.request.method = 'GET'
- cherrypy.request.headers['Accept'] = 'application/json'
- self.assertEquals('{}', r.index())
-
- # POST and DELETE raise HTTP:405 by default
- for method in ('POST', 'DELETE'):
- cherrypy.request.method = method
- try:
- r.index()
- except cherrypy.HTTPError, e:
- self.assertEquals(405, e.code)
- else:
- self.fail("Expected exception not raised")
-
- def test_404(self):
- """
- A non-existent path should return HTTP:404
- """
- url_list = ['/plugins/kimchi/doesnotexist', '/plugins/kimchi/vms/blah']
- for url in url_list:
- resp = self.request(url)
- self.assertEquals(404, resp.status)
-
- # Verify it works for DELETE too
- resp = self.request('/plugins/kimchi/templates/blah', '', 'DELETE')
- self.assertEquals(404, resp.status)
-
- def test_accepts(self):
- """
- Verify the following expectations regarding the client Accept header:
- If omitted, default to html
- If 'application/json', serve the rest api
- If 'text/html', serve the UI
- If both of the above (in any order), serve the rest api
- If neither of the above, HTTP:406
- """
- resp = self.request("/", headers={})
- location = resp.getheader('location')
- self.assertTrue(location.endswith("login.html"))
- resp = self.request("/login.html", headers={})
- self.assertTrue('<!doctype html>' in resp.read().lower())
-
- resp = self.request("/", headers={'Accept': 'application/json'})
- self.assertValidJSON(resp.read())
-
- resp = self.request("/", headers={'Accept': 'text/html'})
- location = resp.getheader('location')
- self.assertTrue(location.endswith("login.html"))
-
- resp = self.request("/", headers={'Accept':
- 'application/json, text/html'})
- self.assertValidJSON(resp.read())
-
- resp = self.request("/", headers={'Accept':
- 'text/html, application/json'})
- self.assertValidJSON(resp.read())
-
- h = {'Accept': 'text/plain'}
- resp = self.request('/', None, 'GET', h)
- self.assertEquals(406, resp.status)
-
- def test_auth_unprotected(self):
- hdrs = {'AUTHORIZATION': ''}
- uris = ['/plugins/kimchi/js/kimchi.min.js',
- '/plugins/kimchi/css/theme-default.min.css',
- '/plugins/kimchi/images/icon-vm.png',
- '/libs/jquery-1.10.0.min.js',
- '/login.html',
- '/logout']
-
- for uri in uris:
- resp = self.request(uri, None, 'HEAD', hdrs)
- self.assertEquals(200, resp.status)
-
- def test_auth_protected(self):
- hdrs = {'AUTHORIZATION': ''}
- uris = ['/plugins/kimchi/vms',
- '/plugins/kimchi/vms/doesnotexist',
- '/tasks']
-
- for uri in uris:
- resp = self.request(uri, None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_auth_bad_creds(self):
- # Test HTTPBA
- hdrs = {'AUTHORIZATION': "Basic " + base64.b64encode("nouser:badpass")}
- resp = self.request('/plugins/kimchi/vms', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- # Test REST API
- hdrs = {'AUTHORIZATION': ''}
- req = json.dumps({'username': 'nouser', 'password': 'badpass'})
- resp = self.request('/login', req, 'POST', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_auth_browser_no_httpba(self):
- # Kimchi detects REST requests from the browser by looking for a
- # specific header
- hdrs = {"X-Requested-With": "XMLHttpRequest"}
-
- # Try our request (Note that request() will add a valid HTTPBA header)
- resp = self.request('/plugins/kimchi/vms', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
- self.assertEquals(None, resp.getheader('WWW-Authenticate'))
-
- def test_auth_session(self):
- hdrs = {'AUTHORIZATION': '',
- 'Content-Type': 'application/json',
- 'Accept': 'application/json'}
-
- # Test we are logged out
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- # Execute a login call
- user, pw = mockmodel.fake_user.items()[0]
- req = json.dumps({'username': user, 'password': pw})
- resp = self.request('/login', req, 'POST', hdrs)
- self.assertEquals(200, resp.status)
-
- user_info = json.loads(resp.read())
- self.assertEquals(sorted(user_info.keys()),
- ['groups', 'roles', 'username'])
- roles = user_info['roles']
- for tab, role in roles.iteritems():
- self.assertEquals(role, u'admin')
-
- cookie = resp.getheader('set-cookie')
- hdrs['Cookie'] = cookie
-
- # Test we are logged in with the cookie
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(200, resp.status)
-
- # Execute a logout call
- resp = self.request('/logout', '{}', 'POST', hdrs)
- self.assertEquals(200, resp.status)
- del hdrs['Cookie']
-
- # Test we are logged out
- resp = self.request('/tasks', None, 'GET', hdrs)
- self.assertEquals(401, resp.status)
-
- def test_get_param(self):
- # Create a mock ISO file
- mockiso = '/tmp/mock.iso'
- open('/tmp/mock.iso', 'w').close()
-
- # Create 2 different templates
- req = json.dumps({'name': 'test-tmpl1', 'cdrom': mockiso})
- self.request('/plugins/kimchi/templates', req, 'POST')
-
- req = json.dumps({'name': 'test-tmpl2', 'cdrom': mockiso})
- self.request('/plugins/kimchi/templates', req, 'POST')
-
- # Remove mock iso
- os.unlink(mockiso)
-
- # Get the templates
- resp = self.request('/plugins/kimchi/templates')
- self.assertEquals(200, resp.status)
- res = json.loads(resp.read())
- self.assertEquals(2, len(res))
-
- # Get a specific template
- resp = self.request('/plugins/kimchi/templates?name=test-tmpl1')
- self.assertEquals(200, resp.status)
- res = json.loads(resp.read())
- self.assertEquals(1, len(res))
- self.assertEquals('test-tmpl1', res[0]['name'])
diff --git a/plugins/kimchi/tests/test_utils.py b/plugins/kimchi/tests/test_utils.py
deleted file mode 100644
index bcb14e2..0000000
--- a/plugins/kimchi/tests/test_utils.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import unittest
-
-from wok.exception import InvalidParameter
-from wok.utils import convert_data_size
-
-
-class UtilsTests(unittest.TestCase):
- def test_convert_data_size(self):
- failure_data = [{'val': None, 'from': 'MiB'},
- {'val': self, 'from': 'MiB'},
- {'val': 1, 'from': None},
- {'val': 1, 'from': ''},
- {'val': 1, 'from': 'foo'},
- {'val': 1, 'from': 'kib'},
- {'val': 1, 'from': 'MiB', 'to': None},
- {'val': 1, 'from': 'MiB', 'to': ''},
- {'val': 1, 'from': 'MiB', 'to': 'foo'},
- {'val': 1, 'from': 'MiB', 'to': 'kib'}]
-
- for d in failure_data:
- if 'to' in d:
- self.assertRaises(InvalidParameter, convert_data_size,
- d['val'], d['from'], d['to'])
- else:
- self.assertRaises(InvalidParameter, convert_data_size,
- d['val'], d['from'])
-
- success_data = [{'got': convert_data_size(5, 'MiB', 'MiB'),
- 'want': 5},
- {'got': convert_data_size(5, 'MiB', 'KiB'),
- 'want': 5120},
- {'got': convert_data_size(5, 'MiB', 'M'),
- 'want': 5.24288},
- {'got': convert_data_size(5, 'MiB', 'GiB'),
- 'want': 0.0048828125},
- {'got': convert_data_size(5, 'MiB', 'Tb'),
- 'want': 4.194304e-05},
- {'got': convert_data_size(5, 'KiB', 'MiB'),
- 'want': 0.0048828125},
- {'got': convert_data_size(5, 'M', 'MiB'),
- 'want': 4.76837158203125},
- {'got': convert_data_size(5, 'GiB', 'MiB'),
- 'want': 5120},
- {'got': convert_data_size(5, 'Tb', 'MiB'),
- 'want': 596046.4477539062},
- {'got': convert_data_size(5, 'MiB'),
- 'want': convert_data_size(5, 'MiB', 'B')}]
-
- for d in success_data:
- self.assertEquals(d['got'], d['want'])
diff --git a/src/wok/plugins/kimchi/tests/test_exception.py b/src/wok/plugins/kimchi/tests/test_exception.py
new file mode 100644
index 0000000..4459aa6
--- /dev/null
+++ b/src/wok/plugins/kimchi/tests/test_exception.py
@@ -0,0 +1,123 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import os
+import unittest
+
+from wok.plugins.kimchi import mockmodel
+
+from utils import get_free_port, patch_auth, request, run_server
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+
+
+def setup_server(environment='development'):
+ global test_server, model, host, port, ssl_port
+
+ patch_auth()
+ model = mockmodel.MockModel('/tmp/obj-store-test')
+ host = '127.0.0.1'
+ port = get_free_port('http')
+ ssl_port = get_free_port('https')
+ test_server = run_server(host, port, ssl_port, test_mode=True, model=model,
+ environment=environment)
+
+
+class ExceptionTests(unittest.TestCase):
+ def tearDown(self):
+ test_server.stop()
+ os.unlink('/tmp/obj-store-test')
+
+ def test_production_env(self):
+ """
+ Test reasons sanitized in production env
+ """
+ setup_server('production')
+ # test 404
+ resp = json.loads(
+ request(host, ssl_port, '/plugins/kimchi/vms/blah').read()
+ )
+ self.assertEquals('404 Not Found', resp.get('code'))
+
+ # test 405 wrong method
+ resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
+ msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+
+ # test 400 parse error
+ resp = json.loads(
+ request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
+ )
+ msg = u'WOKAPI0006E: Unable to parse JSON request'
+ self.assertEquals('400 Bad Request', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+ self.assertNotIn('call_stack', resp)
+
+ # test 400 missing required parameter
+ req = json.dumps({})
+ resp = json.loads(
+ request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST').read()
+ )
+ self.assertEquals('400 Bad Request', resp.get('code'))
+ m = u"KCHVM0016E: Specify a template to create a virtual machine from"
+ self.assertEquals(m, resp.get('reason'))
+ self.assertNotIn('call_stack', resp)
+
+ def test_development_env(self):
+ """
+ Test traceback thrown in development env
+ """
+ setup_server()
+ # test 404
+ resp = json.loads(
+ request(host, ssl_port, '/plugins/kimchi/vms/blah').read()
+ )
+ self.assertEquals('404 Not Found', resp.get('code'))
+
+ # test 405 wrong method
+ resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
+ msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
+ self.assertEquals('405 Method Not Allowed', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+
+ # test 400 parse error
+ resp = json.loads(
+ request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
+ )
+ msg = u'WOKAPI0006E: Unable to parse JSON request'
+ self.assertEquals('400 Bad Request', resp.get('code'))
+ self.assertEquals(msg, resp.get('reason'))
+ self.assertIn('call_stack', resp)
+
+ # test 400 missing required parameter
+ req = json.dumps({})
+ resp = json.loads(
+ request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST').read()
+ )
+ m = u"KCHVM0016E: Specify a template to create a virtual machine from"
+ self.assertEquals('400 Bad Request', resp.get('code'))
+ self.assertEquals(m, resp.get('reason'))
+ self.assertIn('call_stack', resp)
diff --git a/src/wok/plugins/kimchi/tests/test_objectstore.py b/src/wok/plugins/kimchi/tests/test_objectstore.py
new file mode 100644
index 0000000..632786f
--- /dev/null
+++ b/src/wok/plugins/kimchi/tests/test_objectstore.py
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+import tempfile
+import threading
+import unittest
+
+from wok import objectstore
+from wok.exception import NotFoundError
+
+
+tmpfile = None
+
+
+def setUpModule():
+ global tmpfile
+ tmpfile = tempfile.mktemp()
+
+
+def tearDownModule():
+ os.unlink(tmpfile)
+
+
+class ObjectStoreTests(unittest.TestCase):
+ def test_objectstore(self):
+ store = objectstore.ObjectStore(tmpfile)
+
+ with store as session:
+ # Test create
+ session.store('fǒǒ', 'těst1', {'α': 1})
+ session.store('fǒǒ', 'těst2', {'β': 2})
+
+ # Test list
+ items = session.get_list('fǒǒ')
+ self.assertTrue(u'těst1' in items)
+ self.assertTrue(u'těst2' in items)
+
+ # Test get
+ item = session.get('fǒǒ', 'těst1')
+ self.assertEquals(1, item[u'α'])
+
+ # Test delete
+ session.delete('fǒǒ', 'těst2')
+ self.assertEquals(1, len(session.get_list('fǒǒ')))
+
+ # Test get non-existent item
+
+ self.assertRaises(NotFoundError, session.get,
+ 'α', 'β')
+
+ # Test delete non-existent item
+ self.assertRaises(NotFoundError, session.delete,
+ 'fǒǒ', 'těst2')
+
+ # Test refresh existing item
+ session.store('fǒǒ', 'těst1', {'α': 2})
+ item = session.get('fǒǒ', 'těst1')
+ self.assertEquals(2, item[u'α'])
+
+ def test_object_store_threaded(self):
+ def worker(ident):
+ with store as session:
+ session.store('foo', ident, {})
+
+ store = objectstore.ObjectStore(tmpfile)
+
+ threads = []
+ for i in xrange(50):
+ t = threading.Thread(target=worker, args=(i,))
+ t.setDaemon(True)
+ t.start()
+ threads.append(t)
+
+ for t in threads:
+ t.join()
+
+ with store as session:
+ self.assertEquals(50, len(session.get_list('foo')))
+ self.assertEquals(10, len(store._connections.keys()))
diff --git a/src/wok/plugins/kimchi/tests/test_plugin.py b/src/wok/plugins/kimchi/tests/test_plugin.py
new file mode 100644
index 0000000..fc8e277
--- /dev/null
+++ b/src/wok/plugins/kimchi/tests/test_plugin.py
@@ -0,0 +1,126 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import os
+import unittest
+from functools import partial
+
+from wok.utils import get_enabled_plugins
+
+from wok.plugins.kimchi import mockmodel
+
+import utils
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+
+
+def setUpModule():
+ global test_server, model, host, port, ssl_port
+
+ utils.patch_auth()
+ model = mockmodel.MockModel('/tmp/obj-store-test')
+ host = '127.0.0.1'
+ port = utils.get_free_port('http')
+ ssl_port = utils.get_free_port('https')
+ test_server = utils.run_server(host, port, ssl_port, test_mode=True,
+ model=model)
+
+
+def tearDownModule():
+ test_server.stop()
+ os.unlink('/tmp/obj-store-test')
+
+
+(a)unittest.skipUnless(
+ 'sample' in [plugin for plugin, _config in get_enabled_plugins()],
+ 'sample plugin is not enabled, skip this test!')
+class PluginTests(unittest.TestCase):
+
+ def setUp(self):
+ self.request = partial(utils.request, host, ssl_port)
+
+ def _create_rectangle(self, name, length, width):
+ req = json.dumps({'name': name, 'length': length, 'width': width})
+ resp = self.request('/plugins/sample/rectangles', req, 'POST')
+ return resp
+
+ def _get_rectangle(self, name):
+ resp = self.request('/plugins/sample/rectangles/%s' % name)
+ return json.loads(resp.read())
+
+ def _create_rectangle_and_assert(self, name, length, width):
+ resp = self._create_rectangle(name, length, width)
+ self.assertEquals(201, resp.status)
+
+ rectangle = self._get_rectangle(name)
+ self.assertEquals(rectangle['name'], name)
+ self.assertEquals(rectangle['length'], length)
+ self.assertEquals(rectangle['width'], width)
+
+ def _get_rectangles_list(self):
+ resp = self.request('/plugins/sample/rectangles')
+ rectangles = json.loads(resp.read())
+ name_list = [rectangle['name'] for rectangle in rectangles]
+ return name_list
+
+ def test_rectangles(self):
+ # Create two new rectangles
+ self._create_rectangle_and_assert('small', 10, 8)
+ self._create_rectangle_and_assert('big', 20, 16)
+
+ # Verify they're in the list
+ name_list = self._get_rectangles_list()
+ self.assertIn('small', name_list)
+ self.assertIn('big', name_list)
+
+ # Update the big rectangle.
+ req = json.dumps({'length': 40, 'width': 30})
+ resp = self.request('/plugins/sample/rectangles/big', req, 'PUT')
+ self.assertEquals(200, resp.status)
+ big = self._get_rectangle('big')
+ self.assertEquals(big['length'], 40)
+ self.assertEquals(big['width'], 30)
+
+ # Delete two rectangles
+ resp = self.request('/plugins/sample/rectangles/big', '{}', 'DELETE')
+ self.assertEquals(204, resp.status)
+ resp = self.request('/plugins/sample/rectangles/small', '{}', 'DELETE')
+ self.assertEquals(204, resp.status)
+ name_list = self._get_rectangles_list()
+ self.assertEquals([], name_list)
+
+ def test_bad_params(self):
+ # Bad name
+ resp = self._create_rectangle(1.0, 30, 40)
+ self.assertEquals(400, resp.status)
+
+ # Bad length value
+ resp = self._create_rectangle('test', -10.0, 40)
+ self.assertEquals(400, resp.status)
+
+ # Missing param for width
+ req = json.dumps({'name': 'nowidth', 'length': 40})
+ resp = self.request('/plugins/sample/rectangles', req, 'POST')
+ self.assertEquals(400, resp.status)
diff --git a/src/wok/plugins/kimchi/tests/test_rollbackcontext.py b/src/wok/plugins/kimchi/tests/test_rollbackcontext.py
new file mode 100644
index 0000000..6eac6d0
--- /dev/null
+++ b/src/wok/plugins/kimchi/tests/test_rollbackcontext.py
@@ -0,0 +1,99 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+
+from wok.rollbackcontext import RollbackContext
+
+
+class FirstError(Exception):
+ '''A hypothetical exception to be raise in the test firstly.'''
+ pass
+
+
+class SecondError(Exception):
+ '''A hypothetical exception to be raise in the test secondly.'''
+ pass
+
+
+class RollbackContextTests(unittest.TestCase):
+
+ def setUp(self):
+ self._counter = 0
+
+ def _inc_counter(self):
+ self._counter += 1
+
+ def _raise(self, exception=FirstError):
+ raise exception()
+
+ def test_rollback(self):
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._inc_counter)
+ self.assertEquals(self._counter, 2)
+
+ def test_raise(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._inc_counter)
+ raise FirstError()
+ rollback.prependDefer(self._inc_counter)
+ except FirstError:
+ # All undo before the FirstError should be run
+ self.assertEquals(self._counter, 2)
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_undo(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._inc_counter)
+ rollback.prependDefer(self._raise)
+ rollback.prependDefer(self._inc_counter)
+ except FirstError:
+ # All undo should be run
+ self.assertEquals(self._counter, 2)
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_prefer_original(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._raise, SecondError)
+ raise FirstError()
+ except FirstError:
+ pass
+ except SecondError:
+ self.fail('Should have preferred FirstError to SecondError')
+ else:
+ self.fail('Should have raised FirstError')
+
+ def test_raise_prefer_first_undo(self):
+ try:
+ with RollbackContext() as rollback:
+ rollback.prependDefer(self._raise, SecondError)
+ rollback.prependDefer(self._raise, FirstError)
+ except FirstError:
+ pass
+ except SecondError:
+ self.fail('Should have preferred FirstError to SecondError')
+ else:
+ self.fail('Should have raised FirstError')
diff --git a/src/wok/plugins/kimchi/tests/test_server.py b/src/wok/plugins/kimchi/tests/test_server.py
new file mode 100644
index 0000000..d5ef565
--- /dev/null
+++ b/src/wok/plugins/kimchi/tests/test_server.py
@@ -0,0 +1,289 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import base64
+import cherrypy
+import json
+import os
+import tempfile
+import threading
+import unittest
+from functools import partial
+
+from wok.control.base import Collection, Resource
+
+from wok.plugins.kimchi import mockmodel
+
+import utils
+
+
+test_server = None
+model = None
+host = None
+port = None
+ssl_port = None
+cherrypy_port = None
+tmpfile = None
+
+
+def setUpModule():
+ global test_server, model, host, port, ssl_port, cherrypy_port, tmpfile
+
+ utils.patch_auth()
+ tmpfile = tempfile.mktemp()
+ model = mockmodel.MockModel(tmpfile)
+ host = '127.0.0.1'
+ port = utils.get_free_port('http')
+ ssl_port = utils.get_free_port('https')
+ cherrypy_port = utils.get_free_port('cherrypy_port')
+ test_server = utils.run_server(host, port, ssl_port, test_mode=True,
+ cherrypy_port=cherrypy_port, model=model)
+
+
+def tearDownModule():
+ test_server.stop()
+ os.unlink(tmpfile)
+
+
+class ServerTests(unittest.TestCase):
+ def setUp(self):
+ self.request = partial(utils.request, host, ssl_port)
+ model.reset()
+
+ def assertValidJSON(self, txt):
+ try:
+ json.loads(txt)
+ except ValueError:
+ self.fail("Invalid JSON: %s" % txt)
+
+ def test_server_start(self):
+ """
+ Test that we can start a server and receive HTTP:200.
+ """
+ resp = self.request('/')
+ self.assertEquals(200, resp.status)
+
+ def test_multithreaded_connection(self):
+ def worker():
+ for i in xrange(100):
+ ret = model.vms_get_list()
+ self.assertEquals('test', ret[0])
+
+ threads = []
+ for i in xrange(100):
+ t = threading.Thread(target=worker)
+ t.setDaemon(True)
+ t.start()
+ threads.append(t)
+ for t in threads:
+ t.join()
+
+ def test_collection(self):
+ c = Collection(model)
+
+ # The base Collection is always empty
+ cherrypy.request.method = 'GET'
+ cherrypy.request.headers['Accept'] = 'application/json'
+ self.assertEquals('[]', c.index())
+
+ # POST and DELETE raise HTTP:405 by default
+ for method in ('POST', 'DELETE'):
+ cherrypy.request.method = method
+ try:
+ c.index()
+ except cherrypy.HTTPError, e:
+ self.assertEquals(405, e.code)
+ else:
+ self.fail("Expected exception not raised")
+
+ def test_resource(self):
+ r = Resource(model)
+
+ # Test the base Resource representation
+ cherrypy.request.method = 'GET'
+ cherrypy.request.headers['Accept'] = 'application/json'
+ self.assertEquals('{}', r.index())
+
+ # POST and DELETE raise HTTP:405 by default
+ for method in ('POST', 'DELETE'):
+ cherrypy.request.method = method
+ try:
+ r.index()
+ except cherrypy.HTTPError, e:
+ self.assertEquals(405, e.code)
+ else:
+ self.fail("Expected exception not raised")
+
+ def test_404(self):
+ """
+ A non-existent path should return HTTP:404
+ """
+ url_list = ['/plugins/kimchi/doesnotexist', '/plugins/kimchi/vms/blah']
+ for url in url_list:
+ resp = self.request(url)
+ self.assertEquals(404, resp.status)
+
+ # Verify it works for DELETE too
+ resp = self.request('/plugins/kimchi/templates/blah', '', 'DELETE')
+ self.assertEquals(404, resp.status)
+
+ def test_accepts(self):
+ """
+ Verify the following expectations regarding the client Accept header:
+ If omitted, default to html
+ If 'application/json', serve the rest api
+ If 'text/html', serve the UI
+ If both of the above (in any order), serve the rest api
+ If neither of the above, HTTP:406
+ """
+ resp = self.request("/", headers={})
+ location = resp.getheader('location')
+ self.assertTrue(location.endswith("login.html"))
+ resp = self.request("/login.html", headers={})
+ self.assertTrue('<!doctype html>' in resp.read().lower())
+
+ resp = self.request("/", headers={'Accept': 'application/json'})
+ self.assertValidJSON(resp.read())
+
+ resp = self.request("/", headers={'Accept': 'text/html'})
+ location = resp.getheader('location')
+ self.assertTrue(location.endswith("login.html"))
+
+ resp = self.request("/", headers={'Accept':
+ 'application/json, text/html'})
+ self.assertValidJSON(resp.read())
+
+ resp = self.request("/", headers={'Accept':
+ 'text/html, application/json'})
+ self.assertValidJSON(resp.read())
+
+ h = {'Accept': 'text/plain'}
+ resp = self.request('/', None, 'GET', h)
+ self.assertEquals(406, resp.status)
+
+ def test_auth_unprotected(self):
+ hdrs = {'AUTHORIZATION': ''}
+ uris = ['/plugins/kimchi/js/kimchi.min.js',
+ '/plugins/kimchi/css/theme-default.min.css',
+ '/plugins/kimchi/images/icon-vm.png',
+ '/libs/jquery-1.10.0.min.js',
+ '/login.html',
+ '/logout']
+
+ for uri in uris:
+ resp = self.request(uri, None, 'HEAD', hdrs)
+ self.assertEquals(200, resp.status)
+
+ def test_auth_protected(self):
+ hdrs = {'AUTHORIZATION': ''}
+ uris = ['/plugins/kimchi/vms',
+ '/plugins/kimchi/vms/doesnotexist',
+ '/tasks']
+
+ for uri in uris:
+ resp = self.request(uri, None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ def test_auth_bad_creds(self):
+ # Test HTTPBA
+ hdrs = {'AUTHORIZATION': "Basic " + base64.b64encode("nouser:badpass")}
+ resp = self.request('/plugins/kimchi/vms', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ # Test REST API
+ hdrs = {'AUTHORIZATION': ''}
+ req = json.dumps({'username': 'nouser', 'password': 'badpass'})
+ resp = self.request('/login', req, 'POST', hdrs)
+ self.assertEquals(401, resp.status)
+
+ def test_auth_browser_no_httpba(self):
+ # Kimchi detects REST requests from the browser by looking for a
+ # specific header
+ hdrs = {"X-Requested-With": "XMLHttpRequest"}
+
+ # Try our request (Note that request() will add a valid HTTPBA header)
+ resp = self.request('/plugins/kimchi/vms', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+ self.assertEquals(None, resp.getheader('WWW-Authenticate'))
+
+ def test_auth_session(self):
+ hdrs = {'AUTHORIZATION': '',
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'}
+
+ # Test we are logged out
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ # Execute a login call
+ user, pw = mockmodel.fake_user.items()[0]
+ req = json.dumps({'username': user, 'password': pw})
+ resp = self.request('/login', req, 'POST', hdrs)
+ self.assertEquals(200, resp.status)
+
+ user_info = json.loads(resp.read())
+ self.assertEquals(sorted(user_info.keys()),
+ ['groups', 'roles', 'username'])
+ roles = user_info['roles']
+ for tab, role in roles.iteritems():
+ self.assertEquals(role, u'admin')
+
+ cookie = resp.getheader('set-cookie')
+ hdrs['Cookie'] = cookie
+
+ # Test we are logged in with the cookie
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(200, resp.status)
+
+ # Execute a logout call
+ resp = self.request('/logout', '{}', 'POST', hdrs)
+ self.assertEquals(200, resp.status)
+ del hdrs['Cookie']
+
+ # Test we are logged out
+ resp = self.request('/tasks', None, 'GET', hdrs)
+ self.assertEquals(401, resp.status)
+
+ def test_get_param(self):
+ # Create a mock ISO file
+ mockiso = '/tmp/mock.iso'
+ open('/tmp/mock.iso', 'w').close()
+
+ # Create 2 different templates
+ req = json.dumps({'name': 'test-tmpl1', 'cdrom': mockiso})
+ self.request('/plugins/kimchi/templates', req, 'POST')
+
+ req = json.dumps({'name': 'test-tmpl2', 'cdrom': mockiso})
+ self.request('/plugins/kimchi/templates', req, 'POST')
+
+ # Remove mock iso
+ os.unlink(mockiso)
+
+ # Get the templates
+ resp = self.request('/plugins/kimchi/templates')
+ self.assertEquals(200, resp.status)
+ res = json.loads(resp.read())
+ self.assertEquals(2, len(res))
+
+ # Get a specific template
+ resp = self.request('/plugins/kimchi/templates?name=test-tmpl1')
+ self.assertEquals(200, resp.status)
+ res = json.loads(resp.read())
+ self.assertEquals(1, len(res))
+ self.assertEquals('test-tmpl1', res[0]['name'])
diff --git a/src/wok/plugins/kimchi/tests/test_utils.py b/src/wok/plugins/kimchi/tests/test_utils.py
new file mode 100644
index 0000000..bcb14e2
--- /dev/null
+++ b/src/wok/plugins/kimchi/tests/test_utils.py
@@ -0,0 +1,69 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+
+from wok.exception import InvalidParameter
+from wok.utils import convert_data_size
+
+
+class UtilsTests(unittest.TestCase):
+ def test_convert_data_size(self):
+ failure_data = [{'val': None, 'from': 'MiB'},
+ {'val': self, 'from': 'MiB'},
+ {'val': 1, 'from': None},
+ {'val': 1, 'from': ''},
+ {'val': 1, 'from': 'foo'},
+ {'val': 1, 'from': 'kib'},
+ {'val': 1, 'from': 'MiB', 'to': None},
+ {'val': 1, 'from': 'MiB', 'to': ''},
+ {'val': 1, 'from': 'MiB', 'to': 'foo'},
+ {'val': 1, 'from': 'MiB', 'to': 'kib'}]
+
+ for d in failure_data:
+ if 'to' in d:
+ self.assertRaises(InvalidParameter, convert_data_size,
+ d['val'], d['from'], d['to'])
+ else:
+ self.assertRaises(InvalidParameter, convert_data_size,
+ d['val'], d['from'])
+
+ success_data = [{'got': convert_data_size(5, 'MiB', 'MiB'),
+ 'want': 5},
+ {'got': convert_data_size(5, 'MiB', 'KiB'),
+ 'want': 5120},
+ {'got': convert_data_size(5, 'MiB', 'M'),
+ 'want': 5.24288},
+ {'got': convert_data_size(5, 'MiB', 'GiB'),
+ 'want': 0.0048828125},
+ {'got': convert_data_size(5, 'MiB', 'Tb'),
+ 'want': 4.194304e-05},
+ {'got': convert_data_size(5, 'KiB', 'MiB'),
+ 'want': 0.0048828125},
+ {'got': convert_data_size(5, 'M', 'MiB'),
+ 'want': 4.76837158203125},
+ {'got': convert_data_size(5, 'GiB', 'MiB'),
+ 'want': 5120},
+ {'got': convert_data_size(5, 'Tb', 'MiB'),
+ 'want': 596046.4477539062},
+ {'got': convert_data_size(5, 'MiB'),
+ 'want': convert_data_size(5, 'MiB', 'B')}]
+
+ for d in success_data:
+ self.assertEquals(d['got'], d['want'])
--
2.4.3
2
1
30 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
This patch-set moves the plugins structure to a new path inside src/wok, and fix
and modify all necessary build, config and code files to use the new structure.
In addition, fix all bugs related to build and install Wok and Kimchi in the
system and generate the necessary RPM and DEB files.
Paulo Vital (5):
Move plugins directory to src/wok structure.
Change relative to absolute imports in Kimchi.
Update build and config files to new plugins path.
Make dynamic the state_dir path in Kimchi.
Adding COPYING and CONTRIBUTE files into Kimchi.
Makefile.am | 20 +-
configure.ac | 16 +-
plugins/Makefile.am | 25 -
plugins/__init__.py | 18 -
plugins/kimchi/.gitignore | 37 -
plugins/kimchi/API.json | 836 -------
plugins/kimchi/INSTALL | 369 ---
plugins/kimchi/Makefile.am | 161 --
plugins/kimchi/README.md | 1 -
plugins/kimchi/VERSION | 1 -
plugins/kimchi/__init__.py | 21 -
plugins/kimchi/autogen.sh | 21 -
plugins/kimchi/build-aux/config.rpath | 672 ------
plugins/kimchi/build-aux/genChangelog | 25 -
plugins/kimchi/build-aux/pkg-version | 59 -
plugins/kimchi/config.py.in | 144 --
plugins/kimchi/config.rpath | 672 ------
plugins/kimchi/configure.ac | 119 -
plugins/kimchi/contrib/DEBIAN/Makefile.am | 17 -
plugins/kimchi/contrib/DEBIAN/control.in | 30 -
plugins/kimchi/contrib/Makefile.am | 34 -
plugins/kimchi/contrib/check_i18n.py | 82 -
plugins/kimchi/contrib/kimchi.spec.fedora.in | 119 -
plugins/kimchi/contrib/kimchi.spec.suse.in | 107 -
plugins/kimchi/contrib/make-deb.sh.in | 15 -
plugins/kimchi/control/Makefile.am | 27 -
plugins/kimchi/control/__init__.py | 26 -
plugins/kimchi/control/config.py | 57 -
plugins/kimchi/control/cpuinfo.py | 37 -
plugins/kimchi/control/debugreports.py | 61 -
plugins/kimchi/control/groups.py | 28 -
plugins/kimchi/control/host.py | 157 --
plugins/kimchi/control/interfaces.py | 46 -
plugins/kimchi/control/networks.py | 54 -
plugins/kimchi/control/peers.py | 29 -
plugins/kimchi/control/storagepools.py | 116 -
plugins/kimchi/control/storageservers.py | 60 -
plugins/kimchi/control/storagevolumes.py | 83 -
plugins/kimchi/control/templates.py | 58 -
plugins/kimchi/control/users.py | 35 -
plugins/kimchi/control/vm/Makefile.am | 26 -
plugins/kimchi/control/vm/__init__.py | 26 -
plugins/kimchi/control/vm/hostdevs.py | 43 -
plugins/kimchi/control/vm/ifaces.py | 45 -
plugins/kimchi/control/vm/snapshots.py | 58 -
plugins/kimchi/control/vm/storages.py | 45 -
plugins/kimchi/control/vms.py | 67 -
plugins/kimchi/disks.py | 196 --
plugins/kimchi/distroloader.py | 67 -
plugins/kimchi/distros.d/Makefile.am | 22 -
plugins/kimchi/distros.d/debian.json | 9 -
plugins/kimchi/distros.d/fedora.json | 30 -
plugins/kimchi/distros.d/gentoo.json | 9 -
plugins/kimchi/distros.d/opensuse.json | 23 -
plugins/kimchi/distros.d/ubuntu.json | 37 -
plugins/kimchi/docs/API.md | 1116 ---------
plugins/kimchi/docs/Makefile.am | 28 -
plugins/kimchi/docs/README-federation.md | 60 -
plugins/kimchi/docs/README.md | 247 --
plugins/kimchi/docs/kimchi-guest.png | Bin 192281 -> 0 bytes
plugins/kimchi/docs/kimchi-login.png | Bin 318041 -> 0 bytes
plugins/kimchi/docs/kimchi-templates.png | Bin 329678 -> 0 bytes
plugins/kimchi/i18n.py | 335 ---
plugins/kimchi/imageinfo.py | 72 -
plugins/kimchi/iscsi.py | 88 -
plugins/kimchi/isoinfo.py | 506 -----
plugins/kimchi/kimchi.conf | 37 -
plugins/kimchi/kvmusertests.py | 79 -
plugins/kimchi/m4/ac_python_module.m4 | 30 -
plugins/kimchi/m4/gettext.m4 | 383 ----
plugins/kimchi/m4/iconv.m4 | 214 --
plugins/kimchi/m4/intlmacosx.m4 | 51 -
plugins/kimchi/m4/lib-ld.m4 | 110 -
plugins/kimchi/m4/lib-link.m4 | 774 -------
plugins/kimchi/m4/lib-prefix.m4 | 224 --
plugins/kimchi/m4/nls.m4 | 32 -
plugins/kimchi/m4/po.m4 | 449 ----
plugins/kimchi/m4/progtest.m4 | 92 -
plugins/kimchi/mockmodel.py | 627 ------
plugins/kimchi/model/Makefile.am | 25 -
plugins/kimchi/model/__init__.py | 18 -
plugins/kimchi/model/config.py | 176 --
plugins/kimchi/model/cpuinfo.py | 126 --
plugins/kimchi/model/debugreports.py | 213 --
plugins/kimchi/model/diskutils.py | 75 -
plugins/kimchi/model/featuretests.py | 259 ---
plugins/kimchi/model/groups.py | 67 -
plugins/kimchi/model/host.py | 476 ----
plugins/kimchi/model/hostdev.py | 324 ---
plugins/kimchi/model/interfaces.py | 44 -
plugins/kimchi/model/libvirtconnection.py | 136 --
plugins/kimchi/model/libvirtstoragepool.py | 264 ---
plugins/kimchi/model/model.py | 52 -
plugins/kimchi/model/networks.py | 382 ----
plugins/kimchi/model/peers.py | 72 -
plugins/kimchi/model/storagepools.py | 490 ----
plugins/kimchi/model/storageservers.py | 81 -
plugins/kimchi/model/storagetargets.py | 122 -
plugins/kimchi/model/storagevolumes.py | 542 -----
plugins/kimchi/model/templates.py | 303 ---
plugins/kimchi/model/users.py | 90 -
plugins/kimchi/model/utils.py | 161 --
plugins/kimchi/model/vmhostdevs.py | 336 ---
plugins/kimchi/model/vmifaces.py | 186 --
plugins/kimchi/model/vms.py | 1307 -----------
plugins/kimchi/model/vmsnapshots.py | 204 --
plugins/kimchi/model/vmstorages.py | 252 ---
plugins/kimchi/netinfo.py | 216 --
plugins/kimchi/network.py | 62 -
plugins/kimchi/osinfo.py | 213 --
plugins/kimchi/po/LINGUAS | 11 -
plugins/kimchi/po/Makefile.in.in | 398 ----
plugins/kimchi/po/Makevars | 41 -
plugins/kimchi/po/POTFILES.in | 3 -
plugins/kimchi/po/de_DE.po | 2288 -------------------
plugins/kimchi/po/en_US.po | 2075 -----------------
plugins/kimchi/po/es_ES.po | 2305 -------------------
plugins/kimchi/po/fr_FR.po | 2338 -------------------
plugins/kimchi/po/gen-pot.in | 9 -
plugins/kimchi/po/it_IT.po | 2274 -------------------
plugins/kimchi/po/ja_JP.po | 2269 -------------------
plugins/kimchi/po/kimchi.pot | 2074 -----------------
plugins/kimchi/po/ko_KR.po | 2197 ------------------
plugins/kimchi/po/pt_BR.po | 2369 --------------------
plugins/kimchi/po/ru_RU.po | 2198 ------------------
plugins/kimchi/po/zh_CN.po | 2186 ------------------
plugins/kimchi/po/zh_TW.po | 2138 ------------------
plugins/kimchi/repositories.py | 529 -----
plugins/kimchi/root.py | 69 -
plugins/kimchi/scan.py | 89 -
plugins/kimchi/screenshot.py | 184 --
plugins/kimchi/swupdate.py | 263 ---
plugins/kimchi/template.conf | 47 -
plugins/kimchi/tests/Makefile.am | 50 -
plugins/kimchi/tests/iso_gen.py | 212 --
plugins/kimchi/tests/run_tests.sh.in | 55 -
plugins/kimchi/tests/test_authorization.py | 178 --
plugins/kimchi/tests/test_config.py.in | 267 ---
plugins/kimchi/tests/test_host.py | 206 --
plugins/kimchi/tests/test_mock_network.py | 73 -
plugins/kimchi/tests/test_mock_storagepool.py | 147 --
plugins/kimchi/tests/test_mock_storagevolume.py | 98 -
plugins/kimchi/tests/test_mockmodel.py | 141 --
plugins/kimchi/tests/test_model.py | 1248 -----------
plugins/kimchi/tests/test_model_network.py | 149 --
plugins/kimchi/tests/test_model_storagepool.py | 123 -
plugins/kimchi/tests/test_model_storagevolume.py | 280 ---
plugins/kimchi/tests/test_networkxml.py | 172 --
plugins/kimchi/tests/test_osinfo.py | 69 -
plugins/kimchi/tests/test_rest.py | 1327 -----------
plugins/kimchi/tests/test_storagepoolxml.py | 171 --
plugins/kimchi/tests/test_template.py | 387 ----
plugins/kimchi/tests/test_vmtemplate.py | 116 -
plugins/kimchi/tests/test_yumparser.py | 162 --
plugins/kimchi/tests/utils.py | 260 ---
plugins/kimchi/ui/Makefile.am | 20 -
plugins/kimchi/ui/config/Makefile.am | 22 -
plugins/kimchi/ui/config/tab-ext.xml | 38 -
plugins/kimchi/ui/css/Makefile.am | 26 -
plugins/kimchi/ui/css/theme-default/guest-edit.css | 424 ----
.../ui/css/theme-default/guest-storage-add.css | 81 -
plugins/kimchi/ui/css/theme-default/host.css | 287 ---
plugins/kimchi/ui/css/theme-default/icon.css | 106 -
plugins/kimchi/ui/css/theme-default/list.css | 326 ---
plugins/kimchi/ui/css/theme-default/network.css | 267 ---
plugins/kimchi/ui/css/theme-default/report-add.css | 37 -
.../kimchi/ui/css/theme-default/report-rename.css | 39 -
.../kimchi/ui/css/theme-default/repository-add.css | 42 -
.../ui/css/theme-default/repository-edit.css | 88 -
plugins/kimchi/ui/css/theme-default/storage.css | 550 -----
.../css/theme-default/storagepool-add-volume.css | 36 -
.../kimchi/ui/css/theme-default/template-edit.css | 175 --
plugins/kimchi/ui/css/theme-default/template.css | 85 -
.../kimchi/ui/css/theme-default/template_add.css | 317 ---
.../kimchi/ui/css/theme-default/template_list.css | 267 ---
plugins/kimchi/ui/images/Makefile.am | 22 -
plugins/kimchi/ui/images/icon-centos.png | Bin 4734 -> 0 bytes
plugins/kimchi/ui/images/icon-debian.png | Bin 4239 -> 0 bytes
plugins/kimchi/ui/images/icon-fedora.png | Bin 4449 -> 0 bytes
plugins/kimchi/ui/images/icon-gentoo.png | Bin 15307 -> 0 bytes
plugins/kimchi/ui/images/icon-opensuse.png | Bin 3046 -> 0 bytes
plugins/kimchi/ui/images/icon-ubuntu.png | Bin 4818 -> 0 bytes
plugins/kimchi/ui/images/icon-vm.png | Bin 2976 -> 0 bytes
plugins/kimchi/ui/images/theme-default/Makefile.am | 20 -
.../kimchi/ui/images/theme-default/ac22_pause.png | Bin 1219 -> 0 bytes
.../ui/images/theme-default/ac22_pause_grey.png | Bin 1175 -> 0 bytes
.../kimchi/ui/images/theme-default/ac24_resume.png | Bin 1341 -> 0 bytes
.../ui/images/theme-default/ac24_resume_grey.png | Bin 1282 -> 0 bytes
.../ui/images/theme-default/arrow-down-black.png | Bin 2942 -> 0 bytes
.../ui/images/theme-default/arrow-down-disable.png | Bin 472 -> 0 bytes
.../kimchi/ui/images/theme-default/arrow-down.png | Bin 537 -> 0 bytes
.../kimchi/ui/images/theme-default/arrow-up.png | Bin 510 -> 0 bytes
.../kimchi/ui/images/theme-default/arrow_out.png | Bin 3048 -> 0 bytes
plugins/kimchi/ui/images/theme-default/group.png | Bin 1703 -> 0 bytes
.../ui/images/theme-default/host-icon-sprite.png | Bin 1034 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-back.png | Bin 244 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-camera.png | Bin 4860 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-design.png | Bin 4562 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-detail.png | Bin 3079 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-iso.png | Bin 4188 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-list.png | Bin 2983 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-load.png | Bin 3678 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-local.png | Bin 425 -> 0 bytes
.../ui/images/theme-default/icon-power-down.png | Bin 4372 -> 0 bytes
.../ui/images/theme-default/icon-power-up.png | Bin 4367 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-qcow2.png | Bin 4684 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-raw.png | Bin 4679 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-remote.png | Bin 1005 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-reset.png | Bin 4576 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-search.png | Bin 4197 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-sort.png | Bin 3421 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-tree.png | Bin 3526 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-user.png | Bin 5366 -> 0 bytes
.../images/theme-default/icon-volume-default.png | Bin 4265 -> 0 bytes
.../images/theme-default/kimchi-loading15x15.gif | Bin 1653 -> 0 bytes
plugins/kimchi/ui/images/theme-default/loading.gif | Bin 2190 -> 0 bytes
plugins/kimchi/ui/images/theme-default/user.png | Bin 1322 -> 0 bytes
plugins/kimchi/ui/js/Makefile.am | 27 -
plugins/kimchi/ui/js/src/kimchi.api.js | 1355 -----------
plugins/kimchi/ui/js/src/kimchi.guest_add_main.js | 86 -
plugins/kimchi/ui/js/src/kimchi.guest_edit_main.js | 759 -------
plugins/kimchi/ui/js/src/kimchi.guest_main.js | 511 -----
.../kimchi/ui/js/src/kimchi.guest_media_main.js | 56 -
.../ui/js/src/kimchi.guest_storage_add.main.js | 199 --
plugins/kimchi/ui/js/src/kimchi.host.js | 858 -------
plugins/kimchi/ui/js/src/kimchi.main.js | 26 -
plugins/kimchi/ui/js/src/kimchi.network.js | 442 ----
plugins/kimchi/ui/js/src/kimchi.report_add_main.js | 72 -
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 66 -
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 96 -
.../ui/js/src/kimchi.repository_edit_main.js | 74 -
plugins/kimchi/ui/js/src/kimchi.storage_main.js | 428 ----
.../ui/js/src/kimchi.storagepool_add_main.js | 414 ----
.../js/src/kimchi.storagepool_add_volume_main.js | 179 --
.../kimchi/ui/js/src/kimchi.template_add_main.js | 441 ----
.../kimchi/ui/js/src/kimchi.template_edit_main.js | 343 ---
plugins/kimchi/ui/js/src/kimchi.template_main.js | 111 -
plugins/kimchi/ui/pages/Makefile.am | 22 -
plugins/kimchi/ui/pages/guest-add.html.tmpl | 98 -
plugins/kimchi/ui/pages/guest-edit.html.tmpl | 311 ---
.../kimchi/ui/pages/guest-storage-add.html.tmpl | 103 -
plugins/kimchi/ui/pages/guest.html.tmpl | 77 -
plugins/kimchi/ui/pages/guests.html.tmpl | 65 -
plugins/kimchi/ui/pages/help/Makefile.am | 34 -
plugins/kimchi/ui/pages/help/de_DE/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/de_DE/guests.dita | 127 --
plugins/kimchi/ui/pages/help/de_DE/host.dita | 49 -
plugins/kimchi/ui/pages/help/de_DE/network.dita | 62 -
plugins/kimchi/ui/pages/help/de_DE/storage.dita | 86 -
plugins/kimchi/ui/pages/help/de_DE/templates.dita | 112 -
plugins/kimchi/ui/pages/help/dita-help.xsl | 26 -
plugins/kimchi/ui/pages/help/en_US/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/en_US/guests.dita | 136 --
plugins/kimchi/ui/pages/help/en_US/host.dita | 70 -
plugins/kimchi/ui/pages/help/en_US/network.dita | 68 -
plugins/kimchi/ui/pages/help/en_US/storage.dita | 99 -
plugins/kimchi/ui/pages/help/en_US/templates.dita | 123 -
plugins/kimchi/ui/pages/help/es_ES/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/es_ES/guests.dita | 120 -
plugins/kimchi/ui/pages/help/es_ES/host.dita | 49 -
plugins/kimchi/ui/pages/help/es_ES/network.dita | 61 -
plugins/kimchi/ui/pages/help/es_ES/storage.dita | 86 -
plugins/kimchi/ui/pages/help/es_ES/templates.dita | 111 -
plugins/kimchi/ui/pages/help/fr_FR/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/fr_FR/guests.dita | 130 --
plugins/kimchi/ui/pages/help/fr_FR/host.dita | 68 -
plugins/kimchi/ui/pages/help/fr_FR/network.dita | 67 -
plugins/kimchi/ui/pages/help/fr_FR/storage.dita | 93 -
plugins/kimchi/ui/pages/help/fr_FR/templates.dita | 120 -
plugins/kimchi/ui/pages/help/it_IT/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/it_IT/guests.dita | 123 -
plugins/kimchi/ui/pages/help/it_IT/host.dita | 51 -
plugins/kimchi/ui/pages/help/it_IT/network.dita | 63 -
plugins/kimchi/ui/pages/help/it_IT/storage.dita | 91 -
plugins/kimchi/ui/pages/help/it_IT/templates.dita | 115 -
plugins/kimchi/ui/pages/help/ja_JP/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/ja_JP/guests.dita | 172 --
plugins/kimchi/ui/pages/help/ja_JP/host.dita | 70 -
plugins/kimchi/ui/pages/help/ja_JP/network.dita | 83 -
plugins/kimchi/ui/pages/help/ja_JP/storage.dita | 120 -
plugins/kimchi/ui/pages/help/ja_JP/templates.dita | 150 --
plugins/kimchi/ui/pages/help/kimchi.css | 208 --
plugins/kimchi/ui/pages/help/ko_KR/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/ko_KR/guests.dita | 119 -
plugins/kimchi/ui/pages/help/ko_KR/host.dita | 47 -
plugins/kimchi/ui/pages/help/ko_KR/network.dita | 61 -
plugins/kimchi/ui/pages/help/ko_KR/storage.dita | 86 -
plugins/kimchi/ui/pages/help/ko_KR/templates.dita | 111 -
plugins/kimchi/ui/pages/help/pt_BR/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/pt_BR/guests.dita | 137 --
plugins/kimchi/ui/pages/help/pt_BR/host.dita | 74 -
plugins/kimchi/ui/pages/help/pt_BR/network.dita | 72 -
plugins/kimchi/ui/pages/help/pt_BR/storage.dita | 102 -
plugins/kimchi/ui/pages/help/pt_BR/templates.dita | 127 --
plugins/kimchi/ui/pages/help/ru_RU/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/ru_RU/guests.dita | 122 -
plugins/kimchi/ui/pages/help/ru_RU/host.dita | 48 -
plugins/kimchi/ui/pages/help/ru_RU/network.dita | 61 -
plugins/kimchi/ui/pages/help/ru_RU/storage.dita | 88 -
plugins/kimchi/ui/pages/help/ru_RU/templates.dita | 111 -
plugins/kimchi/ui/pages/help/zh_CN/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/zh_CN/guests.dita | 118 -
plugins/kimchi/ui/pages/help/zh_CN/host.dita | 45 -
plugins/kimchi/ui/pages/help/zh_CN/network.dita | 61 -
plugins/kimchi/ui/pages/help/zh_CN/storage.dita | 84 -
plugins/kimchi/ui/pages/help/zh_CN/templates.dita | 111 -
plugins/kimchi/ui/pages/help/zh_TW/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/zh_TW/guests.dita | 120 -
plugins/kimchi/ui/pages/help/zh_TW/host.dita | 50 -
plugins/kimchi/ui/pages/help/zh_TW/network.dita | 61 -
plugins/kimchi/ui/pages/help/zh_TW/storage.dita | 88 -
plugins/kimchi/ui/pages/help/zh_TW/templates.dita | 112 -
plugins/kimchi/ui/pages/host.html.tmpl | 177 --
plugins/kimchi/ui/pages/i18n.json.tmpl | 187 --
plugins/kimchi/ui/pages/network.html.tmpl | 133 --
plugins/kimchi/ui/pages/report-add.html.tmpl | 56 -
plugins/kimchi/ui/pages/report-rename.html.tmpl | 56 -
plugins/kimchi/ui/pages/repository-add.html.tmpl | 113 -
plugins/kimchi/ui/pages/repository-edit.html.tmpl | 117 -
plugins/kimchi/ui/pages/storage.html.tmpl | 143 --
.../ui/pages/storagepool-add-volume.html.tmpl | 79 -
plugins/kimchi/ui/pages/storagepool-add.html.tmpl | 186 --
plugins/kimchi/ui/pages/template-add.html.tmpl | 233 --
plugins/kimchi/ui/pages/template-edit.html.tmpl | 193 --
plugins/kimchi/ui/pages/templates.html.tmpl | 77 -
plugins/kimchi/ui/robots.txt | 2 -
plugins/kimchi/ui/spice-html5/Makefile.am | 25 -
plugins/kimchi/ui/spice-html5/atKeynames.js | 183 --
plugins/kimchi/ui/spice-html5/bitmap.js | 51 -
plugins/kimchi/ui/spice-html5/css/Makefile.am | 20 -
plugins/kimchi/ui/spice-html5/css/spice.css | 118 -
plugins/kimchi/ui/spice-html5/cursor.js | 110 -
plugins/kimchi/ui/spice-html5/display.js | 823 -------
plugins/kimchi/ui/spice-html5/enums.js | 324 ---
plugins/kimchi/ui/spice-html5/inputs.js | 280 ---
plugins/kimchi/ui/spice-html5/lz.js | 166 --
plugins/kimchi/ui/spice-html5/main.js | 231 --
plugins/kimchi/ui/spice-html5/pages/Makefile.am | 20 -
.../kimchi/ui/spice-html5/pages/spice_auto.html | 200 --
plugins/kimchi/ui/spice-html5/playback.js | 278 ---
plugins/kimchi/ui/spice-html5/png.js | 256 ---
plugins/kimchi/ui/spice-html5/quic.js | 1335 -----------
plugins/kimchi/ui/spice-html5/resize.js | 70 -
plugins/kimchi/ui/spice-html5/simulatecursor.js | 202 --
plugins/kimchi/ui/spice-html5/spicearraybuffer.js | 58 -
plugins/kimchi/ui/spice-html5/spiceconn.js | 460 ----
plugins/kimchi/ui/spice-html5/spicedataview.js | 120 -
plugins/kimchi/ui/spice-html5/spicemsg.js | 1047 ---------
plugins/kimchi/ui/spice-html5/spicetype.js | 473 ----
.../kimchi/ui/spice-html5/thirdparty/Makefile.am | 20 -
plugins/kimchi/ui/spice-html5/thirdparty/jsbn.js | 589 -----
plugins/kimchi/ui/spice-html5/thirdparty/prng4.js | 79 -
plugins/kimchi/ui/spice-html5/thirdparty/rng.js | 102 -
plugins/kimchi/ui/spice-html5/thirdparty/rsa.js | 146 --
plugins/kimchi/ui/spice-html5/thirdparty/sha1.js | 346 ---
plugins/kimchi/ui/spice-html5/ticket.js | 250 ---
plugins/kimchi/ui/spice-html5/utils.js | 265 ---
plugins/kimchi/ui/spice-html5/webm.js | 553 -----
plugins/kimchi/ui/spice-html5/wire.js | 123 -
plugins/kimchi/utils.py | 39 -
plugins/kimchi/vmtemplate.py | 431 ----
plugins/kimchi/vnc.py | 77 -
plugins/kimchi/xmlutils/Makefile.am | 25 -
plugins/kimchi/xmlutils/__init__.py | 18 -
plugins/kimchi/xmlutils/cpu.py | 60 -
plugins/kimchi/xmlutils/disk.py | 164 --
plugins/kimchi/xmlutils/graphics.py | 45 -
plugins/kimchi/xmlutils/interface.py | 61 -
plugins/kimchi/xmlutils/network.py | 122 -
plugins/kimchi/xmlutils/qemucmdline.py | 45 -
plugins/kimchi/yumparser.py | 283 ---
plugins/sample/API.json | 56 -
plugins/sample/Makefile.am | 29 -
plugins/sample/__init__.py | 97 -
plugins/sample/config.status | 1 -
plugins/sample/i18n.py | 40 -
plugins/sample/model.py | 131 --
plugins/sample/po/LINGUAS | 3 -
plugins/sample/po/Makefile.in.in | 400 ----
plugins/sample/po/Makevars | 41 -
plugins/sample/po/POTFILES.in | 2 -
plugins/sample/po/en_US.po | 21 -
plugins/sample/po/gen-pot | 9 -
plugins/sample/po/pt_BR.po | 24 -
plugins/sample/po/sample.pot | 21 -
plugins/sample/po/zh_CN.po | 24 -
plugins/sample/sample.conf.in | 27 -
plugins/sample/ui/Makefile.am | 22 -
plugins/sample/ui/config/Makefile.am | 21 -
plugins/sample/ui/config/tab-ext.xml | 17 -
plugins/sample/ui/css/.gitignore | 0
plugins/sample/ui/images/.gitignore | 0
plugins/sample/ui/js/.gitignore | 0
plugins/sample/ui/js/Makefile.am | 20 -
plugins/sample/ui/js/util.js | 33 -
plugins/sample/ui/libs/.gitignore | 0
plugins/sample/ui/pages/Makefile.am | 20 -
.../sample/ui/pages/help/en_US/sample-tab1.html | 1 -
.../sample/ui/pages/help/en_US/sample-tab2.html | 1 -
plugins/sample/ui/pages/i18n.json.tmpl | 26 -
plugins/sample/ui/pages/sample-tab1.html.tmpl | 30 -
plugins/sample/ui/pages/sample-tab2.html.tmpl | 30 -
src/wok/Makefile.am | 2 +-
src/wok/config.py.in | 7 +-
src/wok/plugins/Makefile.am | 25 +
src/wok/plugins/__init__.py | 18 +
src/wok/plugins/kimchi/.gitignore | 37 +
src/wok/plugins/kimchi/API.json | 836 +++++++
src/wok/plugins/kimchi/CONTRIBUTE.md | 16 +
src/wok/plugins/kimchi/COPYING | 19 +
src/wok/plugins/kimchi/COPYING.ASL2 | 202 ++
src/wok/plugins/kimchi/COPYING.LGPL | 165 ++
src/wok/plugins/kimchi/ChangeLog | 2155 ++++++++++++++++++
src/wok/plugins/kimchi/INSTALL | 369 +++
src/wok/plugins/kimchi/Makefile.am | 165 ++
src/wok/plugins/kimchi/README.md | 1 +
src/wok/plugins/kimchi/VERSION | 1 +
src/wok/plugins/kimchi/__init__.py | 21 +
src/wok/plugins/kimchi/autogen.sh | 21 +
src/wok/plugins/kimchi/build-aux/config.rpath | 672 ++++++
src/wok/plugins/kimchi/build-aux/genChangelog | 25 +
src/wok/plugins/kimchi/build-aux/pkg-version | 59 +
src/wok/plugins/kimchi/config.py.in | 144 ++
src/wok/plugins/kimchi/config.rpath | 672 ++++++
src/wok/plugins/kimchi/configure.ac | 119 +
src/wok/plugins/kimchi/contrib/DEBIAN/Makefile.am | 17 +
src/wok/plugins/kimchi/contrib/DEBIAN/control.in | 30 +
src/wok/plugins/kimchi/contrib/Makefile.am | 34 +
src/wok/plugins/kimchi/contrib/check_i18n.py | 82 +
.../plugins/kimchi/contrib/kimchi.spec.fedora.in | 120 +
src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in | 108 +
src/wok/plugins/kimchi/contrib/make-deb.sh.in | 15 +
src/wok/plugins/kimchi/control/Makefile.am | 27 +
src/wok/plugins/kimchi/control/__init__.py | 26 +
src/wok/plugins/kimchi/control/config.py | 57 +
src/wok/plugins/kimchi/control/cpuinfo.py | 37 +
src/wok/plugins/kimchi/control/debugreports.py | 61 +
src/wok/plugins/kimchi/control/groups.py | 28 +
src/wok/plugins/kimchi/control/host.py | 157 ++
src/wok/plugins/kimchi/control/interfaces.py | 46 +
src/wok/plugins/kimchi/control/networks.py | 54 +
src/wok/plugins/kimchi/control/peers.py | 29 +
src/wok/plugins/kimchi/control/storagepools.py | 116 +
src/wok/plugins/kimchi/control/storageservers.py | 60 +
src/wok/plugins/kimchi/control/storagevolumes.py | 83 +
src/wok/plugins/kimchi/control/templates.py | 58 +
src/wok/plugins/kimchi/control/users.py | 35 +
src/wok/plugins/kimchi/control/vm/Makefile.am | 26 +
src/wok/plugins/kimchi/control/vm/__init__.py | 26 +
src/wok/plugins/kimchi/control/vm/hostdevs.py | 43 +
src/wok/plugins/kimchi/control/vm/ifaces.py | 45 +
src/wok/plugins/kimchi/control/vm/snapshots.py | 58 +
src/wok/plugins/kimchi/control/vm/storages.py | 45 +
src/wok/plugins/kimchi/control/vms.py | 67 +
src/wok/plugins/kimchi/disks.py | 196 ++
src/wok/plugins/kimchi/distroloader.py | 67 +
src/wok/plugins/kimchi/distros.d/Makefile.am | 22 +
src/wok/plugins/kimchi/distros.d/debian.json | 9 +
src/wok/plugins/kimchi/distros.d/fedora.json | 30 +
src/wok/plugins/kimchi/distros.d/gentoo.json | 9 +
src/wok/plugins/kimchi/distros.d/opensuse.json | 23 +
src/wok/plugins/kimchi/distros.d/ubuntu.json | 37 +
src/wok/plugins/kimchi/docs/API.md | 1116 +++++++++
src/wok/plugins/kimchi/docs/Makefile.am | 28 +
src/wok/plugins/kimchi/docs/README-federation.md | 60 +
src/wok/plugins/kimchi/docs/README.md | 247 ++
src/wok/plugins/kimchi/docs/kimchi-guest.png | Bin 0 -> 192281 bytes
src/wok/plugins/kimchi/docs/kimchi-login.png | Bin 0 -> 318041 bytes
src/wok/plugins/kimchi/docs/kimchi-templates.png | Bin 0 -> 329678 bytes
src/wok/plugins/kimchi/i18n.py | 335 +++
src/wok/plugins/kimchi/imageinfo.py | 72 +
src/wok/plugins/kimchi/iscsi.py | 88 +
src/wok/plugins/kimchi/isoinfo.py | 506 +++++
src/wok/plugins/kimchi/kimchi.conf | 37 +
src/wok/plugins/kimchi/kvmusertests.py | 79 +
src/wok/plugins/kimchi/m4/ac_python_module.m4 | 30 +
src/wok/plugins/kimchi/m4/gettext.m4 | 383 ++++
src/wok/plugins/kimchi/m4/iconv.m4 | 214 ++
src/wok/plugins/kimchi/m4/intlmacosx.m4 | 51 +
src/wok/plugins/kimchi/m4/lib-ld.m4 | 110 +
src/wok/plugins/kimchi/m4/lib-link.m4 | 774 +++++++
src/wok/plugins/kimchi/m4/lib-prefix.m4 | 224 ++
src/wok/plugins/kimchi/m4/nls.m4 | 32 +
src/wok/plugins/kimchi/m4/po.m4 | 449 ++++
src/wok/plugins/kimchi/m4/progtest.m4 | 92 +
src/wok/plugins/kimchi/mockmodel.py | 627 ++++++
src/wok/plugins/kimchi/model/Makefile.am | 25 +
src/wok/plugins/kimchi/model/__init__.py | 18 +
src/wok/plugins/kimchi/model/config.py | 176 ++
src/wok/plugins/kimchi/model/cpuinfo.py | 126 ++
src/wok/plugins/kimchi/model/debugreports.py | 213 ++
src/wok/plugins/kimchi/model/diskutils.py | 75 +
src/wok/plugins/kimchi/model/featuretests.py | 259 +++
src/wok/plugins/kimchi/model/groups.py | 67 +
src/wok/plugins/kimchi/model/host.py | 476 ++++
src/wok/plugins/kimchi/model/hostdev.py | 324 +++
src/wok/plugins/kimchi/model/interfaces.py | 44 +
src/wok/plugins/kimchi/model/libvirtconnection.py | 136 ++
src/wok/plugins/kimchi/model/libvirtstoragepool.py | 266 +++
src/wok/plugins/kimchi/model/model.py | 52 +
src/wok/plugins/kimchi/model/networks.py | 382 ++++
src/wok/plugins/kimchi/model/peers.py | 72 +
src/wok/plugins/kimchi/model/storagepools.py | 490 ++++
src/wok/plugins/kimchi/model/storageservers.py | 81 +
src/wok/plugins/kimchi/model/storagetargets.py | 122 +
src/wok/plugins/kimchi/model/storagevolumes.py | 542 +++++
src/wok/plugins/kimchi/model/templates.py | 303 +++
src/wok/plugins/kimchi/model/users.py | 90 +
src/wok/plugins/kimchi/model/utils.py | 161 ++
src/wok/plugins/kimchi/model/vmhostdevs.py | 336 +++
src/wok/plugins/kimchi/model/vmifaces.py | 186 ++
src/wok/plugins/kimchi/model/vms.py | 1307 +++++++++++
src/wok/plugins/kimchi/model/vmsnapshots.py | 204 ++
src/wok/plugins/kimchi/model/vmstorages.py | 252 +++
src/wok/plugins/kimchi/netinfo.py | 216 ++
src/wok/plugins/kimchi/network.py | 62 +
src/wok/plugins/kimchi/osinfo.py | 213 ++
src/wok/plugins/kimchi/po/LINGUAS | 11 +
src/wok/plugins/kimchi/po/Makefile.in.in | 398 ++++
src/wok/plugins/kimchi/po/Makevars | 41 +
src/wok/plugins/kimchi/po/POTFILES.in | 3 +
src/wok/plugins/kimchi/po/de_DE.po | 2288 +++++++++++++++++++
src/wok/plugins/kimchi/po/en_US.po | 2075 +++++++++++++++++
src/wok/plugins/kimchi/po/es_ES.po | 2305 +++++++++++++++++++
src/wok/plugins/kimchi/po/fr_FR.po | 2338 +++++++++++++++++++
src/wok/plugins/kimchi/po/gen-pot.in | 9 +
src/wok/plugins/kimchi/po/it_IT.po | 2274 +++++++++++++++++++
src/wok/plugins/kimchi/po/ja_JP.po | 2269 +++++++++++++++++++
src/wok/plugins/kimchi/po/kimchi.pot | 2074 +++++++++++++++++
src/wok/plugins/kimchi/po/ko_KR.po | 2197 ++++++++++++++++++
src/wok/plugins/kimchi/po/pt_BR.po | 2369 ++++++++++++++++++++
src/wok/plugins/kimchi/po/ru_RU.po | 2198 ++++++++++++++++++
src/wok/plugins/kimchi/po/zh_CN.po | 2186 ++++++++++++++++++
src/wok/plugins/kimchi/po/zh_TW.po | 2138 ++++++++++++++++++
src/wok/plugins/kimchi/repositories.py | 529 +++++
src/wok/plugins/kimchi/root.py | 69 +
src/wok/plugins/kimchi/scan.py | 89 +
src/wok/plugins/kimchi/screenshot.py | 184 ++
src/wok/plugins/kimchi/swupdate.py | 263 +++
src/wok/plugins/kimchi/template.conf | 47 +
src/wok/plugins/kimchi/tests/Makefile.am | 50 +
src/wok/plugins/kimchi/tests/iso_gen.py | 212 ++
src/wok/plugins/kimchi/tests/run_tests.sh.in | 55 +
src/wok/plugins/kimchi/tests/test_authorization.py | 178 ++
src/wok/plugins/kimchi/tests/test_config.py.in | 267 +++
src/wok/plugins/kimchi/tests/test_host.py | 206 ++
src/wok/plugins/kimchi/tests/test_mock_network.py | 73 +
.../plugins/kimchi/tests/test_mock_storagepool.py | 147 ++
.../kimchi/tests/test_mock_storagevolume.py | 98 +
src/wok/plugins/kimchi/tests/test_mockmodel.py | 141 ++
src/wok/plugins/kimchi/tests/test_model.py | 1248 +++++++++++
src/wok/plugins/kimchi/tests/test_model_network.py | 149 ++
.../plugins/kimchi/tests/test_model_storagepool.py | 123 +
.../kimchi/tests/test_model_storagevolume.py | 280 +++
src/wok/plugins/kimchi/tests/test_networkxml.py | 172 ++
src/wok/plugins/kimchi/tests/test_osinfo.py | 69 +
src/wok/plugins/kimchi/tests/test_rest.py | 1327 +++++++++++
.../plugins/kimchi/tests/test_storagepoolxml.py | 171 ++
src/wok/plugins/kimchi/tests/test_template.py | 387 ++++
src/wok/plugins/kimchi/tests/test_vmtemplate.py | 116 +
src/wok/plugins/kimchi/tests/test_yumparser.py | 162 ++
src/wok/plugins/kimchi/tests/utils.py | 260 +++
src/wok/plugins/kimchi/ui/Makefile.am | 20 +
src/wok/plugins/kimchi/ui/config/Makefile.am | 22 +
src/wok/plugins/kimchi/ui/config/tab-ext.xml | 38 +
src/wok/plugins/kimchi/ui/css/Makefile.am | 26 +
.../kimchi/ui/css/theme-default/guest-edit.css | 424 ++++
.../ui/css/theme-default/guest-storage-add.css | 81 +
.../plugins/kimchi/ui/css/theme-default/host.css | 287 +++
.../plugins/kimchi/ui/css/theme-default/icon.css | 106 +
.../plugins/kimchi/ui/css/theme-default/list.css | 326 +++
.../kimchi/ui/css/theme-default/network.css | 267 +++
.../kimchi/ui/css/theme-default/report-add.css | 37 +
.../kimchi/ui/css/theme-default/report-rename.css | 39 +
.../kimchi/ui/css/theme-default/repository-add.css | 42 +
.../ui/css/theme-default/repository-edit.css | 88 +
.../kimchi/ui/css/theme-default/storage.css | 550 +++++
.../css/theme-default/storagepool-add-volume.css | 36 +
.../kimchi/ui/css/theme-default/template-edit.css | 175 ++
.../kimchi/ui/css/theme-default/template.css | 85 +
.../kimchi/ui/css/theme-default/template_add.css | 317 +++
.../kimchi/ui/css/theme-default/template_list.css | 267 +++
src/wok/plugins/kimchi/ui/images/Makefile.am | 22 +
src/wok/plugins/kimchi/ui/images/icon-centos.png | Bin 0 -> 4734 bytes
src/wok/plugins/kimchi/ui/images/icon-debian.png | Bin 0 -> 4239 bytes
src/wok/plugins/kimchi/ui/images/icon-fedora.png | Bin 0 -> 4449 bytes
src/wok/plugins/kimchi/ui/images/icon-gentoo.png | Bin 0 -> 15307 bytes
src/wok/plugins/kimchi/ui/images/icon-opensuse.png | Bin 0 -> 3046 bytes
src/wok/plugins/kimchi/ui/images/icon-ubuntu.png | Bin 0 -> 4818 bytes
src/wok/plugins/kimchi/ui/images/icon-vm.png | Bin 0 -> 2976 bytes
.../kimchi/ui/images/theme-default/Makefile.am | 20 +
.../kimchi/ui/images/theme-default/ac22_pause.png | Bin 0 -> 1219 bytes
.../ui/images/theme-default/ac22_pause_grey.png | Bin 0 -> 1175 bytes
.../kimchi/ui/images/theme-default/ac24_resume.png | Bin 0 -> 1341 bytes
.../ui/images/theme-default/ac24_resume_grey.png | Bin 0 -> 1282 bytes
.../ui/images/theme-default/arrow-down-black.png | Bin 0 -> 2942 bytes
.../ui/images/theme-default/arrow-down-disable.png | Bin 0 -> 472 bytes
.../kimchi/ui/images/theme-default/arrow-down.png | Bin 0 -> 537 bytes
.../kimchi/ui/images/theme-default/arrow-up.png | Bin 0 -> 510 bytes
.../kimchi/ui/images/theme-default/arrow_out.png | Bin 0 -> 3048 bytes
.../kimchi/ui/images/theme-default/group.png | Bin 0 -> 1703 bytes
.../ui/images/theme-default/host-icon-sprite.png | Bin 0 -> 1034 bytes
.../kimchi/ui/images/theme-default/icon-back.png | Bin 0 -> 244 bytes
.../kimchi/ui/images/theme-default/icon-camera.png | Bin 0 -> 4860 bytes
.../kimchi/ui/images/theme-default/icon-design.png | Bin 0 -> 4562 bytes
.../kimchi/ui/images/theme-default/icon-detail.png | Bin 0 -> 3079 bytes
.../kimchi/ui/images/theme-default/icon-iso.png | Bin 0 -> 4188 bytes
.../kimchi/ui/images/theme-default/icon-list.png | Bin 0 -> 2983 bytes
.../kimchi/ui/images/theme-default/icon-load.png | Bin 0 -> 3678 bytes
.../kimchi/ui/images/theme-default/icon-local.png | Bin 0 -> 425 bytes
.../ui/images/theme-default/icon-power-down.png | Bin 0 -> 4372 bytes
.../ui/images/theme-default/icon-power-up.png | Bin 0 -> 4367 bytes
.../kimchi/ui/images/theme-default/icon-qcow2.png | Bin 0 -> 4684 bytes
.../kimchi/ui/images/theme-default/icon-raw.png | Bin 0 -> 4679 bytes
.../kimchi/ui/images/theme-default/icon-remote.png | Bin 0 -> 1005 bytes
.../kimchi/ui/images/theme-default/icon-reset.png | Bin 0 -> 4576 bytes
.../kimchi/ui/images/theme-default/icon-search.png | Bin 0 -> 4197 bytes
.../kimchi/ui/images/theme-default/icon-sort.png | Bin 0 -> 3421 bytes
.../kimchi/ui/images/theme-default/icon-tree.png | Bin 0 -> 3526 bytes
.../kimchi/ui/images/theme-default/icon-user.png | Bin 0 -> 5366 bytes
.../images/theme-default/icon-volume-default.png | Bin 0 -> 4265 bytes
.../images/theme-default/kimchi-loading15x15.gif | Bin 0 -> 1653 bytes
.../kimchi/ui/images/theme-default/loading.gif | Bin 0 -> 2190 bytes
.../kimchi/ui/images/theme-default/user.png | Bin 0 -> 1322 bytes
src/wok/plugins/kimchi/ui/js/Makefile.am | 27 +
src/wok/plugins/kimchi/ui/js/src/kimchi.api.js | 1355 +++++++++++
.../kimchi/ui/js/src/kimchi.guest_add_main.js | 86 +
.../kimchi/ui/js/src/kimchi.guest_edit_main.js | 759 +++++++
.../plugins/kimchi/ui/js/src/kimchi.guest_main.js | 511 +++++
.../kimchi/ui/js/src/kimchi.guest_media_main.js | 56 +
.../ui/js/src/kimchi.guest_storage_add.main.js | 199 ++
src/wok/plugins/kimchi/ui/js/src/kimchi.host.js | 858 +++++++
src/wok/plugins/kimchi/ui/js/src/kimchi.main.js | 26 +
src/wok/plugins/kimchi/ui/js/src/kimchi.network.js | 442 ++++
.../kimchi/ui/js/src/kimchi.report_add_main.js | 72 +
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 66 +
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 96 +
.../ui/js/src/kimchi.repository_edit_main.js | 74 +
.../kimchi/ui/js/src/kimchi.storage_main.js | 428 ++++
.../ui/js/src/kimchi.storagepool_add_main.js | 414 ++++
.../js/src/kimchi.storagepool_add_volume_main.js | 179 ++
.../kimchi/ui/js/src/kimchi.template_add_main.js | 441 ++++
.../kimchi/ui/js/src/kimchi.template_edit_main.js | 343 +++
.../kimchi/ui/js/src/kimchi.template_main.js | 111 +
src/wok/plugins/kimchi/ui/pages/Makefile.am | 22 +
.../plugins/kimchi/ui/pages/guest-add.html.tmpl | 98 +
.../plugins/kimchi/ui/pages/guest-edit.html.tmpl | 311 +++
.../kimchi/ui/pages/guest-storage-add.html.tmpl | 103 +
src/wok/plugins/kimchi/ui/pages/guest.html.tmpl | 77 +
src/wok/plugins/kimchi/ui/pages/guests.html.tmpl | 65 +
src/wok/plugins/kimchi/ui/pages/help/Makefile.am | 34 +
.../plugins/kimchi/ui/pages/help/de_DE/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/de_DE/guests.dita | 127 ++
.../plugins/kimchi/ui/pages/help/de_DE/host.dita | 49 +
.../kimchi/ui/pages/help/de_DE/network.dita | 62 +
.../kimchi/ui/pages/help/de_DE/storage.dita | 86 +
.../kimchi/ui/pages/help/de_DE/templates.dita | 112 +
src/wok/plugins/kimchi/ui/pages/help/dita-help.xsl | 26 +
.../plugins/kimchi/ui/pages/help/en_US/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/en_US/guests.dita | 136 ++
.../plugins/kimchi/ui/pages/help/en_US/host.dita | 70 +
.../kimchi/ui/pages/help/en_US/network.dita | 68 +
.../kimchi/ui/pages/help/en_US/storage.dita | 99 +
.../kimchi/ui/pages/help/en_US/templates.dita | 123 +
.../plugins/kimchi/ui/pages/help/es_ES/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/es_ES/guests.dita | 120 +
.../plugins/kimchi/ui/pages/help/es_ES/host.dita | 49 +
.../kimchi/ui/pages/help/es_ES/network.dita | 61 +
.../kimchi/ui/pages/help/es_ES/storage.dita | 86 +
.../kimchi/ui/pages/help/es_ES/templates.dita | 111 +
.../plugins/kimchi/ui/pages/help/fr_FR/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/fr_FR/guests.dita | 130 ++
.../plugins/kimchi/ui/pages/help/fr_FR/host.dita | 68 +
.../kimchi/ui/pages/help/fr_FR/network.dita | 67 +
.../kimchi/ui/pages/help/fr_FR/storage.dita | 93 +
.../kimchi/ui/pages/help/fr_FR/templates.dita | 120 +
.../plugins/kimchi/ui/pages/help/it_IT/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/it_IT/guests.dita | 123 +
.../plugins/kimchi/ui/pages/help/it_IT/host.dita | 51 +
.../kimchi/ui/pages/help/it_IT/network.dita | 63 +
.../kimchi/ui/pages/help/it_IT/storage.dita | 91 +
.../kimchi/ui/pages/help/it_IT/templates.dita | 115 +
.../plugins/kimchi/ui/pages/help/ja_JP/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/ja_JP/guests.dita | 172 ++
.../plugins/kimchi/ui/pages/help/ja_JP/host.dita | 70 +
.../kimchi/ui/pages/help/ja_JP/network.dita | 83 +
.../kimchi/ui/pages/help/ja_JP/storage.dita | 120 +
.../kimchi/ui/pages/help/ja_JP/templates.dita | 150 ++
src/wok/plugins/kimchi/ui/pages/help/kimchi.css | 208 ++
.../plugins/kimchi/ui/pages/help/ko_KR/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/ko_KR/guests.dita | 119 +
.../plugins/kimchi/ui/pages/help/ko_KR/host.dita | 47 +
.../kimchi/ui/pages/help/ko_KR/network.dita | 61 +
.../kimchi/ui/pages/help/ko_KR/storage.dita | 86 +
.../kimchi/ui/pages/help/ko_KR/templates.dita | 111 +
.../plugins/kimchi/ui/pages/help/pt_BR/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/pt_BR/guests.dita | 137 ++
.../plugins/kimchi/ui/pages/help/pt_BR/host.dita | 74 +
.../kimchi/ui/pages/help/pt_BR/network.dita | 72 +
.../kimchi/ui/pages/help/pt_BR/storage.dita | 102 +
.../kimchi/ui/pages/help/pt_BR/templates.dita | 127 ++
.../plugins/kimchi/ui/pages/help/ru_RU/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/ru_RU/guests.dita | 122 +
.../plugins/kimchi/ui/pages/help/ru_RU/host.dita | 48 +
.../kimchi/ui/pages/help/ru_RU/network.dita | 61 +
.../kimchi/ui/pages/help/ru_RU/storage.dita | 88 +
.../kimchi/ui/pages/help/ru_RU/templates.dita | 111 +
.../plugins/kimchi/ui/pages/help/zh_CN/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/zh_CN/guests.dita | 118 +
.../plugins/kimchi/ui/pages/help/zh_CN/host.dita | 45 +
.../kimchi/ui/pages/help/zh_CN/network.dita | 61 +
.../kimchi/ui/pages/help/zh_CN/storage.dita | 84 +
.../kimchi/ui/pages/help/zh_CN/templates.dita | 111 +
.../plugins/kimchi/ui/pages/help/zh_TW/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/zh_TW/guests.dita | 120 +
.../plugins/kimchi/ui/pages/help/zh_TW/host.dita | 50 +
.../kimchi/ui/pages/help/zh_TW/network.dita | 61 +
.../kimchi/ui/pages/help/zh_TW/storage.dita | 88 +
.../kimchi/ui/pages/help/zh_TW/templates.dita | 112 +
src/wok/plugins/kimchi/ui/pages/host.html.tmpl | 177 ++
src/wok/plugins/kimchi/ui/pages/i18n.json.tmpl | 187 ++
src/wok/plugins/kimchi/ui/pages/network.html.tmpl | 133 ++
.../plugins/kimchi/ui/pages/report-add.html.tmpl | 56 +
.../kimchi/ui/pages/report-rename.html.tmpl | 56 +
.../kimchi/ui/pages/repository-add.html.tmpl | 113 +
.../kimchi/ui/pages/repository-edit.html.tmpl | 117 +
src/wok/plugins/kimchi/ui/pages/storage.html.tmpl | 143 ++
.../ui/pages/storagepool-add-volume.html.tmpl | 79 +
.../kimchi/ui/pages/storagepool-add.html.tmpl | 186 ++
.../plugins/kimchi/ui/pages/template-add.html.tmpl | 233 ++
.../kimchi/ui/pages/template-edit.html.tmpl | 193 ++
.../plugins/kimchi/ui/pages/templates.html.tmpl | 77 +
src/wok/plugins/kimchi/ui/robots.txt | 2 +
src/wok/plugins/kimchi/ui/spice-html5/Makefile.am | 25 +
.../plugins/kimchi/ui/spice-html5/atKeynames.js | 183 ++
src/wok/plugins/kimchi/ui/spice-html5/bitmap.js | 51 +
.../plugins/kimchi/ui/spice-html5/css/Makefile.am | 20 +
.../plugins/kimchi/ui/spice-html5/css/spice.css | 118 +
src/wok/plugins/kimchi/ui/spice-html5/cursor.js | 110 +
src/wok/plugins/kimchi/ui/spice-html5/display.js | 823 +++++++
src/wok/plugins/kimchi/ui/spice-html5/enums.js | 324 +++
src/wok/plugins/kimchi/ui/spice-html5/inputs.js | 280 +++
src/wok/plugins/kimchi/ui/spice-html5/lz.js | 166 ++
src/wok/plugins/kimchi/ui/spice-html5/main.js | 231 ++
.../kimchi/ui/spice-html5/pages/Makefile.am | 20 +
.../kimchi/ui/spice-html5/pages/spice_auto.html | 200 ++
src/wok/plugins/kimchi/ui/spice-html5/playback.js | 278 +++
src/wok/plugins/kimchi/ui/spice-html5/png.js | 256 +++
src/wok/plugins/kimchi/ui/spice-html5/quic.js | 1335 +++++++++++
src/wok/plugins/kimchi/ui/spice-html5/resize.js | 70 +
.../kimchi/ui/spice-html5/simulatecursor.js | 202 ++
.../kimchi/ui/spice-html5/spicearraybuffer.js | 58 +
src/wok/plugins/kimchi/ui/spice-html5/spiceconn.js | 460 ++++
.../plugins/kimchi/ui/spice-html5/spicedataview.js | 120 +
src/wok/plugins/kimchi/ui/spice-html5/spicemsg.js | 1047 +++++++++
src/wok/plugins/kimchi/ui/spice-html5/spicetype.js | 473 ++++
.../kimchi/ui/spice-html5/thirdparty/Makefile.am | 20 +
.../kimchi/ui/spice-html5/thirdparty/jsbn.js | 589 +++++
.../kimchi/ui/spice-html5/thirdparty/prng4.js | 79 +
.../kimchi/ui/spice-html5/thirdparty/rng.js | 102 +
.../kimchi/ui/spice-html5/thirdparty/rsa.js | 146 ++
.../kimchi/ui/spice-html5/thirdparty/sha1.js | 346 +++
src/wok/plugins/kimchi/ui/spice-html5/ticket.js | 250 +++
src/wok/plugins/kimchi/ui/spice-html5/utils.js | 265 +++
src/wok/plugins/kimchi/ui/spice-html5/webm.js | 553 +++++
src/wok/plugins/kimchi/ui/spice-html5/wire.js | 123 +
src/wok/plugins/kimchi/utils.py | 39 +
src/wok/plugins/kimchi/vmtemplate.py | 431 ++++
src/wok/plugins/kimchi/vnc.py | 77 +
src/wok/plugins/kimchi/xmlutils/Makefile.am | 25 +
src/wok/plugins/kimchi/xmlutils/__init__.py | 18 +
src/wok/plugins/kimchi/xmlutils/cpu.py | 60 +
src/wok/plugins/kimchi/xmlutils/disk.py | 164 ++
src/wok/plugins/kimchi/xmlutils/graphics.py | 45 +
src/wok/plugins/kimchi/xmlutils/interface.py | 61 +
src/wok/plugins/kimchi/xmlutils/network.py | 122 +
src/wok/plugins/kimchi/xmlutils/qemucmdline.py | 45 +
src/wok/plugins/kimchi/yumparser.py | 283 +++
src/wok/plugins/sample/API.json | 56 +
src/wok/plugins/sample/Makefile.am | 29 +
src/wok/plugins/sample/__init__.py | 97 +
src/wok/plugins/sample/config.status | 1 +
src/wok/plugins/sample/i18n.py | 40 +
src/wok/plugins/sample/model.py | 131 ++
src/wok/plugins/sample/po/LINGUAS | 3 +
src/wok/plugins/sample/po/Makefile.in.in | 400 ++++
src/wok/plugins/sample/po/Makevars | 41 +
src/wok/plugins/sample/po/POTFILES.in | 2 +
src/wok/plugins/sample/po/en_US.po | 21 +
src/wok/plugins/sample/po/gen-pot | 9 +
src/wok/plugins/sample/po/pt_BR.po | 24 +
src/wok/plugins/sample/po/sample.pot | 21 +
src/wok/plugins/sample/po/zh_CN.po | 24 +
src/wok/plugins/sample/sample.conf.in | 27 +
src/wok/plugins/sample/ui/Makefile.am | 22 +
src/wok/plugins/sample/ui/config/Makefile.am | 21 +
src/wok/plugins/sample/ui/config/tab-ext.xml | 17 +
src/wok/plugins/sample/ui/css/.gitignore | 0
src/wok/plugins/sample/ui/images/.gitignore | 0
src/wok/plugins/sample/ui/js/.gitignore | 0
src/wok/plugins/sample/ui/js/Makefile.am | 20 +
src/wok/plugins/sample/ui/js/util.js | 33 +
src/wok/plugins/sample/ui/libs/.gitignore | 0
src/wok/plugins/sample/ui/pages/Makefile.am | 20 +
.../sample/ui/pages/help/en_US/sample-tab1.html | 1 +
.../sample/ui/pages/help/en_US/sample-tab2.html | 1 +
src/wok/plugins/sample/ui/pages/i18n.json.tmpl | 26 +
.../plugins/sample/ui/pages/sample-tab1.html.tmpl | 30 +
.../plugins/sample/ui/pages/sample-tab2.html.tmpl | 30 +
809 files changed, 84521 insertions(+), 81955 deletions(-)
delete mode 100644 plugins/Makefile.am
delete mode 100644 plugins/__init__.py
delete mode 100644 plugins/kimchi/.gitignore
delete mode 100644 plugins/kimchi/API.json
delete mode 100644 plugins/kimchi/INSTALL
delete mode 100644 plugins/kimchi/Makefile.am
delete mode 120000 plugins/kimchi/README.md
delete mode 100644 plugins/kimchi/VERSION
delete mode 100644 plugins/kimchi/__init__.py
delete mode 100755 plugins/kimchi/autogen.sh
delete mode 100644 plugins/kimchi/build-aux/config.rpath
delete mode 100755 plugins/kimchi/build-aux/genChangelog
delete mode 100755 plugins/kimchi/build-aux/pkg-version
delete mode 100644 plugins/kimchi/config.py.in
delete mode 100644 plugins/kimchi/config.rpath
delete mode 100644 plugins/kimchi/configure.ac
delete mode 100644 plugins/kimchi/contrib/DEBIAN/Makefile.am
delete mode 100644 plugins/kimchi/contrib/DEBIAN/control.in
delete mode 100644 plugins/kimchi/contrib/Makefile.am
delete mode 100755 plugins/kimchi/contrib/check_i18n.py
delete mode 100644 plugins/kimchi/contrib/kimchi.spec.fedora.in
delete mode 100644 plugins/kimchi/contrib/kimchi.spec.suse.in
delete mode 100644 plugins/kimchi/contrib/make-deb.sh.in
delete mode 100644 plugins/kimchi/control/Makefile.am
delete mode 100644 plugins/kimchi/control/__init__.py
delete mode 100644 plugins/kimchi/control/config.py
delete mode 100644 plugins/kimchi/control/cpuinfo.py
delete mode 100644 plugins/kimchi/control/debugreports.py
delete mode 100644 plugins/kimchi/control/groups.py
delete mode 100644 plugins/kimchi/control/host.py
delete mode 100644 plugins/kimchi/control/interfaces.py
delete mode 100644 plugins/kimchi/control/networks.py
delete mode 100644 plugins/kimchi/control/peers.py
delete mode 100644 plugins/kimchi/control/storagepools.py
delete mode 100644 plugins/kimchi/control/storageservers.py
delete mode 100644 plugins/kimchi/control/storagevolumes.py
delete mode 100644 plugins/kimchi/control/templates.py
delete mode 100644 plugins/kimchi/control/users.py
delete mode 100644 plugins/kimchi/control/vm/Makefile.am
delete mode 100644 plugins/kimchi/control/vm/__init__.py
delete mode 100644 plugins/kimchi/control/vm/hostdevs.py
delete mode 100644 plugins/kimchi/control/vm/ifaces.py
delete mode 100644 plugins/kimchi/control/vm/snapshots.py
delete mode 100644 plugins/kimchi/control/vm/storages.py
delete mode 100644 plugins/kimchi/control/vms.py
delete mode 100644 plugins/kimchi/disks.py
delete mode 100644 plugins/kimchi/distroloader.py
delete mode 100644 plugins/kimchi/distros.d/Makefile.am
delete mode 100644 plugins/kimchi/distros.d/debian.json
delete mode 100644 plugins/kimchi/distros.d/fedora.json
delete mode 100644 plugins/kimchi/distros.d/gentoo.json
delete mode 100644 plugins/kimchi/distros.d/opensuse.json
delete mode 100644 plugins/kimchi/distros.d/ubuntu.json
delete mode 100644 plugins/kimchi/docs/API.md
delete mode 100644 plugins/kimchi/docs/Makefile.am
delete mode 100644 plugins/kimchi/docs/README-federation.md
delete mode 100644 plugins/kimchi/docs/README.md
delete mode 100644 plugins/kimchi/docs/kimchi-guest.png
delete mode 100644 plugins/kimchi/docs/kimchi-login.png
delete mode 100644 plugins/kimchi/docs/kimchi-templates.png
delete mode 100644 plugins/kimchi/i18n.py
delete mode 100644 plugins/kimchi/imageinfo.py
delete mode 100644 plugins/kimchi/iscsi.py
delete mode 100644 plugins/kimchi/isoinfo.py
delete mode 100644 plugins/kimchi/kimchi.conf
delete mode 100644 plugins/kimchi/kvmusertests.py
delete mode 100644 plugins/kimchi/m4/ac_python_module.m4
delete mode 100644 plugins/kimchi/m4/gettext.m4
delete mode 100644 plugins/kimchi/m4/iconv.m4
delete mode 100644 plugins/kimchi/m4/intlmacosx.m4
delete mode 100644 plugins/kimchi/m4/lib-ld.m4
delete mode 100644 plugins/kimchi/m4/lib-link.m4
delete mode 100644 plugins/kimchi/m4/lib-prefix.m4
delete mode 100644 plugins/kimchi/m4/nls.m4
delete mode 100644 plugins/kimchi/m4/po.m4
delete mode 100644 plugins/kimchi/m4/progtest.m4
delete mode 100644 plugins/kimchi/mockmodel.py
delete mode 100644 plugins/kimchi/model/Makefile.am
delete mode 100644 plugins/kimchi/model/__init__.py
delete mode 100644 plugins/kimchi/model/config.py
delete mode 100644 plugins/kimchi/model/cpuinfo.py
delete mode 100644 plugins/kimchi/model/debugreports.py
delete mode 100644 plugins/kimchi/model/diskutils.py
delete mode 100644 plugins/kimchi/model/featuretests.py
delete mode 100644 plugins/kimchi/model/groups.py
delete mode 100644 plugins/kimchi/model/host.py
delete mode 100644 plugins/kimchi/model/hostdev.py
delete mode 100644 plugins/kimchi/model/interfaces.py
delete mode 100644 plugins/kimchi/model/libvirtconnection.py
delete mode 100644 plugins/kimchi/model/libvirtstoragepool.py
delete mode 100644 plugins/kimchi/model/model.py
delete mode 100644 plugins/kimchi/model/networks.py
delete mode 100644 plugins/kimchi/model/peers.py
delete mode 100644 plugins/kimchi/model/storagepools.py
delete mode 100644 plugins/kimchi/model/storageservers.py
delete mode 100644 plugins/kimchi/model/storagetargets.py
delete mode 100644 plugins/kimchi/model/storagevolumes.py
delete mode 100644 plugins/kimchi/model/templates.py
delete mode 100644 plugins/kimchi/model/users.py
delete mode 100644 plugins/kimchi/model/utils.py
delete mode 100644 plugins/kimchi/model/vmhostdevs.py
delete mode 100644 plugins/kimchi/model/vmifaces.py
delete mode 100644 plugins/kimchi/model/vms.py
delete mode 100644 plugins/kimchi/model/vmsnapshots.py
delete mode 100644 plugins/kimchi/model/vmstorages.py
delete mode 100644 plugins/kimchi/netinfo.py
delete mode 100644 plugins/kimchi/network.py
delete mode 100644 plugins/kimchi/osinfo.py
delete mode 100644 plugins/kimchi/po/LINGUAS
delete mode 100644 plugins/kimchi/po/Makefile.in.in
delete mode 100644 plugins/kimchi/po/Makevars
delete mode 100644 plugins/kimchi/po/POTFILES.in
delete mode 100644 plugins/kimchi/po/de_DE.po
delete mode 100644 plugins/kimchi/po/en_US.po
delete mode 100644 plugins/kimchi/po/es_ES.po
delete mode 100644 plugins/kimchi/po/fr_FR.po
delete mode 100644 plugins/kimchi/po/gen-pot.in
delete mode 100644 plugins/kimchi/po/it_IT.po
delete mode 100644 plugins/kimchi/po/ja_JP.po
delete mode 100755 plugins/kimchi/po/kimchi.pot
delete mode 100644 plugins/kimchi/po/ko_KR.po
delete mode 100644 plugins/kimchi/po/pt_BR.po
delete mode 100644 plugins/kimchi/po/ru_RU.po
delete mode 100644 plugins/kimchi/po/zh_CN.po
delete mode 100644 plugins/kimchi/po/zh_TW.po
delete mode 100644 plugins/kimchi/repositories.py
delete mode 100644 plugins/kimchi/root.py
delete mode 100644 plugins/kimchi/scan.py
delete mode 100644 plugins/kimchi/screenshot.py
delete mode 100644 plugins/kimchi/swupdate.py
delete mode 100644 plugins/kimchi/template.conf
delete mode 100644 plugins/kimchi/tests/Makefile.am
delete mode 100644 plugins/kimchi/tests/iso_gen.py
delete mode 100644 plugins/kimchi/tests/run_tests.sh.in
delete mode 100644 plugins/kimchi/tests/test_authorization.py
delete mode 100644 plugins/kimchi/tests/test_config.py.in
delete mode 100644 plugins/kimchi/tests/test_host.py
delete mode 100644 plugins/kimchi/tests/test_mock_network.py
delete mode 100644 plugins/kimchi/tests/test_mock_storagepool.py
delete mode 100644 plugins/kimchi/tests/test_mock_storagevolume.py
delete mode 100644 plugins/kimchi/tests/test_mockmodel.py
delete mode 100644 plugins/kimchi/tests/test_model.py
delete mode 100644 plugins/kimchi/tests/test_model_network.py
delete mode 100644 plugins/kimchi/tests/test_model_storagepool.py
delete mode 100644 plugins/kimchi/tests/test_model_storagevolume.py
delete mode 100644 plugins/kimchi/tests/test_networkxml.py
delete mode 100644 plugins/kimchi/tests/test_osinfo.py
delete mode 100644 plugins/kimchi/tests/test_rest.py
delete mode 100644 plugins/kimchi/tests/test_storagepoolxml.py
delete mode 100644 plugins/kimchi/tests/test_template.py
delete mode 100644 plugins/kimchi/tests/test_vmtemplate.py
delete mode 100644 plugins/kimchi/tests/test_yumparser.py
delete mode 100644 plugins/kimchi/tests/utils.py
delete mode 100644 plugins/kimchi/ui/Makefile.am
delete mode 100644 plugins/kimchi/ui/config/Makefile.am
delete mode 100644 plugins/kimchi/ui/config/tab-ext.xml
delete mode 100644 plugins/kimchi/ui/css/Makefile.am
delete mode 100644 plugins/kimchi/ui/css/theme-default/guest-edit.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/guest-storage-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/host.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/icon.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/list.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/network.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/report-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/report-rename.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/repository-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/repository-edit.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/storage.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/storagepool-add-volume.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/template-edit.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/template.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/template_add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/template_list.css
delete mode 100644 plugins/kimchi/ui/images/Makefile.am
delete mode 100644 plugins/kimchi/ui/images/icon-centos.png
delete mode 100644 plugins/kimchi/ui/images/icon-debian.png
delete mode 100644 plugins/kimchi/ui/images/icon-fedora.png
delete mode 100644 plugins/kimchi/ui/images/icon-gentoo.png
delete mode 100644 plugins/kimchi/ui/images/icon-opensuse.png
delete mode 100644 plugins/kimchi/ui/images/icon-ubuntu.png
delete mode 100644 plugins/kimchi/ui/images/icon-vm.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/Makefile.am
delete mode 100644 plugins/kimchi/ui/images/theme-default/ac22_pause.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/ac22_pause_grey.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/ac24_resume.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/ac24_resume_grey.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow-down-black.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow-down-disable.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow-down.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow-up.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow_out.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/group.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/host-icon-sprite.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-back.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-camera.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-design.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-detail.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-iso.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-list.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-load.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-local.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-power-down.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-power-up.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-qcow2.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-raw.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-remote.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-reset.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-search.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-sort.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-tree.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-user.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-volume-default.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/kimchi-loading15x15.gif
delete mode 100644 plugins/kimchi/ui/images/theme-default/loading.gif
delete mode 100644 plugins/kimchi/ui/images/theme-default/user.png
delete mode 100644 plugins/kimchi/ui/js/Makefile.am
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.api.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_edit_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_media_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_storage_add.main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.host.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.network.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.storage_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.storagepool_add_volume_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.template_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.template_edit_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.template_main.js
delete mode 100644 plugins/kimchi/ui/pages/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/guest-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/guest-edit.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/guest-storage-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/guest.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/guests.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/help/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/dita-help.xsl
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/kimchi.css
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/host.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/i18n.json.tmpl
delete mode 100644 plugins/kimchi/ui/pages/network.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/report-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/report-rename.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/repository-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/repository-edit.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/storage.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/storagepool-add-volume.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/storagepool-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/template-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/template-edit.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/templates.html.tmpl
delete mode 100644 plugins/kimchi/ui/robots.txt
delete mode 100644 plugins/kimchi/ui/spice-html5/Makefile.am
delete mode 100644 plugins/kimchi/ui/spice-html5/atKeynames.js
delete mode 100644 plugins/kimchi/ui/spice-html5/bitmap.js
delete mode 100644 plugins/kimchi/ui/spice-html5/css/Makefile.am
delete mode 100644 plugins/kimchi/ui/spice-html5/css/spice.css
delete mode 100644 plugins/kimchi/ui/spice-html5/cursor.js
delete mode 100644 plugins/kimchi/ui/spice-html5/display.js
delete mode 100644 plugins/kimchi/ui/spice-html5/enums.js
delete mode 100644 plugins/kimchi/ui/spice-html5/inputs.js
delete mode 100644 plugins/kimchi/ui/spice-html5/lz.js
delete mode 100644 plugins/kimchi/ui/spice-html5/main.js
delete mode 100644 plugins/kimchi/ui/spice-html5/pages/Makefile.am
delete mode 100644 plugins/kimchi/ui/spice-html5/pages/spice_auto.html
delete mode 100644 plugins/kimchi/ui/spice-html5/playback.js
delete mode 100644 plugins/kimchi/ui/spice-html5/png.js
delete mode 100644 plugins/kimchi/ui/spice-html5/quic.js
delete mode 100644 plugins/kimchi/ui/spice-html5/resize.js
delete mode 100644 plugins/kimchi/ui/spice-html5/simulatecursor.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spicearraybuffer.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spiceconn.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spicedataview.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spicemsg.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spicetype.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/jsbn.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/prng4.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/rng.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/rsa.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/sha1.js
delete mode 100644 plugins/kimchi/ui/spice-html5/ticket.js
delete mode 100644 plugins/kimchi/ui/spice-html5/utils.js
delete mode 100644 plugins/kimchi/ui/spice-html5/webm.js
delete mode 100644 plugins/kimchi/ui/spice-html5/wire.js
delete mode 100644 plugins/kimchi/utils.py
delete mode 100644 plugins/kimchi/vmtemplate.py
delete mode 100644 plugins/kimchi/vnc.py
delete mode 100644 plugins/kimchi/xmlutils/Makefile.am
delete mode 100644 plugins/kimchi/xmlutils/__init__.py
delete mode 100644 plugins/kimchi/xmlutils/cpu.py
delete mode 100644 plugins/kimchi/xmlutils/disk.py
delete mode 100644 plugins/kimchi/xmlutils/graphics.py
delete mode 100644 plugins/kimchi/xmlutils/interface.py
delete mode 100644 plugins/kimchi/xmlutils/network.py
delete mode 100644 plugins/kimchi/xmlutils/qemucmdline.py
delete mode 100644 plugins/kimchi/yumparser.py
delete mode 100644 plugins/sample/API.json
delete mode 100644 plugins/sample/Makefile.am
delete mode 100644 plugins/sample/__init__.py
delete mode 120000 plugins/sample/config.status
delete mode 100644 plugins/sample/i18n.py
delete mode 100644 plugins/sample/model.py
delete mode 100644 plugins/sample/po/LINGUAS
delete mode 100644 plugins/sample/po/Makefile.in.in
delete mode 100644 plugins/sample/po/Makevars
delete mode 100644 plugins/sample/po/POTFILES.in
delete mode 100644 plugins/sample/po/en_US.po
delete mode 100755 plugins/sample/po/gen-pot
delete mode 100644 plugins/sample/po/pt_BR.po
delete mode 100644 plugins/sample/po/sample.pot
delete mode 100644 plugins/sample/po/zh_CN.po
delete mode 100644 plugins/sample/sample.conf.in
delete mode 100644 plugins/sample/ui/Makefile.am
delete mode 100644 plugins/sample/ui/config/Makefile.am
delete mode 100644 plugins/sample/ui/config/tab-ext.xml
delete mode 100644 plugins/sample/ui/css/.gitignore
delete mode 100644 plugins/sample/ui/images/.gitignore
delete mode 100644 plugins/sample/ui/js/.gitignore
delete mode 100644 plugins/sample/ui/js/Makefile.am
delete mode 100644 plugins/sample/ui/js/util.js
delete mode 100644 plugins/sample/ui/libs/.gitignore
delete mode 100644 plugins/sample/ui/pages/Makefile.am
delete mode 100644 plugins/sample/ui/pages/help/en_US/sample-tab1.html
delete mode 100644 plugins/sample/ui/pages/help/en_US/sample-tab2.html
delete mode 100644 plugins/sample/ui/pages/i18n.json.tmpl
delete mode 100644 plugins/sample/ui/pages/sample-tab1.html.tmpl
delete mode 100644 plugins/sample/ui/pages/sample-tab2.html.tmpl
create mode 100644 src/wok/plugins/Makefile.am
create mode 100644 src/wok/plugins/__init__.py
create mode 100644 src/wok/plugins/kimchi/.gitignore
create mode 100644 src/wok/plugins/kimchi/API.json
create mode 100644 src/wok/plugins/kimchi/CONTRIBUTE.md
create mode 100644 src/wok/plugins/kimchi/COPYING
create mode 100644 src/wok/plugins/kimchi/COPYING.ASL2
create mode 100644 src/wok/plugins/kimchi/COPYING.LGPL
create mode 100644 src/wok/plugins/kimchi/ChangeLog
create mode 100644 src/wok/plugins/kimchi/INSTALL
create mode 100644 src/wok/plugins/kimchi/Makefile.am
create mode 120000 src/wok/plugins/kimchi/README.md
create mode 100644 src/wok/plugins/kimchi/VERSION
create mode 100644 src/wok/plugins/kimchi/__init__.py
create mode 100755 src/wok/plugins/kimchi/autogen.sh
create mode 100644 src/wok/plugins/kimchi/build-aux/config.rpath
create mode 100755 src/wok/plugins/kimchi/build-aux/genChangelog
create mode 100755 src/wok/plugins/kimchi/build-aux/pkg-version
create mode 100644 src/wok/plugins/kimchi/config.py.in
create mode 100644 src/wok/plugins/kimchi/config.rpath
create mode 100644 src/wok/plugins/kimchi/configure.ac
create mode 100644 src/wok/plugins/kimchi/contrib/DEBIAN/Makefile.am
create mode 100644 src/wok/plugins/kimchi/contrib/DEBIAN/control.in
create mode 100644 src/wok/plugins/kimchi/contrib/Makefile.am
create mode 100755 src/wok/plugins/kimchi/contrib/check_i18n.py
create mode 100644 src/wok/plugins/kimchi/contrib/kimchi.spec.fedora.in
create mode 100644 src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in
create mode 100644 src/wok/plugins/kimchi/contrib/make-deb.sh.in
create mode 100644 src/wok/plugins/kimchi/control/Makefile.am
create mode 100644 src/wok/plugins/kimchi/control/__init__.py
create mode 100644 src/wok/plugins/kimchi/control/config.py
create mode 100644 src/wok/plugins/kimchi/control/cpuinfo.py
create mode 100644 src/wok/plugins/kimchi/control/debugreports.py
create mode 100644 src/wok/plugins/kimchi/control/groups.py
create mode 100644 src/wok/plugins/kimchi/control/host.py
create mode 100644 src/wok/plugins/kimchi/control/interfaces.py
create mode 100644 src/wok/plugins/kimchi/control/networks.py
create mode 100644 src/wok/plugins/kimchi/control/peers.py
create mode 100644 src/wok/plugins/kimchi/control/storagepools.py
create mode 100644 src/wok/plugins/kimchi/control/storageservers.py
create mode 100644 src/wok/plugins/kimchi/control/storagevolumes.py
create mode 100644 src/wok/plugins/kimchi/control/templates.py
create mode 100644 src/wok/plugins/kimchi/control/users.py
create mode 100644 src/wok/plugins/kimchi/control/vm/Makefile.am
create mode 100644 src/wok/plugins/kimchi/control/vm/__init__.py
create mode 100644 src/wok/plugins/kimchi/control/vm/hostdevs.py
create mode 100644 src/wok/plugins/kimchi/control/vm/ifaces.py
create mode 100644 src/wok/plugins/kimchi/control/vm/snapshots.py
create mode 100644 src/wok/plugins/kimchi/control/vm/storages.py
create mode 100644 src/wok/plugins/kimchi/control/vms.py
create mode 100644 src/wok/plugins/kimchi/disks.py
create mode 100644 src/wok/plugins/kimchi/distroloader.py
create mode 100644 src/wok/plugins/kimchi/distros.d/Makefile.am
create mode 100644 src/wok/plugins/kimchi/distros.d/debian.json
create mode 100644 src/wok/plugins/kimchi/distros.d/fedora.json
create mode 100644 src/wok/plugins/kimchi/distros.d/gentoo.json
create mode 100644 src/wok/plugins/kimchi/distros.d/opensuse.json
create mode 100644 src/wok/plugins/kimchi/distros.d/ubuntu.json
create mode 100644 src/wok/plugins/kimchi/docs/API.md
create mode 100644 src/wok/plugins/kimchi/docs/Makefile.am
create mode 100644 src/wok/plugins/kimchi/docs/README-federation.md
create mode 100644 src/wok/plugins/kimchi/docs/README.md
create mode 100644 src/wok/plugins/kimchi/docs/kimchi-guest.png
create mode 100644 src/wok/plugins/kimchi/docs/kimchi-login.png
create mode 100644 src/wok/plugins/kimchi/docs/kimchi-templates.png
create mode 100644 src/wok/plugins/kimchi/i18n.py
create mode 100644 src/wok/plugins/kimchi/imageinfo.py
create mode 100644 src/wok/plugins/kimchi/iscsi.py
create mode 100644 src/wok/plugins/kimchi/isoinfo.py
create mode 100644 src/wok/plugins/kimchi/kimchi.conf
create mode 100644 src/wok/plugins/kimchi/kvmusertests.py
create mode 100644 src/wok/plugins/kimchi/m4/ac_python_module.m4
create mode 100644 src/wok/plugins/kimchi/m4/gettext.m4
create mode 100644 src/wok/plugins/kimchi/m4/iconv.m4
create mode 100644 src/wok/plugins/kimchi/m4/intlmacosx.m4
create mode 100644 src/wok/plugins/kimchi/m4/lib-ld.m4
create mode 100644 src/wok/plugins/kimchi/m4/lib-link.m4
create mode 100644 src/wok/plugins/kimchi/m4/lib-prefix.m4
create mode 100644 src/wok/plugins/kimchi/m4/nls.m4
create mode 100644 src/wok/plugins/kimchi/m4/po.m4
create mode 100644 src/wok/plugins/kimchi/m4/progtest.m4
create mode 100644 src/wok/plugins/kimchi/mockmodel.py
create mode 100644 src/wok/plugins/kimchi/model/Makefile.am
create mode 100644 src/wok/plugins/kimchi/model/__init__.py
create mode 100644 src/wok/plugins/kimchi/model/config.py
create mode 100644 src/wok/plugins/kimchi/model/cpuinfo.py
create mode 100644 src/wok/plugins/kimchi/model/debugreports.py
create mode 100644 src/wok/plugins/kimchi/model/diskutils.py
create mode 100644 src/wok/plugins/kimchi/model/featuretests.py
create mode 100644 src/wok/plugins/kimchi/model/groups.py
create mode 100644 src/wok/plugins/kimchi/model/host.py
create mode 100644 src/wok/plugins/kimchi/model/hostdev.py
create mode 100644 src/wok/plugins/kimchi/model/interfaces.py
create mode 100644 src/wok/plugins/kimchi/model/libvirtconnection.py
create mode 100644 src/wok/plugins/kimchi/model/libvirtstoragepool.py
create mode 100644 src/wok/plugins/kimchi/model/model.py
create mode 100644 src/wok/plugins/kimchi/model/networks.py
create mode 100644 src/wok/plugins/kimchi/model/peers.py
create mode 100644 src/wok/plugins/kimchi/model/storagepools.py
create mode 100644 src/wok/plugins/kimchi/model/storageservers.py
create mode 100644 src/wok/plugins/kimchi/model/storagetargets.py
create mode 100644 src/wok/plugins/kimchi/model/storagevolumes.py
create mode 100644 src/wok/plugins/kimchi/model/templates.py
create mode 100644 src/wok/plugins/kimchi/model/users.py
create mode 100644 src/wok/plugins/kimchi/model/utils.py
create mode 100644 src/wok/plugins/kimchi/model/vmhostdevs.py
create mode 100644 src/wok/plugins/kimchi/model/vmifaces.py
create mode 100644 src/wok/plugins/kimchi/model/vms.py
create mode 100644 src/wok/plugins/kimchi/model/vmsnapshots.py
create mode 100644 src/wok/plugins/kimchi/model/vmstorages.py
create mode 100644 src/wok/plugins/kimchi/netinfo.py
create mode 100644 src/wok/plugins/kimchi/network.py
create mode 100644 src/wok/plugins/kimchi/osinfo.py
create mode 100644 src/wok/plugins/kimchi/po/LINGUAS
create mode 100644 src/wok/plugins/kimchi/po/Makefile.in.in
create mode 100644 src/wok/plugins/kimchi/po/Makevars
create mode 100644 src/wok/plugins/kimchi/po/POTFILES.in
create mode 100644 src/wok/plugins/kimchi/po/de_DE.po
create mode 100644 src/wok/plugins/kimchi/po/en_US.po
create mode 100644 src/wok/plugins/kimchi/po/es_ES.po
create mode 100644 src/wok/plugins/kimchi/po/fr_FR.po
create mode 100644 src/wok/plugins/kimchi/po/gen-pot.in
create mode 100644 src/wok/plugins/kimchi/po/it_IT.po
create mode 100644 src/wok/plugins/kimchi/po/ja_JP.po
create mode 100755 src/wok/plugins/kimchi/po/kimchi.pot
create mode 100644 src/wok/plugins/kimchi/po/ko_KR.po
create mode 100644 src/wok/plugins/kimchi/po/pt_BR.po
create mode 100644 src/wok/plugins/kimchi/po/ru_RU.po
create mode 100644 src/wok/plugins/kimchi/po/zh_CN.po
create mode 100644 src/wok/plugins/kimchi/po/zh_TW.po
create mode 100644 src/wok/plugins/kimchi/repositories.py
create mode 100644 src/wok/plugins/kimchi/root.py
create mode 100644 src/wok/plugins/kimchi/scan.py
create mode 100644 src/wok/plugins/kimchi/screenshot.py
create mode 100644 src/wok/plugins/kimchi/swupdate.py
create mode 100644 src/wok/plugins/kimchi/template.conf
create mode 100644 src/wok/plugins/kimchi/tests/Makefile.am
create mode 100644 src/wok/plugins/kimchi/tests/iso_gen.py
create mode 100644 src/wok/plugins/kimchi/tests/run_tests.sh.in
create mode 100644 src/wok/plugins/kimchi/tests/test_authorization.py
create mode 100644 src/wok/plugins/kimchi/tests/test_config.py.in
create mode 100644 src/wok/plugins/kimchi/tests/test_host.py
create mode 100644 src/wok/plugins/kimchi/tests/test_mock_network.py
create mode 100644 src/wok/plugins/kimchi/tests/test_mock_storagepool.py
create mode 100644 src/wok/plugins/kimchi/tests/test_mock_storagevolume.py
create mode 100644 src/wok/plugins/kimchi/tests/test_mockmodel.py
create mode 100644 src/wok/plugins/kimchi/tests/test_model.py
create mode 100644 src/wok/plugins/kimchi/tests/test_model_network.py
create mode 100644 src/wok/plugins/kimchi/tests/test_model_storagepool.py
create mode 100644 src/wok/plugins/kimchi/tests/test_model_storagevolume.py
create mode 100644 src/wok/plugins/kimchi/tests/test_networkxml.py
create mode 100644 src/wok/plugins/kimchi/tests/test_osinfo.py
create mode 100644 src/wok/plugins/kimchi/tests/test_rest.py
create mode 100644 src/wok/plugins/kimchi/tests/test_storagepoolxml.py
create mode 100644 src/wok/plugins/kimchi/tests/test_template.py
create mode 100644 src/wok/plugins/kimchi/tests/test_vmtemplate.py
create mode 100644 src/wok/plugins/kimchi/tests/test_yumparser.py
create mode 100644 src/wok/plugins/kimchi/tests/utils.py
create mode 100644 src/wok/plugins/kimchi/ui/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/config/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/config/tab-ext.xml
create mode 100644 src/wok/plugins/kimchi/ui/css/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/guest-edit.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/guest-storage-add.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/host.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/icon.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/list.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/network.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/report-add.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/report-rename.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/repository-add.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/repository-edit.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/storage.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/storagepool-add-volume.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template-edit.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template_add.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template_list.css
create mode 100644 src/wok/plugins/kimchi/ui/images/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-centos.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-debian.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-fedora.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-gentoo.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-opensuse.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-ubuntu.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-vm.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/ac22_pause.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/ac22_pause_grey.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/ac24_resume.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/ac24_resume_grey.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow-down-black.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow-down-disable.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow-down.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow-up.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow_out.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/group.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/host-icon-sprite.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-back.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-camera.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-design.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-detail.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-iso.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-list.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-load.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-local.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-power-down.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-power-up.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-qcow2.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-raw.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-remote.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-reset.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-search.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-sort.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-tree.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-user.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-volume-default.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/kimchi-loading15x15.gif
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/loading.gif
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/user.png
create mode 100644 src/wok/plugins/kimchi/ui/js/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.api.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_edit_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_media_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_storage_add.main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.host.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.network.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.storage_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.storagepool_add_volume_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.template_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.template_edit_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.template_main.js
create mode 100644 src/wok/plugins/kimchi/ui/pages/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/guest-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/guest-edit.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/guest-storage-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/guest.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/guests.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/dita-help.xsl
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/kimchi.css
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/host.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/i18n.json.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/network.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/report-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/report-rename.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/repository-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/repository-edit.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/storage.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/storagepool-add-volume.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/storagepool-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/template-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/template-edit.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/templates.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/robots.txt
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/atKeynames.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/bitmap.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/css/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/css/spice.css
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/cursor.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/display.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/enums.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/inputs.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/lz.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/main.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/pages/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/pages/spice_auto.html
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/playback.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/png.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/quic.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/resize.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/simulatecursor.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spicearraybuffer.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spiceconn.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spicedataview.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spicemsg.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spicetype.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/jsbn.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/prng4.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/rng.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/rsa.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/sha1.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/ticket.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/utils.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/webm.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/wire.js
create mode 100644 src/wok/plugins/kimchi/utils.py
create mode 100644 src/wok/plugins/kimchi/vmtemplate.py
create mode 100644 src/wok/plugins/kimchi/vnc.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/Makefile.am
create mode 100644 src/wok/plugins/kimchi/xmlutils/__init__.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/cpu.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/disk.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/graphics.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/interface.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/network.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/qemucmdline.py
create mode 100644 src/wok/plugins/kimchi/yumparser.py
create mode 100644 src/wok/plugins/sample/API.json
create mode 100644 src/wok/plugins/sample/Makefile.am
create mode 100644 src/wok/plugins/sample/__init__.py
create mode 120000 src/wok/plugins/sample/config.status
create mode 100644 src/wok/plugins/sample/i18n.py
create mode 100644 src/wok/plugins/sample/model.py
create mode 100644 src/wok/plugins/sample/po/LINGUAS
create mode 100644 src/wok/plugins/sample/po/Makefile.in.in
create mode 100644 src/wok/plugins/sample/po/Makevars
create mode 100644 src/wok/plugins/sample/po/POTFILES.in
create mode 100644 src/wok/plugins/sample/po/en_US.po
create mode 100755 src/wok/plugins/sample/po/gen-pot
create mode 100644 src/wok/plugins/sample/po/pt_BR.po
create mode 100644 src/wok/plugins/sample/po/sample.pot
create mode 100644 src/wok/plugins/sample/po/zh_CN.po
create mode 100644 src/wok/plugins/sample/sample.conf.in
create mode 100644 src/wok/plugins/sample/ui/Makefile.am
create mode 100644 src/wok/plugins/sample/ui/config/Makefile.am
create mode 100644 src/wok/plugins/sample/ui/config/tab-ext.xml
create mode 100644 src/wok/plugins/sample/ui/css/.gitignore
create mode 100644 src/wok/plugins/sample/ui/images/.gitignore
create mode 100644 src/wok/plugins/sample/ui/js/.gitignore
create mode 100644 src/wok/plugins/sample/ui/js/Makefile.am
create mode 100644 src/wok/plugins/sample/ui/js/util.js
create mode 100644 src/wok/plugins/sample/ui/libs/.gitignore
create mode 100644 src/wok/plugins/sample/ui/pages/Makefile.am
create mode 100644 src/wok/plugins/sample/ui/pages/help/en_US/sample-tab1.html
create mode 100644 src/wok/plugins/sample/ui/pages/help/en_US/sample-tab2.html
create mode 100644 src/wok/plugins/sample/ui/pages/i18n.json.tmpl
create mode 100644 src/wok/plugins/sample/ui/pages/sample-tab1.html.tmpl
create mode 100644 src/wok/plugins/sample/ui/pages/sample-tab2.html.tmpl
--
2.4.3
2
9
[PATCH] Issue #704: page refreshing in Wok when no plugins installed
by pvital@linux.vnet.ibm.com 30 Sep '15
by pvital@linux.vnet.ibm.com 30 Sep '15
30 Sep '15
From: Atreyee <atreyee(a)linux.vnet.ibm.com>
This patch fixes the issue of continuous page refresh once we logged into
wok running without any plugin installed.
Page url was switching between '/#' and '/undefined' . With the existing
UI code, a infinite loop got created for loading the page when no plugin
installed.
Signed-off-by: Atreyee <atreyee(a)linux.vnet.ibm.com>
---
ui/css/theme-default/message.css | 10 ++++++++++
ui/js/src/wok.main.js | 15 +++++++++++++--
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/ui/css/theme-default/message.css b/ui/css/theme-default/message.css
index c3f9b03..e77886b 100644
--- a/ui/css/theme-default/message.css
+++ b/ui/css/theme-default/message.css
@@ -133,3 +133,13 @@
border: 2px solid #444;
color: #444;
}
+
+.noPluginMessage{
+ font-size: 18px;
+ height: 48px;
+ line-height: 48px;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ padding-left: 10px;
+ padding-top:10px;
+
+}
diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
index 570743d..447140e 100644
--- a/ui/js/src/wok.main.js
+++ b/ui/js/src/wok.main.js
@@ -102,10 +102,15 @@ wok.main = function() {
var defaultTab = tabs[0]
var defaultTabPath = defaultTab && defaultTab['path']
+
+ //redirect to empty page when no plugin installed
+ if(tabs.length===0){
+ DEFAULT_HASH = 'wok-empty';
+ }else{
// Remove file extension from 'defaultTabPath'
DEFAULT_HASH = defaultTabPath &&
defaultTabPath.substring(0, defaultTabPath.lastIndexOf('.'))
-
+ }
$('#nav-menu').append(genTabs(tabs));
callback && callback();
@@ -136,11 +141,16 @@ wok.main = function() {
* and clear location.hash to jump to home page.
*/
var tab = $('#nav-menu a[href="' + url + '"]');
- if (tab.length === 0) {
+ if (tab.length === 0 && url!='wok-empty.html') {
location.hash = '';
return;
}
+ //Remove the tab arrow indicator for no plugin
+ if(url=='wok-empty.html'){
+ $('.menu-arrow').hide();
+ $('#main').html('No plugins installed currently.You can download the available plugins <a href="https://github.com/kimchi-project/kimchi">Kimchi</a> and <a href="https://github.com/kimchi-project/ginger">Ginger</a> from Github').addClass('noPluginMessage');
+ }else{
// Animate arrow indicator.
var left = $(tab).parent().position().left;
var width = $(tab).parent().width();
@@ -163,6 +173,7 @@ wok.main = function() {
}
// Load page content.
loadPage(url);
+ }
};
/**
--
2.4.3
3
2
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Kimchi allows to attach Raw volumes that are not disk images when editing
a VM. With this, it's possible attach a XML or PDF file (that qemu-img and
libvirt see as raw volumes) as a disk into the guest.
This patch-set introduces a check for all 'raw' volumes to see if them are
valid disks or not (by using libmagic), and then, pass this information to
the front-end to make a correct list of volumes option when attaching a new
one into a VM.
Paulo Vital (3):
Raw volumes validation: update contrib and README
Raw volumes validation: back-end and front-end
Raw volumes validation: update tests
contrib/DEBIAN/control.in | 3 ++-
contrib/kimchi.spec.fedora.in | 1 +
contrib/kimchi.spec.suse.in | 1 +
docs/API.md | 1 +
docs/README.md | 11 +++++------
src/kimchi/control/storagevolumes.py | 3 ++-
src/kimchi/mockmodel.py | 6 ++++--
src/kimchi/model/storagevolumes.py | 15 ++++++++++++++-
tests/test_model_storagevolume.py | 2 +-
ui/js/src/kimchi.guest_storage_add.main.js | 2 +-
10 files changed, 32 insertions(+), 13 deletions(-)
--
2.4.3
4
6
30 Sep '15
This patch avoid any package update interruption that could be caused by
kimchid service. This is important because if kimchid is stopped or
restarted during a package update process, the system can become
unstable.
A part II is being implemented to let kimchi knows whether a package
update is happening when kimchid is (re)started.
Jose Ricardo Ziviani (2):
Make the package update process indendent of Kimchi
Set systemd KillMode to process
contrib/wokd.service.fedora | 1 +
plugins/kimchi/swupdate.py | 13 ++++++++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
--
1.9.1
3
5
Hi all,
Kimchi was initially created under LGPLv2, but after importing LGPLv3
code (websockify) to Kimchi source code, it was re-licensed to LGPLv3
(the current license).
As Kimchi doesn't import any LGPLv3 code any more, I am wondering what
do you think in re-licensing it back to LGPLv2.
So Wok and Kimchi would have the same licenses: backend under LGPLv2 and
frontend under Apache v2.
Please, let me know your thoughts on it.
Regards,
Aline Manera
3
2
v4:
- merged with "Improve VCPU code" patch
- grouped similar commits together
v3:
- included commit "Hot add/remove CPUs on PPC"
v2:
- patch rebased
This patchset refactors part of the code related to updating VM CPUs.
I am aware of two tests which are failing with this patchset. They'll be worked
on before the final version.
Crístian Deives (3):
Use locks to prevent concurrent updates to VMs
Update VCPU by using libvirt function
Check if the VM update params are valid for the current state
Crístian Viana (1):
Hot add/remove CPUs on PPC
Jose Ricardo Ziviani (1):
Forbid user to edit CPU value if topology is defined
src/kimchi/i18n.py | 6 ++
src/kimchi/mockmodel.py | 48 +++++-------
src/kimchi/model/vms.py | 198 +++++++++++++++++++++++++++++++++++++++++++++---
tests/test_rest.py | 3 +-
4 files changed, 215 insertions(+), 40 deletions(-)
--
1.9.1
2
4
Hi all,
Due the separation between Wok and Kimchi as a plugin the build process
changed a little bit.
We need to build the plugin (Kimchi) and the framework (wok).
Please, follow the steps below:
# To build Kimchi
# You need to repeat those steps for each plugin your have in your
source code
cd plugins/kimchi
sudo ./autogen.sh --system && sudo make
# To build Wok
cd ../../
sudo ./autogen.sh --system && sudo make
After that you can start the wokd service:
sudo src/wrokd
Regards,
Aline Manera
1
0
Hi all,
The wok branch was merged into master branch.
So please, start using master branch for your development which contains
the last changes for wok and new UI.
Regards,
Aline Manera
2
2
28 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
This patch-set moves the plugins structure to a new path inside src/wok, and fix
and modify all necessary build, config and code files to use the new structure.
In addition, fix all bugs related to build and install Wok and Kimchi in the
system and generate the necessary RPM and DEB files.
Paulo Vital (5):
Move plugins directory to src/wok structure.
Change relative to absolute imports in Kimchi.
Update build and config files to new plugins path.
Make dynamic the state_dir path in Kimchi.
Adding COPYING and CONTRIBUTE files into Kimchi.
Makefile.am | 20 +-
configure.ac | 16 +-
plugins/Makefile.am | 25 -
plugins/__init__.py | 18 -
plugins/kimchi/.gitignore | 37 -
plugins/kimchi/API.json | 836 -------
plugins/kimchi/INSTALL | 369 ---
plugins/kimchi/Makefile.am | 161 --
plugins/kimchi/README.md | 1 -
plugins/kimchi/VERSION | 1 -
plugins/kimchi/__init__.py | 21 -
plugins/kimchi/autogen.sh | 21 -
plugins/kimchi/build-aux/config.rpath | 672 ------
plugins/kimchi/build-aux/genChangelog | 25 -
plugins/kimchi/build-aux/pkg-version | 59 -
plugins/kimchi/config.py.in | 144 --
plugins/kimchi/config.rpath | 672 ------
plugins/kimchi/configure.ac | 119 -
plugins/kimchi/contrib/DEBIAN/Makefile.am | 17 -
plugins/kimchi/contrib/DEBIAN/control.in | 30 -
plugins/kimchi/contrib/Makefile.am | 34 -
plugins/kimchi/contrib/check_i18n.py | 82 -
plugins/kimchi/contrib/kimchi.spec.fedora.in | 119 -
plugins/kimchi/contrib/kimchi.spec.suse.in | 107 -
plugins/kimchi/contrib/make-deb.sh.in | 15 -
plugins/kimchi/control/Makefile.am | 27 -
plugins/kimchi/control/__init__.py | 26 -
plugins/kimchi/control/config.py | 57 -
plugins/kimchi/control/cpuinfo.py | 37 -
plugins/kimchi/control/debugreports.py | 61 -
plugins/kimchi/control/groups.py | 28 -
plugins/kimchi/control/host.py | 157 --
plugins/kimchi/control/interfaces.py | 46 -
plugins/kimchi/control/networks.py | 54 -
plugins/kimchi/control/peers.py | 29 -
plugins/kimchi/control/storagepools.py | 116 -
plugins/kimchi/control/storageservers.py | 60 -
plugins/kimchi/control/storagevolumes.py | 83 -
plugins/kimchi/control/templates.py | 58 -
plugins/kimchi/control/users.py | 35 -
plugins/kimchi/control/vm/Makefile.am | 26 -
plugins/kimchi/control/vm/__init__.py | 26 -
plugins/kimchi/control/vm/hostdevs.py | 43 -
plugins/kimchi/control/vm/ifaces.py | 45 -
plugins/kimchi/control/vm/snapshots.py | 58 -
plugins/kimchi/control/vm/storages.py | 45 -
plugins/kimchi/control/vms.py | 67 -
plugins/kimchi/disks.py | 196 --
plugins/kimchi/distroloader.py | 67 -
plugins/kimchi/distros.d/Makefile.am | 22 -
plugins/kimchi/distros.d/debian.json | 9 -
plugins/kimchi/distros.d/fedora.json | 30 -
plugins/kimchi/distros.d/gentoo.json | 9 -
plugins/kimchi/distros.d/opensuse.json | 23 -
plugins/kimchi/distros.d/ubuntu.json | 37 -
plugins/kimchi/docs/API.md | 1116 ---------
plugins/kimchi/docs/Makefile.am | 28 -
plugins/kimchi/docs/README-federation.md | 60 -
plugins/kimchi/docs/README.md | 247 --
plugins/kimchi/docs/kimchi-guest.png | Bin 192281 -> 0 bytes
plugins/kimchi/docs/kimchi-login.png | Bin 318041 -> 0 bytes
plugins/kimchi/docs/kimchi-templates.png | Bin 329678 -> 0 bytes
plugins/kimchi/i18n.py | 335 ---
plugins/kimchi/imageinfo.py | 72 -
plugins/kimchi/iscsi.py | 88 -
plugins/kimchi/isoinfo.py | 506 -----
plugins/kimchi/kimchi.conf | 37 -
plugins/kimchi/kvmusertests.py | 79 -
plugins/kimchi/m4/ac_python_module.m4 | 30 -
plugins/kimchi/m4/gettext.m4 | 383 ----
plugins/kimchi/m4/iconv.m4 | 214 --
plugins/kimchi/m4/intlmacosx.m4 | 51 -
plugins/kimchi/m4/lib-ld.m4 | 110 -
plugins/kimchi/m4/lib-link.m4 | 774 -------
plugins/kimchi/m4/lib-prefix.m4 | 224 --
plugins/kimchi/m4/nls.m4 | 32 -
plugins/kimchi/m4/po.m4 | 449 ----
plugins/kimchi/m4/progtest.m4 | 92 -
plugins/kimchi/mockmodel.py | 627 ------
plugins/kimchi/model/Makefile.am | 25 -
plugins/kimchi/model/__init__.py | 18 -
plugins/kimchi/model/config.py | 176 --
plugins/kimchi/model/cpuinfo.py | 126 --
plugins/kimchi/model/debugreports.py | 213 --
plugins/kimchi/model/diskutils.py | 75 -
plugins/kimchi/model/featuretests.py | 259 ---
plugins/kimchi/model/groups.py | 67 -
plugins/kimchi/model/host.py | 476 ----
plugins/kimchi/model/hostdev.py | 324 ---
plugins/kimchi/model/interfaces.py | 44 -
plugins/kimchi/model/libvirtconnection.py | 136 --
plugins/kimchi/model/libvirtstoragepool.py | 264 ---
plugins/kimchi/model/model.py | 52 -
plugins/kimchi/model/networks.py | 382 ----
plugins/kimchi/model/peers.py | 72 -
plugins/kimchi/model/storagepools.py | 490 ----
plugins/kimchi/model/storageservers.py | 81 -
plugins/kimchi/model/storagetargets.py | 122 -
plugins/kimchi/model/storagevolumes.py | 542 -----
plugins/kimchi/model/templates.py | 303 ---
plugins/kimchi/model/users.py | 90 -
plugins/kimchi/model/utils.py | 161 --
plugins/kimchi/model/vmhostdevs.py | 336 ---
plugins/kimchi/model/vmifaces.py | 186 --
plugins/kimchi/model/vms.py | 1307 -----------
plugins/kimchi/model/vmsnapshots.py | 204 --
plugins/kimchi/model/vmstorages.py | 252 ---
plugins/kimchi/netinfo.py | 216 --
plugins/kimchi/network.py | 62 -
plugins/kimchi/osinfo.py | 213 --
plugins/kimchi/po/LINGUAS | 11 -
plugins/kimchi/po/Makefile.in.in | 398 ----
plugins/kimchi/po/Makevars | 41 -
plugins/kimchi/po/POTFILES.in | 3 -
plugins/kimchi/po/de_DE.po | 2288 -------------------
plugins/kimchi/po/en_US.po | 2075 -----------------
plugins/kimchi/po/es_ES.po | 2305 -------------------
plugins/kimchi/po/fr_FR.po | 2338 -------------------
plugins/kimchi/po/gen-pot.in | 9 -
plugins/kimchi/po/it_IT.po | 2274 -------------------
plugins/kimchi/po/ja_JP.po | 2269 -------------------
plugins/kimchi/po/kimchi.pot | 2074 -----------------
plugins/kimchi/po/ko_KR.po | 2197 ------------------
plugins/kimchi/po/pt_BR.po | 2369 --------------------
plugins/kimchi/po/ru_RU.po | 2198 ------------------
plugins/kimchi/po/zh_CN.po | 2186 ------------------
plugins/kimchi/po/zh_TW.po | 2138 ------------------
plugins/kimchi/repositories.py | 529 -----
plugins/kimchi/root.py | 69 -
plugins/kimchi/scan.py | 89 -
plugins/kimchi/screenshot.py | 184 --
plugins/kimchi/swupdate.py | 263 ---
plugins/kimchi/template.conf | 47 -
plugins/kimchi/tests/Makefile.am | 50 -
plugins/kimchi/tests/iso_gen.py | 212 --
plugins/kimchi/tests/run_tests.sh.in | 55 -
plugins/kimchi/tests/test_authorization.py | 178 --
plugins/kimchi/tests/test_config.py.in | 267 ---
plugins/kimchi/tests/test_host.py | 206 --
plugins/kimchi/tests/test_mock_network.py | 73 -
plugins/kimchi/tests/test_mock_storagepool.py | 147 --
plugins/kimchi/tests/test_mock_storagevolume.py | 98 -
plugins/kimchi/tests/test_mockmodel.py | 141 --
plugins/kimchi/tests/test_model.py | 1248 -----------
plugins/kimchi/tests/test_model_network.py | 149 --
plugins/kimchi/tests/test_model_storagepool.py | 123 -
plugins/kimchi/tests/test_model_storagevolume.py | 280 ---
plugins/kimchi/tests/test_networkxml.py | 172 --
plugins/kimchi/tests/test_osinfo.py | 69 -
plugins/kimchi/tests/test_rest.py | 1327 -----------
plugins/kimchi/tests/test_storagepoolxml.py | 171 --
plugins/kimchi/tests/test_template.py | 387 ----
plugins/kimchi/tests/test_vmtemplate.py | 116 -
plugins/kimchi/tests/test_yumparser.py | 162 --
plugins/kimchi/tests/utils.py | 260 ---
plugins/kimchi/ui/Makefile.am | 20 -
plugins/kimchi/ui/config/Makefile.am | 22 -
plugins/kimchi/ui/config/tab-ext.xml | 38 -
plugins/kimchi/ui/css/Makefile.am | 26 -
plugins/kimchi/ui/css/theme-default/guest-edit.css | 424 ----
.../ui/css/theme-default/guest-storage-add.css | 81 -
plugins/kimchi/ui/css/theme-default/host.css | 287 ---
plugins/kimchi/ui/css/theme-default/icon.css | 106 -
plugins/kimchi/ui/css/theme-default/list.css | 326 ---
plugins/kimchi/ui/css/theme-default/network.css | 267 ---
plugins/kimchi/ui/css/theme-default/report-add.css | 37 -
.../kimchi/ui/css/theme-default/report-rename.css | 39 -
.../kimchi/ui/css/theme-default/repository-add.css | 42 -
.../ui/css/theme-default/repository-edit.css | 88 -
plugins/kimchi/ui/css/theme-default/storage.css | 550 -----
.../css/theme-default/storagepool-add-volume.css | 36 -
.../kimchi/ui/css/theme-default/template-edit.css | 175 --
plugins/kimchi/ui/css/theme-default/template.css | 85 -
.../kimchi/ui/css/theme-default/template_add.css | 317 ---
.../kimchi/ui/css/theme-default/template_list.css | 267 ---
plugins/kimchi/ui/images/Makefile.am | 22 -
plugins/kimchi/ui/images/icon-centos.png | Bin 4734 -> 0 bytes
plugins/kimchi/ui/images/icon-debian.png | Bin 4239 -> 0 bytes
plugins/kimchi/ui/images/icon-fedora.png | Bin 4449 -> 0 bytes
plugins/kimchi/ui/images/icon-gentoo.png | Bin 15307 -> 0 bytes
plugins/kimchi/ui/images/icon-opensuse.png | Bin 3046 -> 0 bytes
plugins/kimchi/ui/images/icon-ubuntu.png | Bin 4818 -> 0 bytes
plugins/kimchi/ui/images/icon-vm.png | Bin 2976 -> 0 bytes
plugins/kimchi/ui/images/theme-default/Makefile.am | 20 -
.../kimchi/ui/images/theme-default/ac22_pause.png | Bin 1219 -> 0 bytes
.../ui/images/theme-default/ac22_pause_grey.png | Bin 1175 -> 0 bytes
.../kimchi/ui/images/theme-default/ac24_resume.png | Bin 1341 -> 0 bytes
.../ui/images/theme-default/ac24_resume_grey.png | Bin 1282 -> 0 bytes
.../ui/images/theme-default/arrow-down-black.png | Bin 2942 -> 0 bytes
.../ui/images/theme-default/arrow-down-disable.png | Bin 472 -> 0 bytes
.../kimchi/ui/images/theme-default/arrow-down.png | Bin 537 -> 0 bytes
.../kimchi/ui/images/theme-default/arrow-up.png | Bin 510 -> 0 bytes
.../kimchi/ui/images/theme-default/arrow_out.png | Bin 3048 -> 0 bytes
plugins/kimchi/ui/images/theme-default/group.png | Bin 1703 -> 0 bytes
.../ui/images/theme-default/host-icon-sprite.png | Bin 1034 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-back.png | Bin 244 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-camera.png | Bin 4860 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-design.png | Bin 4562 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-detail.png | Bin 3079 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-iso.png | Bin 4188 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-list.png | Bin 2983 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-load.png | Bin 3678 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-local.png | Bin 425 -> 0 bytes
.../ui/images/theme-default/icon-power-down.png | Bin 4372 -> 0 bytes
.../ui/images/theme-default/icon-power-up.png | Bin 4367 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-qcow2.png | Bin 4684 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-raw.png | Bin 4679 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-remote.png | Bin 1005 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-reset.png | Bin 4576 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-search.png | Bin 4197 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-sort.png | Bin 3421 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-tree.png | Bin 3526 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-user.png | Bin 5366 -> 0 bytes
.../images/theme-default/icon-volume-default.png | Bin 4265 -> 0 bytes
.../images/theme-default/kimchi-loading15x15.gif | Bin 1653 -> 0 bytes
plugins/kimchi/ui/images/theme-default/loading.gif | Bin 2190 -> 0 bytes
plugins/kimchi/ui/images/theme-default/user.png | Bin 1322 -> 0 bytes
plugins/kimchi/ui/js/Makefile.am | 27 -
plugins/kimchi/ui/js/src/kimchi.api.js | 1355 -----------
plugins/kimchi/ui/js/src/kimchi.guest_add_main.js | 86 -
plugins/kimchi/ui/js/src/kimchi.guest_edit_main.js | 759 -------
plugins/kimchi/ui/js/src/kimchi.guest_main.js | 511 -----
.../kimchi/ui/js/src/kimchi.guest_media_main.js | 56 -
.../ui/js/src/kimchi.guest_storage_add.main.js | 199 --
plugins/kimchi/ui/js/src/kimchi.host.js | 858 -------
plugins/kimchi/ui/js/src/kimchi.main.js | 26 -
plugins/kimchi/ui/js/src/kimchi.network.js | 442 ----
plugins/kimchi/ui/js/src/kimchi.report_add_main.js | 72 -
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 66 -
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 96 -
.../ui/js/src/kimchi.repository_edit_main.js | 74 -
plugins/kimchi/ui/js/src/kimchi.storage_main.js | 428 ----
.../ui/js/src/kimchi.storagepool_add_main.js | 414 ----
.../js/src/kimchi.storagepool_add_volume_main.js | 179 --
.../kimchi/ui/js/src/kimchi.template_add_main.js | 441 ----
.../kimchi/ui/js/src/kimchi.template_edit_main.js | 343 ---
plugins/kimchi/ui/js/src/kimchi.template_main.js | 111 -
plugins/kimchi/ui/pages/Makefile.am | 22 -
plugins/kimchi/ui/pages/guest-add.html.tmpl | 98 -
plugins/kimchi/ui/pages/guest-edit.html.tmpl | 311 ---
.../kimchi/ui/pages/guest-storage-add.html.tmpl | 103 -
plugins/kimchi/ui/pages/guest.html.tmpl | 77 -
plugins/kimchi/ui/pages/guests.html.tmpl | 65 -
plugins/kimchi/ui/pages/help/Makefile.am | 34 -
plugins/kimchi/ui/pages/help/de_DE/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/de_DE/guests.dita | 127 --
plugins/kimchi/ui/pages/help/de_DE/host.dita | 49 -
plugins/kimchi/ui/pages/help/de_DE/network.dita | 62 -
plugins/kimchi/ui/pages/help/de_DE/storage.dita | 86 -
plugins/kimchi/ui/pages/help/de_DE/templates.dita | 112 -
plugins/kimchi/ui/pages/help/dita-help.xsl | 26 -
plugins/kimchi/ui/pages/help/en_US/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/en_US/guests.dita | 136 --
plugins/kimchi/ui/pages/help/en_US/host.dita | 70 -
plugins/kimchi/ui/pages/help/en_US/network.dita | 68 -
plugins/kimchi/ui/pages/help/en_US/storage.dita | 99 -
plugins/kimchi/ui/pages/help/en_US/templates.dita | 123 -
plugins/kimchi/ui/pages/help/es_ES/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/es_ES/guests.dita | 120 -
plugins/kimchi/ui/pages/help/es_ES/host.dita | 49 -
plugins/kimchi/ui/pages/help/es_ES/network.dita | 61 -
plugins/kimchi/ui/pages/help/es_ES/storage.dita | 86 -
plugins/kimchi/ui/pages/help/es_ES/templates.dita | 111 -
plugins/kimchi/ui/pages/help/fr_FR/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/fr_FR/guests.dita | 130 --
plugins/kimchi/ui/pages/help/fr_FR/host.dita | 68 -
plugins/kimchi/ui/pages/help/fr_FR/network.dita | 67 -
plugins/kimchi/ui/pages/help/fr_FR/storage.dita | 93 -
plugins/kimchi/ui/pages/help/fr_FR/templates.dita | 120 -
plugins/kimchi/ui/pages/help/it_IT/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/it_IT/guests.dita | 123 -
plugins/kimchi/ui/pages/help/it_IT/host.dita | 51 -
plugins/kimchi/ui/pages/help/it_IT/network.dita | 63 -
plugins/kimchi/ui/pages/help/it_IT/storage.dita | 91 -
plugins/kimchi/ui/pages/help/it_IT/templates.dita | 115 -
plugins/kimchi/ui/pages/help/ja_JP/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/ja_JP/guests.dita | 172 --
plugins/kimchi/ui/pages/help/ja_JP/host.dita | 70 -
plugins/kimchi/ui/pages/help/ja_JP/network.dita | 83 -
plugins/kimchi/ui/pages/help/ja_JP/storage.dita | 120 -
plugins/kimchi/ui/pages/help/ja_JP/templates.dita | 150 --
plugins/kimchi/ui/pages/help/kimchi.css | 208 --
plugins/kimchi/ui/pages/help/ko_KR/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/ko_KR/guests.dita | 119 -
plugins/kimchi/ui/pages/help/ko_KR/host.dita | 47 -
plugins/kimchi/ui/pages/help/ko_KR/network.dita | 61 -
plugins/kimchi/ui/pages/help/ko_KR/storage.dita | 86 -
plugins/kimchi/ui/pages/help/ko_KR/templates.dita | 111 -
plugins/kimchi/ui/pages/help/pt_BR/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/pt_BR/guests.dita | 137 --
plugins/kimchi/ui/pages/help/pt_BR/host.dita | 74 -
plugins/kimchi/ui/pages/help/pt_BR/network.dita | 72 -
plugins/kimchi/ui/pages/help/pt_BR/storage.dita | 102 -
plugins/kimchi/ui/pages/help/pt_BR/templates.dita | 127 --
plugins/kimchi/ui/pages/help/ru_RU/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/ru_RU/guests.dita | 122 -
plugins/kimchi/ui/pages/help/ru_RU/host.dita | 48 -
plugins/kimchi/ui/pages/help/ru_RU/network.dita | 61 -
plugins/kimchi/ui/pages/help/ru_RU/storage.dita | 88 -
plugins/kimchi/ui/pages/help/ru_RU/templates.dita | 111 -
plugins/kimchi/ui/pages/help/zh_CN/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/zh_CN/guests.dita | 118 -
plugins/kimchi/ui/pages/help/zh_CN/host.dita | 45 -
plugins/kimchi/ui/pages/help/zh_CN/network.dita | 61 -
plugins/kimchi/ui/pages/help/zh_CN/storage.dita | 84 -
plugins/kimchi/ui/pages/help/zh_CN/templates.dita | 111 -
plugins/kimchi/ui/pages/help/zh_TW/Makefile.am | 23 -
plugins/kimchi/ui/pages/help/zh_TW/guests.dita | 120 -
plugins/kimchi/ui/pages/help/zh_TW/host.dita | 50 -
plugins/kimchi/ui/pages/help/zh_TW/network.dita | 61 -
plugins/kimchi/ui/pages/help/zh_TW/storage.dita | 88 -
plugins/kimchi/ui/pages/help/zh_TW/templates.dita | 112 -
plugins/kimchi/ui/pages/host.html.tmpl | 177 --
plugins/kimchi/ui/pages/i18n.json.tmpl | 187 --
plugins/kimchi/ui/pages/network.html.tmpl | 133 --
plugins/kimchi/ui/pages/report-add.html.tmpl | 56 -
plugins/kimchi/ui/pages/report-rename.html.tmpl | 56 -
plugins/kimchi/ui/pages/repository-add.html.tmpl | 113 -
plugins/kimchi/ui/pages/repository-edit.html.tmpl | 117 -
plugins/kimchi/ui/pages/storage.html.tmpl | 143 --
.../ui/pages/storagepool-add-volume.html.tmpl | 79 -
plugins/kimchi/ui/pages/storagepool-add.html.tmpl | 186 --
plugins/kimchi/ui/pages/template-add.html.tmpl | 233 --
plugins/kimchi/ui/pages/template-edit.html.tmpl | 193 --
plugins/kimchi/ui/pages/templates.html.tmpl | 77 -
plugins/kimchi/ui/robots.txt | 2 -
plugins/kimchi/ui/spice-html5/Makefile.am | 25 -
plugins/kimchi/ui/spice-html5/atKeynames.js | 183 --
plugins/kimchi/ui/spice-html5/bitmap.js | 51 -
plugins/kimchi/ui/spice-html5/css/Makefile.am | 20 -
plugins/kimchi/ui/spice-html5/css/spice.css | 118 -
plugins/kimchi/ui/spice-html5/cursor.js | 110 -
plugins/kimchi/ui/spice-html5/display.js | 823 -------
plugins/kimchi/ui/spice-html5/enums.js | 324 ---
plugins/kimchi/ui/spice-html5/inputs.js | 280 ---
plugins/kimchi/ui/spice-html5/lz.js | 166 --
plugins/kimchi/ui/spice-html5/main.js | 231 --
plugins/kimchi/ui/spice-html5/pages/Makefile.am | 20 -
.../kimchi/ui/spice-html5/pages/spice_auto.html | 200 --
plugins/kimchi/ui/spice-html5/playback.js | 278 ---
plugins/kimchi/ui/spice-html5/png.js | 256 ---
plugins/kimchi/ui/spice-html5/quic.js | 1335 -----------
plugins/kimchi/ui/spice-html5/resize.js | 70 -
plugins/kimchi/ui/spice-html5/simulatecursor.js | 202 --
plugins/kimchi/ui/spice-html5/spicearraybuffer.js | 58 -
plugins/kimchi/ui/spice-html5/spiceconn.js | 460 ----
plugins/kimchi/ui/spice-html5/spicedataview.js | 120 -
plugins/kimchi/ui/spice-html5/spicemsg.js | 1047 ---------
plugins/kimchi/ui/spice-html5/spicetype.js | 473 ----
.../kimchi/ui/spice-html5/thirdparty/Makefile.am | 20 -
plugins/kimchi/ui/spice-html5/thirdparty/jsbn.js | 589 -----
plugins/kimchi/ui/spice-html5/thirdparty/prng4.js | 79 -
plugins/kimchi/ui/spice-html5/thirdparty/rng.js | 102 -
plugins/kimchi/ui/spice-html5/thirdparty/rsa.js | 146 --
plugins/kimchi/ui/spice-html5/thirdparty/sha1.js | 346 ---
plugins/kimchi/ui/spice-html5/ticket.js | 250 ---
plugins/kimchi/ui/spice-html5/utils.js | 265 ---
plugins/kimchi/ui/spice-html5/webm.js | 553 -----
plugins/kimchi/ui/spice-html5/wire.js | 123 -
plugins/kimchi/utils.py | 39 -
plugins/kimchi/vmtemplate.py | 431 ----
plugins/kimchi/vnc.py | 77 -
plugins/kimchi/xmlutils/Makefile.am | 25 -
plugins/kimchi/xmlutils/__init__.py | 18 -
plugins/kimchi/xmlutils/cpu.py | 60 -
plugins/kimchi/xmlutils/disk.py | 164 --
plugins/kimchi/xmlutils/graphics.py | 45 -
plugins/kimchi/xmlutils/interface.py | 61 -
plugins/kimchi/xmlutils/network.py | 122 -
plugins/kimchi/xmlutils/qemucmdline.py | 45 -
plugins/kimchi/yumparser.py | 283 ---
plugins/sample/API.json | 56 -
plugins/sample/Makefile.am | 29 -
plugins/sample/__init__.py | 97 -
plugins/sample/config.status | 1 -
plugins/sample/i18n.py | 40 -
plugins/sample/model.py | 131 --
plugins/sample/po/LINGUAS | 3 -
plugins/sample/po/Makefile.in.in | 400 ----
plugins/sample/po/Makevars | 41 -
plugins/sample/po/POTFILES.in | 2 -
plugins/sample/po/en_US.po | 21 -
plugins/sample/po/gen-pot | 9 -
plugins/sample/po/pt_BR.po | 24 -
plugins/sample/po/sample.pot | 21 -
plugins/sample/po/zh_CN.po | 24 -
plugins/sample/sample.conf.in | 27 -
plugins/sample/ui/Makefile.am | 22 -
plugins/sample/ui/config/Makefile.am | 21 -
plugins/sample/ui/config/tab-ext.xml | 17 -
plugins/sample/ui/css/.gitignore | 0
plugins/sample/ui/images/.gitignore | 0
plugins/sample/ui/js/.gitignore | 0
plugins/sample/ui/js/Makefile.am | 20 -
plugins/sample/ui/js/util.js | 33 -
plugins/sample/ui/libs/.gitignore | 0
plugins/sample/ui/pages/Makefile.am | 20 -
.../sample/ui/pages/help/en_US/sample-tab1.html | 1 -
.../sample/ui/pages/help/en_US/sample-tab2.html | 1 -
plugins/sample/ui/pages/i18n.json.tmpl | 26 -
plugins/sample/ui/pages/sample-tab1.html.tmpl | 30 -
plugins/sample/ui/pages/sample-tab2.html.tmpl | 30 -
src/wok/Makefile.am | 2 +-
src/wok/config.py.in | 7 +-
src/wok/plugins/Makefile.am | 25 +
src/wok/plugins/__init__.py | 18 +
src/wok/plugins/kimchi/.gitignore | 37 +
src/wok/plugins/kimchi/API.json | 836 +++++++
src/wok/plugins/kimchi/CONTRIBUTE.md | 16 +
src/wok/plugins/kimchi/COPYING | 19 +
src/wok/plugins/kimchi/COPYING.ASL2 | 202 ++
src/wok/plugins/kimchi/COPYING.LGPL | 165 ++
src/wok/plugins/kimchi/ChangeLog | 2155 ++++++++++++++++++
src/wok/plugins/kimchi/INSTALL | 369 +++
src/wok/plugins/kimchi/Makefile.am | 165 ++
src/wok/plugins/kimchi/README.md | 1 +
src/wok/plugins/kimchi/VERSION | 1 +
src/wok/plugins/kimchi/__init__.py | 21 +
src/wok/plugins/kimchi/autogen.sh | 21 +
src/wok/plugins/kimchi/build-aux/config.rpath | 672 ++++++
src/wok/plugins/kimchi/build-aux/genChangelog | 25 +
src/wok/plugins/kimchi/build-aux/pkg-version | 59 +
src/wok/plugins/kimchi/config.py.in | 144 ++
src/wok/plugins/kimchi/config.rpath | 672 ++++++
src/wok/plugins/kimchi/configure.ac | 119 +
src/wok/plugins/kimchi/contrib/DEBIAN/Makefile.am | 17 +
src/wok/plugins/kimchi/contrib/DEBIAN/control.in | 30 +
src/wok/plugins/kimchi/contrib/Makefile.am | 34 +
src/wok/plugins/kimchi/contrib/check_i18n.py | 82 +
.../plugins/kimchi/contrib/kimchi.spec.fedora.in | 120 +
src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in | 108 +
src/wok/plugins/kimchi/contrib/make-deb.sh.in | 15 +
src/wok/plugins/kimchi/control/Makefile.am | 27 +
src/wok/plugins/kimchi/control/__init__.py | 26 +
src/wok/plugins/kimchi/control/config.py | 57 +
src/wok/plugins/kimchi/control/cpuinfo.py | 37 +
src/wok/plugins/kimchi/control/debugreports.py | 61 +
src/wok/plugins/kimchi/control/groups.py | 28 +
src/wok/plugins/kimchi/control/host.py | 157 ++
src/wok/plugins/kimchi/control/interfaces.py | 46 +
src/wok/plugins/kimchi/control/networks.py | 54 +
src/wok/plugins/kimchi/control/peers.py | 29 +
src/wok/plugins/kimchi/control/storagepools.py | 116 +
src/wok/plugins/kimchi/control/storageservers.py | 60 +
src/wok/plugins/kimchi/control/storagevolumes.py | 83 +
src/wok/plugins/kimchi/control/templates.py | 58 +
src/wok/plugins/kimchi/control/users.py | 35 +
src/wok/plugins/kimchi/control/vm/Makefile.am | 26 +
src/wok/plugins/kimchi/control/vm/__init__.py | 26 +
src/wok/plugins/kimchi/control/vm/hostdevs.py | 43 +
src/wok/plugins/kimchi/control/vm/ifaces.py | 45 +
src/wok/plugins/kimchi/control/vm/snapshots.py | 58 +
src/wok/plugins/kimchi/control/vm/storages.py | 45 +
src/wok/plugins/kimchi/control/vms.py | 67 +
src/wok/plugins/kimchi/disks.py | 196 ++
src/wok/plugins/kimchi/distroloader.py | 67 +
src/wok/plugins/kimchi/distros.d/Makefile.am | 22 +
src/wok/plugins/kimchi/distros.d/debian.json | 9 +
src/wok/plugins/kimchi/distros.d/fedora.json | 30 +
src/wok/plugins/kimchi/distros.d/gentoo.json | 9 +
src/wok/plugins/kimchi/distros.d/opensuse.json | 23 +
src/wok/plugins/kimchi/distros.d/ubuntu.json | 37 +
src/wok/plugins/kimchi/docs/API.md | 1116 +++++++++
src/wok/plugins/kimchi/docs/Makefile.am | 28 +
src/wok/plugins/kimchi/docs/README-federation.md | 60 +
src/wok/plugins/kimchi/docs/README.md | 247 ++
src/wok/plugins/kimchi/docs/kimchi-guest.png | Bin 0 -> 192281 bytes
src/wok/plugins/kimchi/docs/kimchi-login.png | Bin 0 -> 318041 bytes
src/wok/plugins/kimchi/docs/kimchi-templates.png | Bin 0 -> 329678 bytes
src/wok/plugins/kimchi/i18n.py | 335 +++
src/wok/plugins/kimchi/imageinfo.py | 72 +
src/wok/plugins/kimchi/iscsi.py | 88 +
src/wok/plugins/kimchi/isoinfo.py | 506 +++++
src/wok/plugins/kimchi/kimchi.conf | 37 +
src/wok/plugins/kimchi/kvmusertests.py | 79 +
src/wok/plugins/kimchi/m4/ac_python_module.m4 | 30 +
src/wok/plugins/kimchi/m4/gettext.m4 | 383 ++++
src/wok/plugins/kimchi/m4/iconv.m4 | 214 ++
src/wok/plugins/kimchi/m4/intlmacosx.m4 | 51 +
src/wok/plugins/kimchi/m4/lib-ld.m4 | 110 +
src/wok/plugins/kimchi/m4/lib-link.m4 | 774 +++++++
src/wok/plugins/kimchi/m4/lib-prefix.m4 | 224 ++
src/wok/plugins/kimchi/m4/nls.m4 | 32 +
src/wok/plugins/kimchi/m4/po.m4 | 449 ++++
src/wok/plugins/kimchi/m4/progtest.m4 | 92 +
src/wok/plugins/kimchi/mockmodel.py | 627 ++++++
src/wok/plugins/kimchi/model/Makefile.am | 25 +
src/wok/plugins/kimchi/model/__init__.py | 18 +
src/wok/plugins/kimchi/model/config.py | 176 ++
src/wok/plugins/kimchi/model/cpuinfo.py | 126 ++
src/wok/plugins/kimchi/model/debugreports.py | 213 ++
src/wok/plugins/kimchi/model/diskutils.py | 75 +
src/wok/plugins/kimchi/model/featuretests.py | 259 +++
src/wok/plugins/kimchi/model/groups.py | 67 +
src/wok/plugins/kimchi/model/host.py | 476 ++++
src/wok/plugins/kimchi/model/hostdev.py | 324 +++
src/wok/plugins/kimchi/model/interfaces.py | 44 +
src/wok/plugins/kimchi/model/libvirtconnection.py | 136 ++
src/wok/plugins/kimchi/model/libvirtstoragepool.py | 266 +++
src/wok/plugins/kimchi/model/model.py | 52 +
src/wok/plugins/kimchi/model/networks.py | 382 ++++
src/wok/plugins/kimchi/model/peers.py | 72 +
src/wok/plugins/kimchi/model/storagepools.py | 490 ++++
src/wok/plugins/kimchi/model/storageservers.py | 81 +
src/wok/plugins/kimchi/model/storagetargets.py | 122 +
src/wok/plugins/kimchi/model/storagevolumes.py | 542 +++++
src/wok/plugins/kimchi/model/templates.py | 303 +++
src/wok/plugins/kimchi/model/users.py | 90 +
src/wok/plugins/kimchi/model/utils.py | 161 ++
src/wok/plugins/kimchi/model/vmhostdevs.py | 336 +++
src/wok/plugins/kimchi/model/vmifaces.py | 186 ++
src/wok/plugins/kimchi/model/vms.py | 1307 +++++++++++
src/wok/plugins/kimchi/model/vmsnapshots.py | 204 ++
src/wok/plugins/kimchi/model/vmstorages.py | 252 +++
src/wok/plugins/kimchi/netinfo.py | 216 ++
src/wok/plugins/kimchi/network.py | 62 +
src/wok/plugins/kimchi/osinfo.py | 213 ++
src/wok/plugins/kimchi/po/LINGUAS | 11 +
src/wok/plugins/kimchi/po/Makefile.in.in | 398 ++++
src/wok/plugins/kimchi/po/Makevars | 41 +
src/wok/plugins/kimchi/po/POTFILES.in | 3 +
src/wok/plugins/kimchi/po/de_DE.po | 2288 +++++++++++++++++++
src/wok/plugins/kimchi/po/en_US.po | 2075 +++++++++++++++++
src/wok/plugins/kimchi/po/es_ES.po | 2305 +++++++++++++++++++
src/wok/plugins/kimchi/po/fr_FR.po | 2338 +++++++++++++++++++
src/wok/plugins/kimchi/po/gen-pot.in | 9 +
src/wok/plugins/kimchi/po/it_IT.po | 2274 +++++++++++++++++++
src/wok/plugins/kimchi/po/ja_JP.po | 2269 +++++++++++++++++++
src/wok/plugins/kimchi/po/kimchi.pot | 2074 +++++++++++++++++
src/wok/plugins/kimchi/po/ko_KR.po | 2197 ++++++++++++++++++
src/wok/plugins/kimchi/po/pt_BR.po | 2369 ++++++++++++++++++++
src/wok/plugins/kimchi/po/ru_RU.po | 2198 ++++++++++++++++++
src/wok/plugins/kimchi/po/zh_CN.po | 2186 ++++++++++++++++++
src/wok/plugins/kimchi/po/zh_TW.po | 2138 ++++++++++++++++++
src/wok/plugins/kimchi/repositories.py | 529 +++++
src/wok/plugins/kimchi/root.py | 69 +
src/wok/plugins/kimchi/scan.py | 89 +
src/wok/plugins/kimchi/screenshot.py | 184 ++
src/wok/plugins/kimchi/swupdate.py | 263 +++
src/wok/plugins/kimchi/template.conf | 47 +
src/wok/plugins/kimchi/tests/Makefile.am | 50 +
src/wok/plugins/kimchi/tests/iso_gen.py | 212 ++
src/wok/plugins/kimchi/tests/run_tests.sh.in | 55 +
src/wok/plugins/kimchi/tests/test_authorization.py | 178 ++
src/wok/plugins/kimchi/tests/test_config.py.in | 267 +++
src/wok/plugins/kimchi/tests/test_host.py | 206 ++
src/wok/plugins/kimchi/tests/test_mock_network.py | 73 +
.../plugins/kimchi/tests/test_mock_storagepool.py | 147 ++
.../kimchi/tests/test_mock_storagevolume.py | 98 +
src/wok/plugins/kimchi/tests/test_mockmodel.py | 141 ++
src/wok/plugins/kimchi/tests/test_model.py | 1248 +++++++++++
src/wok/plugins/kimchi/tests/test_model_network.py | 149 ++
.../plugins/kimchi/tests/test_model_storagepool.py | 123 +
.../kimchi/tests/test_model_storagevolume.py | 280 +++
src/wok/plugins/kimchi/tests/test_networkxml.py | 172 ++
src/wok/plugins/kimchi/tests/test_osinfo.py | 69 +
src/wok/plugins/kimchi/tests/test_rest.py | 1327 +++++++++++
.../plugins/kimchi/tests/test_storagepoolxml.py | 171 ++
src/wok/plugins/kimchi/tests/test_template.py | 387 ++++
src/wok/plugins/kimchi/tests/test_vmtemplate.py | 116 +
src/wok/plugins/kimchi/tests/test_yumparser.py | 162 ++
src/wok/plugins/kimchi/tests/utils.py | 260 +++
src/wok/plugins/kimchi/ui/Makefile.am | 20 +
src/wok/plugins/kimchi/ui/config/Makefile.am | 22 +
src/wok/plugins/kimchi/ui/config/tab-ext.xml | 38 +
src/wok/plugins/kimchi/ui/css/Makefile.am | 26 +
.../kimchi/ui/css/theme-default/guest-edit.css | 424 ++++
.../ui/css/theme-default/guest-storage-add.css | 81 +
.../plugins/kimchi/ui/css/theme-default/host.css | 287 +++
.../plugins/kimchi/ui/css/theme-default/icon.css | 106 +
.../plugins/kimchi/ui/css/theme-default/list.css | 326 +++
.../kimchi/ui/css/theme-default/network.css | 267 +++
.../kimchi/ui/css/theme-default/report-add.css | 37 +
.../kimchi/ui/css/theme-default/report-rename.css | 39 +
.../kimchi/ui/css/theme-default/repository-add.css | 42 +
.../ui/css/theme-default/repository-edit.css | 88 +
.../kimchi/ui/css/theme-default/storage.css | 550 +++++
.../css/theme-default/storagepool-add-volume.css | 36 +
.../kimchi/ui/css/theme-default/template-edit.css | 175 ++
.../kimchi/ui/css/theme-default/template.css | 85 +
.../kimchi/ui/css/theme-default/template_add.css | 317 +++
.../kimchi/ui/css/theme-default/template_list.css | 267 +++
src/wok/plugins/kimchi/ui/images/Makefile.am | 22 +
src/wok/plugins/kimchi/ui/images/icon-centos.png | Bin 0 -> 4734 bytes
src/wok/plugins/kimchi/ui/images/icon-debian.png | Bin 0 -> 4239 bytes
src/wok/plugins/kimchi/ui/images/icon-fedora.png | Bin 0 -> 4449 bytes
src/wok/plugins/kimchi/ui/images/icon-gentoo.png | Bin 0 -> 15307 bytes
src/wok/plugins/kimchi/ui/images/icon-opensuse.png | Bin 0 -> 3046 bytes
src/wok/plugins/kimchi/ui/images/icon-ubuntu.png | Bin 0 -> 4818 bytes
src/wok/plugins/kimchi/ui/images/icon-vm.png | Bin 0 -> 2976 bytes
.../kimchi/ui/images/theme-default/Makefile.am | 20 +
.../kimchi/ui/images/theme-default/ac22_pause.png | Bin 0 -> 1219 bytes
.../ui/images/theme-default/ac22_pause_grey.png | Bin 0 -> 1175 bytes
.../kimchi/ui/images/theme-default/ac24_resume.png | Bin 0 -> 1341 bytes
.../ui/images/theme-default/ac24_resume_grey.png | Bin 0 -> 1282 bytes
.../ui/images/theme-default/arrow-down-black.png | Bin 0 -> 2942 bytes
.../ui/images/theme-default/arrow-down-disable.png | Bin 0 -> 472 bytes
.../kimchi/ui/images/theme-default/arrow-down.png | Bin 0 -> 537 bytes
.../kimchi/ui/images/theme-default/arrow-up.png | Bin 0 -> 510 bytes
.../kimchi/ui/images/theme-default/arrow_out.png | Bin 0 -> 3048 bytes
.../kimchi/ui/images/theme-default/group.png | Bin 0 -> 1703 bytes
.../ui/images/theme-default/host-icon-sprite.png | Bin 0 -> 1034 bytes
.../kimchi/ui/images/theme-default/icon-back.png | Bin 0 -> 244 bytes
.../kimchi/ui/images/theme-default/icon-camera.png | Bin 0 -> 4860 bytes
.../kimchi/ui/images/theme-default/icon-design.png | Bin 0 -> 4562 bytes
.../kimchi/ui/images/theme-default/icon-detail.png | Bin 0 -> 3079 bytes
.../kimchi/ui/images/theme-default/icon-iso.png | Bin 0 -> 4188 bytes
.../kimchi/ui/images/theme-default/icon-list.png | Bin 0 -> 2983 bytes
.../kimchi/ui/images/theme-default/icon-load.png | Bin 0 -> 3678 bytes
.../kimchi/ui/images/theme-default/icon-local.png | Bin 0 -> 425 bytes
.../ui/images/theme-default/icon-power-down.png | Bin 0 -> 4372 bytes
.../ui/images/theme-default/icon-power-up.png | Bin 0 -> 4367 bytes
.../kimchi/ui/images/theme-default/icon-qcow2.png | Bin 0 -> 4684 bytes
.../kimchi/ui/images/theme-default/icon-raw.png | Bin 0 -> 4679 bytes
.../kimchi/ui/images/theme-default/icon-remote.png | Bin 0 -> 1005 bytes
.../kimchi/ui/images/theme-default/icon-reset.png | Bin 0 -> 4576 bytes
.../kimchi/ui/images/theme-default/icon-search.png | Bin 0 -> 4197 bytes
.../kimchi/ui/images/theme-default/icon-sort.png | Bin 0 -> 3421 bytes
.../kimchi/ui/images/theme-default/icon-tree.png | Bin 0 -> 3526 bytes
.../kimchi/ui/images/theme-default/icon-user.png | Bin 0 -> 5366 bytes
.../images/theme-default/icon-volume-default.png | Bin 0 -> 4265 bytes
.../images/theme-default/kimchi-loading15x15.gif | Bin 0 -> 1653 bytes
.../kimchi/ui/images/theme-default/loading.gif | Bin 0 -> 2190 bytes
.../kimchi/ui/images/theme-default/user.png | Bin 0 -> 1322 bytes
src/wok/plugins/kimchi/ui/js/Makefile.am | 27 +
src/wok/plugins/kimchi/ui/js/src/kimchi.api.js | 1355 +++++++++++
.../kimchi/ui/js/src/kimchi.guest_add_main.js | 86 +
.../kimchi/ui/js/src/kimchi.guest_edit_main.js | 759 +++++++
.../plugins/kimchi/ui/js/src/kimchi.guest_main.js | 511 +++++
.../kimchi/ui/js/src/kimchi.guest_media_main.js | 56 +
.../ui/js/src/kimchi.guest_storage_add.main.js | 199 ++
src/wok/plugins/kimchi/ui/js/src/kimchi.host.js | 858 +++++++
src/wok/plugins/kimchi/ui/js/src/kimchi.main.js | 26 +
src/wok/plugins/kimchi/ui/js/src/kimchi.network.js | 442 ++++
.../kimchi/ui/js/src/kimchi.report_add_main.js | 72 +
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 66 +
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 96 +
.../ui/js/src/kimchi.repository_edit_main.js | 74 +
.../kimchi/ui/js/src/kimchi.storage_main.js | 428 ++++
.../ui/js/src/kimchi.storagepool_add_main.js | 414 ++++
.../js/src/kimchi.storagepool_add_volume_main.js | 179 ++
.../kimchi/ui/js/src/kimchi.template_add_main.js | 441 ++++
.../kimchi/ui/js/src/kimchi.template_edit_main.js | 343 +++
.../kimchi/ui/js/src/kimchi.template_main.js | 111 +
src/wok/plugins/kimchi/ui/pages/Makefile.am | 22 +
.../plugins/kimchi/ui/pages/guest-add.html.tmpl | 98 +
.../plugins/kimchi/ui/pages/guest-edit.html.tmpl | 311 +++
.../kimchi/ui/pages/guest-storage-add.html.tmpl | 103 +
src/wok/plugins/kimchi/ui/pages/guest.html.tmpl | 77 +
src/wok/plugins/kimchi/ui/pages/guests.html.tmpl | 65 +
src/wok/plugins/kimchi/ui/pages/help/Makefile.am | 34 +
.../plugins/kimchi/ui/pages/help/de_DE/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/de_DE/guests.dita | 127 ++
.../plugins/kimchi/ui/pages/help/de_DE/host.dita | 49 +
.../kimchi/ui/pages/help/de_DE/network.dita | 62 +
.../kimchi/ui/pages/help/de_DE/storage.dita | 86 +
.../kimchi/ui/pages/help/de_DE/templates.dita | 112 +
src/wok/plugins/kimchi/ui/pages/help/dita-help.xsl | 26 +
.../plugins/kimchi/ui/pages/help/en_US/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/en_US/guests.dita | 136 ++
.../plugins/kimchi/ui/pages/help/en_US/host.dita | 70 +
.../kimchi/ui/pages/help/en_US/network.dita | 68 +
.../kimchi/ui/pages/help/en_US/storage.dita | 99 +
.../kimchi/ui/pages/help/en_US/templates.dita | 123 +
.../plugins/kimchi/ui/pages/help/es_ES/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/es_ES/guests.dita | 120 +
.../plugins/kimchi/ui/pages/help/es_ES/host.dita | 49 +
.../kimchi/ui/pages/help/es_ES/network.dita | 61 +
.../kimchi/ui/pages/help/es_ES/storage.dita | 86 +
.../kimchi/ui/pages/help/es_ES/templates.dita | 111 +
.../plugins/kimchi/ui/pages/help/fr_FR/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/fr_FR/guests.dita | 130 ++
.../plugins/kimchi/ui/pages/help/fr_FR/host.dita | 68 +
.../kimchi/ui/pages/help/fr_FR/network.dita | 67 +
.../kimchi/ui/pages/help/fr_FR/storage.dita | 93 +
.../kimchi/ui/pages/help/fr_FR/templates.dita | 120 +
.../plugins/kimchi/ui/pages/help/it_IT/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/it_IT/guests.dita | 123 +
.../plugins/kimchi/ui/pages/help/it_IT/host.dita | 51 +
.../kimchi/ui/pages/help/it_IT/network.dita | 63 +
.../kimchi/ui/pages/help/it_IT/storage.dita | 91 +
.../kimchi/ui/pages/help/it_IT/templates.dita | 115 +
.../plugins/kimchi/ui/pages/help/ja_JP/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/ja_JP/guests.dita | 172 ++
.../plugins/kimchi/ui/pages/help/ja_JP/host.dita | 70 +
.../kimchi/ui/pages/help/ja_JP/network.dita | 83 +
.../kimchi/ui/pages/help/ja_JP/storage.dita | 120 +
.../kimchi/ui/pages/help/ja_JP/templates.dita | 150 ++
src/wok/plugins/kimchi/ui/pages/help/kimchi.css | 208 ++
.../plugins/kimchi/ui/pages/help/ko_KR/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/ko_KR/guests.dita | 119 +
.../plugins/kimchi/ui/pages/help/ko_KR/host.dita | 47 +
.../kimchi/ui/pages/help/ko_KR/network.dita | 61 +
.../kimchi/ui/pages/help/ko_KR/storage.dita | 86 +
.../kimchi/ui/pages/help/ko_KR/templates.dita | 111 +
.../plugins/kimchi/ui/pages/help/pt_BR/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/pt_BR/guests.dita | 137 ++
.../plugins/kimchi/ui/pages/help/pt_BR/host.dita | 74 +
.../kimchi/ui/pages/help/pt_BR/network.dita | 72 +
.../kimchi/ui/pages/help/pt_BR/storage.dita | 102 +
.../kimchi/ui/pages/help/pt_BR/templates.dita | 127 ++
.../plugins/kimchi/ui/pages/help/ru_RU/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/ru_RU/guests.dita | 122 +
.../plugins/kimchi/ui/pages/help/ru_RU/host.dita | 48 +
.../kimchi/ui/pages/help/ru_RU/network.dita | 61 +
.../kimchi/ui/pages/help/ru_RU/storage.dita | 88 +
.../kimchi/ui/pages/help/ru_RU/templates.dita | 111 +
.../plugins/kimchi/ui/pages/help/zh_CN/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/zh_CN/guests.dita | 118 +
.../plugins/kimchi/ui/pages/help/zh_CN/host.dita | 45 +
.../kimchi/ui/pages/help/zh_CN/network.dita | 61 +
.../kimchi/ui/pages/help/zh_CN/storage.dita | 84 +
.../kimchi/ui/pages/help/zh_CN/templates.dita | 111 +
.../plugins/kimchi/ui/pages/help/zh_TW/Makefile.am | 23 +
.../plugins/kimchi/ui/pages/help/zh_TW/guests.dita | 120 +
.../plugins/kimchi/ui/pages/help/zh_TW/host.dita | 50 +
.../kimchi/ui/pages/help/zh_TW/network.dita | 61 +
.../kimchi/ui/pages/help/zh_TW/storage.dita | 88 +
.../kimchi/ui/pages/help/zh_TW/templates.dita | 112 +
src/wok/plugins/kimchi/ui/pages/host.html.tmpl | 177 ++
src/wok/plugins/kimchi/ui/pages/i18n.json.tmpl | 187 ++
src/wok/plugins/kimchi/ui/pages/network.html.tmpl | 133 ++
.../plugins/kimchi/ui/pages/report-add.html.tmpl | 56 +
.../kimchi/ui/pages/report-rename.html.tmpl | 56 +
.../kimchi/ui/pages/repository-add.html.tmpl | 113 +
.../kimchi/ui/pages/repository-edit.html.tmpl | 117 +
src/wok/plugins/kimchi/ui/pages/storage.html.tmpl | 143 ++
.../ui/pages/storagepool-add-volume.html.tmpl | 79 +
.../kimchi/ui/pages/storagepool-add.html.tmpl | 186 ++
.../plugins/kimchi/ui/pages/template-add.html.tmpl | 233 ++
.../kimchi/ui/pages/template-edit.html.tmpl | 193 ++
.../plugins/kimchi/ui/pages/templates.html.tmpl | 77 +
src/wok/plugins/kimchi/ui/robots.txt | 2 +
src/wok/plugins/kimchi/ui/spice-html5/Makefile.am | 25 +
.../plugins/kimchi/ui/spice-html5/atKeynames.js | 183 ++
src/wok/plugins/kimchi/ui/spice-html5/bitmap.js | 51 +
.../plugins/kimchi/ui/spice-html5/css/Makefile.am | 20 +
.../plugins/kimchi/ui/spice-html5/css/spice.css | 118 +
src/wok/plugins/kimchi/ui/spice-html5/cursor.js | 110 +
src/wok/plugins/kimchi/ui/spice-html5/display.js | 823 +++++++
src/wok/plugins/kimchi/ui/spice-html5/enums.js | 324 +++
src/wok/plugins/kimchi/ui/spice-html5/inputs.js | 280 +++
src/wok/plugins/kimchi/ui/spice-html5/lz.js | 166 ++
src/wok/plugins/kimchi/ui/spice-html5/main.js | 231 ++
.../kimchi/ui/spice-html5/pages/Makefile.am | 20 +
.../kimchi/ui/spice-html5/pages/spice_auto.html | 200 ++
src/wok/plugins/kimchi/ui/spice-html5/playback.js | 278 +++
src/wok/plugins/kimchi/ui/spice-html5/png.js | 256 +++
src/wok/plugins/kimchi/ui/spice-html5/quic.js | 1335 +++++++++++
src/wok/plugins/kimchi/ui/spice-html5/resize.js | 70 +
.../kimchi/ui/spice-html5/simulatecursor.js | 202 ++
.../kimchi/ui/spice-html5/spicearraybuffer.js | 58 +
src/wok/plugins/kimchi/ui/spice-html5/spiceconn.js | 460 ++++
.../plugins/kimchi/ui/spice-html5/spicedataview.js | 120 +
src/wok/plugins/kimchi/ui/spice-html5/spicemsg.js | 1047 +++++++++
src/wok/plugins/kimchi/ui/spice-html5/spicetype.js | 473 ++++
.../kimchi/ui/spice-html5/thirdparty/Makefile.am | 20 +
.../kimchi/ui/spice-html5/thirdparty/jsbn.js | 589 +++++
.../kimchi/ui/spice-html5/thirdparty/prng4.js | 79 +
.../kimchi/ui/spice-html5/thirdparty/rng.js | 102 +
.../kimchi/ui/spice-html5/thirdparty/rsa.js | 146 ++
.../kimchi/ui/spice-html5/thirdparty/sha1.js | 346 +++
src/wok/plugins/kimchi/ui/spice-html5/ticket.js | 250 +++
src/wok/plugins/kimchi/ui/spice-html5/utils.js | 265 +++
src/wok/plugins/kimchi/ui/spice-html5/webm.js | 553 +++++
src/wok/plugins/kimchi/ui/spice-html5/wire.js | 123 +
src/wok/plugins/kimchi/utils.py | 39 +
src/wok/plugins/kimchi/vmtemplate.py | 431 ++++
src/wok/plugins/kimchi/vnc.py | 77 +
src/wok/plugins/kimchi/xmlutils/Makefile.am | 25 +
src/wok/plugins/kimchi/xmlutils/__init__.py | 18 +
src/wok/plugins/kimchi/xmlutils/cpu.py | 60 +
src/wok/plugins/kimchi/xmlutils/disk.py | 164 ++
src/wok/plugins/kimchi/xmlutils/graphics.py | 45 +
src/wok/plugins/kimchi/xmlutils/interface.py | 61 +
src/wok/plugins/kimchi/xmlutils/network.py | 122 +
src/wok/plugins/kimchi/xmlutils/qemucmdline.py | 45 +
src/wok/plugins/kimchi/yumparser.py | 283 +++
src/wok/plugins/sample/API.json | 56 +
src/wok/plugins/sample/Makefile.am | 29 +
src/wok/plugins/sample/__init__.py | 97 +
src/wok/plugins/sample/config.status | 1 +
src/wok/plugins/sample/i18n.py | 40 +
src/wok/plugins/sample/model.py | 131 ++
src/wok/plugins/sample/po/LINGUAS | 3 +
src/wok/plugins/sample/po/Makefile.in.in | 400 ++++
src/wok/plugins/sample/po/Makevars | 41 +
src/wok/plugins/sample/po/POTFILES.in | 2 +
src/wok/plugins/sample/po/en_US.po | 21 +
src/wok/plugins/sample/po/gen-pot | 9 +
src/wok/plugins/sample/po/pt_BR.po | 24 +
src/wok/plugins/sample/po/sample.pot | 21 +
src/wok/plugins/sample/po/zh_CN.po | 24 +
src/wok/plugins/sample/sample.conf.in | 27 +
src/wok/plugins/sample/ui/Makefile.am | 22 +
src/wok/plugins/sample/ui/config/Makefile.am | 21 +
src/wok/plugins/sample/ui/config/tab-ext.xml | 17 +
src/wok/plugins/sample/ui/css/.gitignore | 0
src/wok/plugins/sample/ui/images/.gitignore | 0
src/wok/plugins/sample/ui/js/.gitignore | 0
src/wok/plugins/sample/ui/js/Makefile.am | 20 +
src/wok/plugins/sample/ui/js/util.js | 33 +
src/wok/plugins/sample/ui/libs/.gitignore | 0
src/wok/plugins/sample/ui/pages/Makefile.am | 20 +
.../sample/ui/pages/help/en_US/sample-tab1.html | 1 +
.../sample/ui/pages/help/en_US/sample-tab2.html | 1 +
src/wok/plugins/sample/ui/pages/i18n.json.tmpl | 26 +
.../plugins/sample/ui/pages/sample-tab1.html.tmpl | 30 +
.../plugins/sample/ui/pages/sample-tab2.html.tmpl | 30 +
809 files changed, 84521 insertions(+), 81955 deletions(-)
delete mode 100644 plugins/Makefile.am
delete mode 100644 plugins/__init__.py
delete mode 100644 plugins/kimchi/.gitignore
delete mode 100644 plugins/kimchi/API.json
delete mode 100644 plugins/kimchi/INSTALL
delete mode 100644 plugins/kimchi/Makefile.am
delete mode 120000 plugins/kimchi/README.md
delete mode 100644 plugins/kimchi/VERSION
delete mode 100644 plugins/kimchi/__init__.py
delete mode 100755 plugins/kimchi/autogen.sh
delete mode 100644 plugins/kimchi/build-aux/config.rpath
delete mode 100755 plugins/kimchi/build-aux/genChangelog
delete mode 100755 plugins/kimchi/build-aux/pkg-version
delete mode 100644 plugins/kimchi/config.py.in
delete mode 100644 plugins/kimchi/config.rpath
delete mode 100644 plugins/kimchi/configure.ac
delete mode 100644 plugins/kimchi/contrib/DEBIAN/Makefile.am
delete mode 100644 plugins/kimchi/contrib/DEBIAN/control.in
delete mode 100644 plugins/kimchi/contrib/Makefile.am
delete mode 100755 plugins/kimchi/contrib/check_i18n.py
delete mode 100644 plugins/kimchi/contrib/kimchi.spec.fedora.in
delete mode 100644 plugins/kimchi/contrib/kimchi.spec.suse.in
delete mode 100644 plugins/kimchi/contrib/make-deb.sh.in
delete mode 100644 plugins/kimchi/control/Makefile.am
delete mode 100644 plugins/kimchi/control/__init__.py
delete mode 100644 plugins/kimchi/control/config.py
delete mode 100644 plugins/kimchi/control/cpuinfo.py
delete mode 100644 plugins/kimchi/control/debugreports.py
delete mode 100644 plugins/kimchi/control/groups.py
delete mode 100644 plugins/kimchi/control/host.py
delete mode 100644 plugins/kimchi/control/interfaces.py
delete mode 100644 plugins/kimchi/control/networks.py
delete mode 100644 plugins/kimchi/control/peers.py
delete mode 100644 plugins/kimchi/control/storagepools.py
delete mode 100644 plugins/kimchi/control/storageservers.py
delete mode 100644 plugins/kimchi/control/storagevolumes.py
delete mode 100644 plugins/kimchi/control/templates.py
delete mode 100644 plugins/kimchi/control/users.py
delete mode 100644 plugins/kimchi/control/vm/Makefile.am
delete mode 100644 plugins/kimchi/control/vm/__init__.py
delete mode 100644 plugins/kimchi/control/vm/hostdevs.py
delete mode 100644 plugins/kimchi/control/vm/ifaces.py
delete mode 100644 plugins/kimchi/control/vm/snapshots.py
delete mode 100644 plugins/kimchi/control/vm/storages.py
delete mode 100644 plugins/kimchi/control/vms.py
delete mode 100644 plugins/kimchi/disks.py
delete mode 100644 plugins/kimchi/distroloader.py
delete mode 100644 plugins/kimchi/distros.d/Makefile.am
delete mode 100644 plugins/kimchi/distros.d/debian.json
delete mode 100644 plugins/kimchi/distros.d/fedora.json
delete mode 100644 plugins/kimchi/distros.d/gentoo.json
delete mode 100644 plugins/kimchi/distros.d/opensuse.json
delete mode 100644 plugins/kimchi/distros.d/ubuntu.json
delete mode 100644 plugins/kimchi/docs/API.md
delete mode 100644 plugins/kimchi/docs/Makefile.am
delete mode 100644 plugins/kimchi/docs/README-federation.md
delete mode 100644 plugins/kimchi/docs/README.md
delete mode 100644 plugins/kimchi/docs/kimchi-guest.png
delete mode 100644 plugins/kimchi/docs/kimchi-login.png
delete mode 100644 plugins/kimchi/docs/kimchi-templates.png
delete mode 100644 plugins/kimchi/i18n.py
delete mode 100644 plugins/kimchi/imageinfo.py
delete mode 100644 plugins/kimchi/iscsi.py
delete mode 100644 plugins/kimchi/isoinfo.py
delete mode 100644 plugins/kimchi/kimchi.conf
delete mode 100644 plugins/kimchi/kvmusertests.py
delete mode 100644 plugins/kimchi/m4/ac_python_module.m4
delete mode 100644 plugins/kimchi/m4/gettext.m4
delete mode 100644 plugins/kimchi/m4/iconv.m4
delete mode 100644 plugins/kimchi/m4/intlmacosx.m4
delete mode 100644 plugins/kimchi/m4/lib-ld.m4
delete mode 100644 plugins/kimchi/m4/lib-link.m4
delete mode 100644 plugins/kimchi/m4/lib-prefix.m4
delete mode 100644 plugins/kimchi/m4/nls.m4
delete mode 100644 plugins/kimchi/m4/po.m4
delete mode 100644 plugins/kimchi/m4/progtest.m4
delete mode 100644 plugins/kimchi/mockmodel.py
delete mode 100644 plugins/kimchi/model/Makefile.am
delete mode 100644 plugins/kimchi/model/__init__.py
delete mode 100644 plugins/kimchi/model/config.py
delete mode 100644 plugins/kimchi/model/cpuinfo.py
delete mode 100644 plugins/kimchi/model/debugreports.py
delete mode 100644 plugins/kimchi/model/diskutils.py
delete mode 100644 plugins/kimchi/model/featuretests.py
delete mode 100644 plugins/kimchi/model/groups.py
delete mode 100644 plugins/kimchi/model/host.py
delete mode 100644 plugins/kimchi/model/hostdev.py
delete mode 100644 plugins/kimchi/model/interfaces.py
delete mode 100644 plugins/kimchi/model/libvirtconnection.py
delete mode 100644 plugins/kimchi/model/libvirtstoragepool.py
delete mode 100644 plugins/kimchi/model/model.py
delete mode 100644 plugins/kimchi/model/networks.py
delete mode 100644 plugins/kimchi/model/peers.py
delete mode 100644 plugins/kimchi/model/storagepools.py
delete mode 100644 plugins/kimchi/model/storageservers.py
delete mode 100644 plugins/kimchi/model/storagetargets.py
delete mode 100644 plugins/kimchi/model/storagevolumes.py
delete mode 100644 plugins/kimchi/model/templates.py
delete mode 100644 plugins/kimchi/model/users.py
delete mode 100644 plugins/kimchi/model/utils.py
delete mode 100644 plugins/kimchi/model/vmhostdevs.py
delete mode 100644 plugins/kimchi/model/vmifaces.py
delete mode 100644 plugins/kimchi/model/vms.py
delete mode 100644 plugins/kimchi/model/vmsnapshots.py
delete mode 100644 plugins/kimchi/model/vmstorages.py
delete mode 100644 plugins/kimchi/netinfo.py
delete mode 100644 plugins/kimchi/network.py
delete mode 100644 plugins/kimchi/osinfo.py
delete mode 100644 plugins/kimchi/po/LINGUAS
delete mode 100644 plugins/kimchi/po/Makefile.in.in
delete mode 100644 plugins/kimchi/po/Makevars
delete mode 100644 plugins/kimchi/po/POTFILES.in
delete mode 100644 plugins/kimchi/po/de_DE.po
delete mode 100644 plugins/kimchi/po/en_US.po
delete mode 100644 plugins/kimchi/po/es_ES.po
delete mode 100644 plugins/kimchi/po/fr_FR.po
delete mode 100644 plugins/kimchi/po/gen-pot.in
delete mode 100644 plugins/kimchi/po/it_IT.po
delete mode 100644 plugins/kimchi/po/ja_JP.po
delete mode 100755 plugins/kimchi/po/kimchi.pot
delete mode 100644 plugins/kimchi/po/ko_KR.po
delete mode 100644 plugins/kimchi/po/pt_BR.po
delete mode 100644 plugins/kimchi/po/ru_RU.po
delete mode 100644 plugins/kimchi/po/zh_CN.po
delete mode 100644 plugins/kimchi/po/zh_TW.po
delete mode 100644 plugins/kimchi/repositories.py
delete mode 100644 plugins/kimchi/root.py
delete mode 100644 plugins/kimchi/scan.py
delete mode 100644 plugins/kimchi/screenshot.py
delete mode 100644 plugins/kimchi/swupdate.py
delete mode 100644 plugins/kimchi/template.conf
delete mode 100644 plugins/kimchi/tests/Makefile.am
delete mode 100644 plugins/kimchi/tests/iso_gen.py
delete mode 100644 plugins/kimchi/tests/run_tests.sh.in
delete mode 100644 plugins/kimchi/tests/test_authorization.py
delete mode 100644 plugins/kimchi/tests/test_config.py.in
delete mode 100644 plugins/kimchi/tests/test_host.py
delete mode 100644 plugins/kimchi/tests/test_mock_network.py
delete mode 100644 plugins/kimchi/tests/test_mock_storagepool.py
delete mode 100644 plugins/kimchi/tests/test_mock_storagevolume.py
delete mode 100644 plugins/kimchi/tests/test_mockmodel.py
delete mode 100644 plugins/kimchi/tests/test_model.py
delete mode 100644 plugins/kimchi/tests/test_model_network.py
delete mode 100644 plugins/kimchi/tests/test_model_storagepool.py
delete mode 100644 plugins/kimchi/tests/test_model_storagevolume.py
delete mode 100644 plugins/kimchi/tests/test_networkxml.py
delete mode 100644 plugins/kimchi/tests/test_osinfo.py
delete mode 100644 plugins/kimchi/tests/test_rest.py
delete mode 100644 plugins/kimchi/tests/test_storagepoolxml.py
delete mode 100644 plugins/kimchi/tests/test_template.py
delete mode 100644 plugins/kimchi/tests/test_vmtemplate.py
delete mode 100644 plugins/kimchi/tests/test_yumparser.py
delete mode 100644 plugins/kimchi/tests/utils.py
delete mode 100644 plugins/kimchi/ui/Makefile.am
delete mode 100644 plugins/kimchi/ui/config/Makefile.am
delete mode 100644 plugins/kimchi/ui/config/tab-ext.xml
delete mode 100644 plugins/kimchi/ui/css/Makefile.am
delete mode 100644 plugins/kimchi/ui/css/theme-default/guest-edit.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/guest-storage-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/host.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/icon.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/list.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/network.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/report-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/report-rename.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/repository-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/repository-edit.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/storage.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/storagepool-add-volume.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/template-edit.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/template.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/template_add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/template_list.css
delete mode 100644 plugins/kimchi/ui/images/Makefile.am
delete mode 100644 plugins/kimchi/ui/images/icon-centos.png
delete mode 100644 plugins/kimchi/ui/images/icon-debian.png
delete mode 100644 plugins/kimchi/ui/images/icon-fedora.png
delete mode 100644 plugins/kimchi/ui/images/icon-gentoo.png
delete mode 100644 plugins/kimchi/ui/images/icon-opensuse.png
delete mode 100644 plugins/kimchi/ui/images/icon-ubuntu.png
delete mode 100644 plugins/kimchi/ui/images/icon-vm.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/Makefile.am
delete mode 100644 plugins/kimchi/ui/images/theme-default/ac22_pause.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/ac22_pause_grey.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/ac24_resume.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/ac24_resume_grey.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow-down-black.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow-down-disable.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow-down.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow-up.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/arrow_out.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/group.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/host-icon-sprite.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-back.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-camera.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-design.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-detail.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-iso.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-list.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-load.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-local.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-power-down.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-power-up.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-qcow2.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-raw.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-remote.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-reset.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-search.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-sort.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-tree.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-user.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-volume-default.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/kimchi-loading15x15.gif
delete mode 100644 plugins/kimchi/ui/images/theme-default/loading.gif
delete mode 100644 plugins/kimchi/ui/images/theme-default/user.png
delete mode 100644 plugins/kimchi/ui/js/Makefile.am
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.api.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_edit_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_media_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_storage_add.main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.host.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.network.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.storage_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.storagepool_add_volume_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.template_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.template_edit_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.template_main.js
delete mode 100644 plugins/kimchi/ui/pages/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/guest-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/guest-edit.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/guest-storage-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/guest.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/guests.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/help/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/dita-help.xsl
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/kimchi.css
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/Makefile.am
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/guests.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/network.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/storage.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/templates.dita
delete mode 100644 plugins/kimchi/ui/pages/host.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/i18n.json.tmpl
delete mode 100644 plugins/kimchi/ui/pages/network.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/report-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/report-rename.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/repository-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/repository-edit.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/storage.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/storagepool-add-volume.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/storagepool-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/template-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/template-edit.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/templates.html.tmpl
delete mode 100644 plugins/kimchi/ui/robots.txt
delete mode 100644 plugins/kimchi/ui/spice-html5/Makefile.am
delete mode 100644 plugins/kimchi/ui/spice-html5/atKeynames.js
delete mode 100644 plugins/kimchi/ui/spice-html5/bitmap.js
delete mode 100644 plugins/kimchi/ui/spice-html5/css/Makefile.am
delete mode 100644 plugins/kimchi/ui/spice-html5/css/spice.css
delete mode 100644 plugins/kimchi/ui/spice-html5/cursor.js
delete mode 100644 plugins/kimchi/ui/spice-html5/display.js
delete mode 100644 plugins/kimchi/ui/spice-html5/enums.js
delete mode 100644 plugins/kimchi/ui/spice-html5/inputs.js
delete mode 100644 plugins/kimchi/ui/spice-html5/lz.js
delete mode 100644 plugins/kimchi/ui/spice-html5/main.js
delete mode 100644 plugins/kimchi/ui/spice-html5/pages/Makefile.am
delete mode 100644 plugins/kimchi/ui/spice-html5/pages/spice_auto.html
delete mode 100644 plugins/kimchi/ui/spice-html5/playback.js
delete mode 100644 plugins/kimchi/ui/spice-html5/png.js
delete mode 100644 plugins/kimchi/ui/spice-html5/quic.js
delete mode 100644 plugins/kimchi/ui/spice-html5/resize.js
delete mode 100644 plugins/kimchi/ui/spice-html5/simulatecursor.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spicearraybuffer.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spiceconn.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spicedataview.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spicemsg.js
delete mode 100644 plugins/kimchi/ui/spice-html5/spicetype.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/jsbn.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/prng4.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/rng.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/rsa.js
delete mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/sha1.js
delete mode 100644 plugins/kimchi/ui/spice-html5/ticket.js
delete mode 100644 plugins/kimchi/ui/spice-html5/utils.js
delete mode 100644 plugins/kimchi/ui/spice-html5/webm.js
delete mode 100644 plugins/kimchi/ui/spice-html5/wire.js
delete mode 100644 plugins/kimchi/utils.py
delete mode 100644 plugins/kimchi/vmtemplate.py
delete mode 100644 plugins/kimchi/vnc.py
delete mode 100644 plugins/kimchi/xmlutils/Makefile.am
delete mode 100644 plugins/kimchi/xmlutils/__init__.py
delete mode 100644 plugins/kimchi/xmlutils/cpu.py
delete mode 100644 plugins/kimchi/xmlutils/disk.py
delete mode 100644 plugins/kimchi/xmlutils/graphics.py
delete mode 100644 plugins/kimchi/xmlutils/interface.py
delete mode 100644 plugins/kimchi/xmlutils/network.py
delete mode 100644 plugins/kimchi/xmlutils/qemucmdline.py
delete mode 100644 plugins/kimchi/yumparser.py
delete mode 100644 plugins/sample/API.json
delete mode 100644 plugins/sample/Makefile.am
delete mode 100644 plugins/sample/__init__.py
delete mode 120000 plugins/sample/config.status
delete mode 100644 plugins/sample/i18n.py
delete mode 100644 plugins/sample/model.py
delete mode 100644 plugins/sample/po/LINGUAS
delete mode 100644 plugins/sample/po/Makefile.in.in
delete mode 100644 plugins/sample/po/Makevars
delete mode 100644 plugins/sample/po/POTFILES.in
delete mode 100644 plugins/sample/po/en_US.po
delete mode 100755 plugins/sample/po/gen-pot
delete mode 100644 plugins/sample/po/pt_BR.po
delete mode 100644 plugins/sample/po/sample.pot
delete mode 100644 plugins/sample/po/zh_CN.po
delete mode 100644 plugins/sample/sample.conf.in
delete mode 100644 plugins/sample/ui/Makefile.am
delete mode 100644 plugins/sample/ui/config/Makefile.am
delete mode 100644 plugins/sample/ui/config/tab-ext.xml
delete mode 100644 plugins/sample/ui/css/.gitignore
delete mode 100644 plugins/sample/ui/images/.gitignore
delete mode 100644 plugins/sample/ui/js/.gitignore
delete mode 100644 plugins/sample/ui/js/Makefile.am
delete mode 100644 plugins/sample/ui/js/util.js
delete mode 100644 plugins/sample/ui/libs/.gitignore
delete mode 100644 plugins/sample/ui/pages/Makefile.am
delete mode 100644 plugins/sample/ui/pages/help/en_US/sample-tab1.html
delete mode 100644 plugins/sample/ui/pages/help/en_US/sample-tab2.html
delete mode 100644 plugins/sample/ui/pages/i18n.json.tmpl
delete mode 100644 plugins/sample/ui/pages/sample-tab1.html.tmpl
delete mode 100644 plugins/sample/ui/pages/sample-tab2.html.tmpl
create mode 100644 src/wok/plugins/Makefile.am
create mode 100644 src/wok/plugins/__init__.py
create mode 100644 src/wok/plugins/kimchi/.gitignore
create mode 100644 src/wok/plugins/kimchi/API.json
create mode 100644 src/wok/plugins/kimchi/CONTRIBUTE.md
create mode 100644 src/wok/plugins/kimchi/COPYING
create mode 100644 src/wok/plugins/kimchi/COPYING.ASL2
create mode 100644 src/wok/plugins/kimchi/COPYING.LGPL
create mode 100644 src/wok/plugins/kimchi/ChangeLog
create mode 100644 src/wok/plugins/kimchi/INSTALL
create mode 100644 src/wok/plugins/kimchi/Makefile.am
create mode 120000 src/wok/plugins/kimchi/README.md
create mode 100644 src/wok/plugins/kimchi/VERSION
create mode 100644 src/wok/plugins/kimchi/__init__.py
create mode 100755 src/wok/plugins/kimchi/autogen.sh
create mode 100644 src/wok/plugins/kimchi/build-aux/config.rpath
create mode 100755 src/wok/plugins/kimchi/build-aux/genChangelog
create mode 100755 src/wok/plugins/kimchi/build-aux/pkg-version
create mode 100644 src/wok/plugins/kimchi/config.py.in
create mode 100644 src/wok/plugins/kimchi/config.rpath
create mode 100644 src/wok/plugins/kimchi/configure.ac
create mode 100644 src/wok/plugins/kimchi/contrib/DEBIAN/Makefile.am
create mode 100644 src/wok/plugins/kimchi/contrib/DEBIAN/control.in
create mode 100644 src/wok/plugins/kimchi/contrib/Makefile.am
create mode 100755 src/wok/plugins/kimchi/contrib/check_i18n.py
create mode 100644 src/wok/plugins/kimchi/contrib/kimchi.spec.fedora.in
create mode 100644 src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in
create mode 100644 src/wok/plugins/kimchi/contrib/make-deb.sh.in
create mode 100644 src/wok/plugins/kimchi/control/Makefile.am
create mode 100644 src/wok/plugins/kimchi/control/__init__.py
create mode 100644 src/wok/plugins/kimchi/control/config.py
create mode 100644 src/wok/plugins/kimchi/control/cpuinfo.py
create mode 100644 src/wok/plugins/kimchi/control/debugreports.py
create mode 100644 src/wok/plugins/kimchi/control/groups.py
create mode 100644 src/wok/plugins/kimchi/control/host.py
create mode 100644 src/wok/plugins/kimchi/control/interfaces.py
create mode 100644 src/wok/plugins/kimchi/control/networks.py
create mode 100644 src/wok/plugins/kimchi/control/peers.py
create mode 100644 src/wok/plugins/kimchi/control/storagepools.py
create mode 100644 src/wok/plugins/kimchi/control/storageservers.py
create mode 100644 src/wok/plugins/kimchi/control/storagevolumes.py
create mode 100644 src/wok/plugins/kimchi/control/templates.py
create mode 100644 src/wok/plugins/kimchi/control/users.py
create mode 100644 src/wok/plugins/kimchi/control/vm/Makefile.am
create mode 100644 src/wok/plugins/kimchi/control/vm/__init__.py
create mode 100644 src/wok/plugins/kimchi/control/vm/hostdevs.py
create mode 100644 src/wok/plugins/kimchi/control/vm/ifaces.py
create mode 100644 src/wok/plugins/kimchi/control/vm/snapshots.py
create mode 100644 src/wok/plugins/kimchi/control/vm/storages.py
create mode 100644 src/wok/plugins/kimchi/control/vms.py
create mode 100644 src/wok/plugins/kimchi/disks.py
create mode 100644 src/wok/plugins/kimchi/distroloader.py
create mode 100644 src/wok/plugins/kimchi/distros.d/Makefile.am
create mode 100644 src/wok/plugins/kimchi/distros.d/debian.json
create mode 100644 src/wok/plugins/kimchi/distros.d/fedora.json
create mode 100644 src/wok/plugins/kimchi/distros.d/gentoo.json
create mode 100644 src/wok/plugins/kimchi/distros.d/opensuse.json
create mode 100644 src/wok/plugins/kimchi/distros.d/ubuntu.json
create mode 100644 src/wok/plugins/kimchi/docs/API.md
create mode 100644 src/wok/plugins/kimchi/docs/Makefile.am
create mode 100644 src/wok/plugins/kimchi/docs/README-federation.md
create mode 100644 src/wok/plugins/kimchi/docs/README.md
create mode 100644 src/wok/plugins/kimchi/docs/kimchi-guest.png
create mode 100644 src/wok/plugins/kimchi/docs/kimchi-login.png
create mode 100644 src/wok/plugins/kimchi/docs/kimchi-templates.png
create mode 100644 src/wok/plugins/kimchi/i18n.py
create mode 100644 src/wok/plugins/kimchi/imageinfo.py
create mode 100644 src/wok/plugins/kimchi/iscsi.py
create mode 100644 src/wok/plugins/kimchi/isoinfo.py
create mode 100644 src/wok/plugins/kimchi/kimchi.conf
create mode 100644 src/wok/plugins/kimchi/kvmusertests.py
create mode 100644 src/wok/plugins/kimchi/m4/ac_python_module.m4
create mode 100644 src/wok/plugins/kimchi/m4/gettext.m4
create mode 100644 src/wok/plugins/kimchi/m4/iconv.m4
create mode 100644 src/wok/plugins/kimchi/m4/intlmacosx.m4
create mode 100644 src/wok/plugins/kimchi/m4/lib-ld.m4
create mode 100644 src/wok/plugins/kimchi/m4/lib-link.m4
create mode 100644 src/wok/plugins/kimchi/m4/lib-prefix.m4
create mode 100644 src/wok/plugins/kimchi/m4/nls.m4
create mode 100644 src/wok/plugins/kimchi/m4/po.m4
create mode 100644 src/wok/plugins/kimchi/m4/progtest.m4
create mode 100644 src/wok/plugins/kimchi/mockmodel.py
create mode 100644 src/wok/plugins/kimchi/model/Makefile.am
create mode 100644 src/wok/plugins/kimchi/model/__init__.py
create mode 100644 src/wok/plugins/kimchi/model/config.py
create mode 100644 src/wok/plugins/kimchi/model/cpuinfo.py
create mode 100644 src/wok/plugins/kimchi/model/debugreports.py
create mode 100644 src/wok/plugins/kimchi/model/diskutils.py
create mode 100644 src/wok/plugins/kimchi/model/featuretests.py
create mode 100644 src/wok/plugins/kimchi/model/groups.py
create mode 100644 src/wok/plugins/kimchi/model/host.py
create mode 100644 src/wok/plugins/kimchi/model/hostdev.py
create mode 100644 src/wok/plugins/kimchi/model/interfaces.py
create mode 100644 src/wok/plugins/kimchi/model/libvirtconnection.py
create mode 100644 src/wok/plugins/kimchi/model/libvirtstoragepool.py
create mode 100644 src/wok/plugins/kimchi/model/model.py
create mode 100644 src/wok/plugins/kimchi/model/networks.py
create mode 100644 src/wok/plugins/kimchi/model/peers.py
create mode 100644 src/wok/plugins/kimchi/model/storagepools.py
create mode 100644 src/wok/plugins/kimchi/model/storageservers.py
create mode 100644 src/wok/plugins/kimchi/model/storagetargets.py
create mode 100644 src/wok/plugins/kimchi/model/storagevolumes.py
create mode 100644 src/wok/plugins/kimchi/model/templates.py
create mode 100644 src/wok/plugins/kimchi/model/users.py
create mode 100644 src/wok/plugins/kimchi/model/utils.py
create mode 100644 src/wok/plugins/kimchi/model/vmhostdevs.py
create mode 100644 src/wok/plugins/kimchi/model/vmifaces.py
create mode 100644 src/wok/plugins/kimchi/model/vms.py
create mode 100644 src/wok/plugins/kimchi/model/vmsnapshots.py
create mode 100644 src/wok/plugins/kimchi/model/vmstorages.py
create mode 100644 src/wok/plugins/kimchi/netinfo.py
create mode 100644 src/wok/plugins/kimchi/network.py
create mode 100644 src/wok/plugins/kimchi/osinfo.py
create mode 100644 src/wok/plugins/kimchi/po/LINGUAS
create mode 100644 src/wok/plugins/kimchi/po/Makefile.in.in
create mode 100644 src/wok/plugins/kimchi/po/Makevars
create mode 100644 src/wok/plugins/kimchi/po/POTFILES.in
create mode 100644 src/wok/plugins/kimchi/po/de_DE.po
create mode 100644 src/wok/plugins/kimchi/po/en_US.po
create mode 100644 src/wok/plugins/kimchi/po/es_ES.po
create mode 100644 src/wok/plugins/kimchi/po/fr_FR.po
create mode 100644 src/wok/plugins/kimchi/po/gen-pot.in
create mode 100644 src/wok/plugins/kimchi/po/it_IT.po
create mode 100644 src/wok/plugins/kimchi/po/ja_JP.po
create mode 100755 src/wok/plugins/kimchi/po/kimchi.pot
create mode 100644 src/wok/plugins/kimchi/po/ko_KR.po
create mode 100644 src/wok/plugins/kimchi/po/pt_BR.po
create mode 100644 src/wok/plugins/kimchi/po/ru_RU.po
create mode 100644 src/wok/plugins/kimchi/po/zh_CN.po
create mode 100644 src/wok/plugins/kimchi/po/zh_TW.po
create mode 100644 src/wok/plugins/kimchi/repositories.py
create mode 100644 src/wok/plugins/kimchi/root.py
create mode 100644 src/wok/plugins/kimchi/scan.py
create mode 100644 src/wok/plugins/kimchi/screenshot.py
create mode 100644 src/wok/plugins/kimchi/swupdate.py
create mode 100644 src/wok/plugins/kimchi/template.conf
create mode 100644 src/wok/plugins/kimchi/tests/Makefile.am
create mode 100644 src/wok/plugins/kimchi/tests/iso_gen.py
create mode 100644 src/wok/plugins/kimchi/tests/run_tests.sh.in
create mode 100644 src/wok/plugins/kimchi/tests/test_authorization.py
create mode 100644 src/wok/plugins/kimchi/tests/test_config.py.in
create mode 100644 src/wok/plugins/kimchi/tests/test_host.py
create mode 100644 src/wok/plugins/kimchi/tests/test_mock_network.py
create mode 100644 src/wok/plugins/kimchi/tests/test_mock_storagepool.py
create mode 100644 src/wok/plugins/kimchi/tests/test_mock_storagevolume.py
create mode 100644 src/wok/plugins/kimchi/tests/test_mockmodel.py
create mode 100644 src/wok/plugins/kimchi/tests/test_model.py
create mode 100644 src/wok/plugins/kimchi/tests/test_model_network.py
create mode 100644 src/wok/plugins/kimchi/tests/test_model_storagepool.py
create mode 100644 src/wok/plugins/kimchi/tests/test_model_storagevolume.py
create mode 100644 src/wok/plugins/kimchi/tests/test_networkxml.py
create mode 100644 src/wok/plugins/kimchi/tests/test_osinfo.py
create mode 100644 src/wok/plugins/kimchi/tests/test_rest.py
create mode 100644 src/wok/plugins/kimchi/tests/test_storagepoolxml.py
create mode 100644 src/wok/plugins/kimchi/tests/test_template.py
create mode 100644 src/wok/plugins/kimchi/tests/test_vmtemplate.py
create mode 100644 src/wok/plugins/kimchi/tests/test_yumparser.py
create mode 100644 src/wok/plugins/kimchi/tests/utils.py
create mode 100644 src/wok/plugins/kimchi/ui/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/config/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/config/tab-ext.xml
create mode 100644 src/wok/plugins/kimchi/ui/css/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/guest-edit.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/guest-storage-add.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/host.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/icon.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/list.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/network.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/report-add.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/report-rename.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/repository-add.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/repository-edit.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/storage.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/storagepool-add-volume.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template-edit.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template_add.css
create mode 100644 src/wok/plugins/kimchi/ui/css/theme-default/template_list.css
create mode 100644 src/wok/plugins/kimchi/ui/images/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-centos.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-debian.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-fedora.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-gentoo.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-opensuse.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-ubuntu.png
create mode 100644 src/wok/plugins/kimchi/ui/images/icon-vm.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/ac22_pause.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/ac22_pause_grey.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/ac24_resume.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/ac24_resume_grey.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow-down-black.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow-down-disable.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow-down.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow-up.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/arrow_out.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/group.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/host-icon-sprite.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-back.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-camera.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-design.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-detail.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-iso.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-list.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-load.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-local.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-power-down.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-power-up.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-qcow2.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-raw.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-remote.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-reset.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-search.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-sort.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-tree.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-user.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/icon-volume-default.png
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/kimchi-loading15x15.gif
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/loading.gif
create mode 100644 src/wok/plugins/kimchi/ui/images/theme-default/user.png
create mode 100644 src/wok/plugins/kimchi/ui/js/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.api.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_edit_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_media_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.guest_storage_add.main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.host.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.network.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.storage_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.storagepool_add_volume_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.template_add_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.template_edit_main.js
create mode 100644 src/wok/plugins/kimchi/ui/js/src/kimchi.template_main.js
create mode 100644 src/wok/plugins/kimchi/ui/pages/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/guest-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/guest-edit.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/guest-storage-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/guest.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/guests.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/de_DE/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/dita-help.xsl
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/en_US/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/es_ES/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/fr_FR/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/it_IT/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ja_JP/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/kimchi.css
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ko_KR/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/pt_BR/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/ru_RU/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_CN/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/guests.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/host.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/network.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/storage.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/help/zh_TW/templates.dita
create mode 100644 src/wok/plugins/kimchi/ui/pages/host.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/i18n.json.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/network.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/report-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/report-rename.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/repository-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/repository-edit.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/storage.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/storagepool-add-volume.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/storagepool-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/template-add.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/template-edit.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/pages/templates.html.tmpl
create mode 100644 src/wok/plugins/kimchi/ui/robots.txt
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/atKeynames.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/bitmap.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/css/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/css/spice.css
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/cursor.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/display.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/enums.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/inputs.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/lz.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/main.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/pages/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/pages/spice_auto.html
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/playback.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/png.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/quic.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/resize.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/simulatecursor.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spicearraybuffer.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spiceconn.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spicedataview.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spicemsg.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/spicetype.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/jsbn.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/prng4.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/rng.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/rsa.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/thirdparty/sha1.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/ticket.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/utils.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/webm.js
create mode 100644 src/wok/plugins/kimchi/ui/spice-html5/wire.js
create mode 100644 src/wok/plugins/kimchi/utils.py
create mode 100644 src/wok/plugins/kimchi/vmtemplate.py
create mode 100644 src/wok/plugins/kimchi/vnc.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/Makefile.am
create mode 100644 src/wok/plugins/kimchi/xmlutils/__init__.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/cpu.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/disk.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/graphics.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/interface.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/network.py
create mode 100644 src/wok/plugins/kimchi/xmlutils/qemucmdline.py
create mode 100644 src/wok/plugins/kimchi/yumparser.py
create mode 100644 src/wok/plugins/sample/API.json
create mode 100644 src/wok/plugins/sample/Makefile.am
create mode 100644 src/wok/plugins/sample/__init__.py
create mode 120000 src/wok/plugins/sample/config.status
create mode 100644 src/wok/plugins/sample/i18n.py
create mode 100644 src/wok/plugins/sample/model.py
create mode 100644 src/wok/plugins/sample/po/LINGUAS
create mode 100644 src/wok/plugins/sample/po/Makefile.in.in
create mode 100644 src/wok/plugins/sample/po/Makevars
create mode 100644 src/wok/plugins/sample/po/POTFILES.in
create mode 100644 src/wok/plugins/sample/po/en_US.po
create mode 100755 src/wok/plugins/sample/po/gen-pot
create mode 100644 src/wok/plugins/sample/po/pt_BR.po
create mode 100644 src/wok/plugins/sample/po/sample.pot
create mode 100644 src/wok/plugins/sample/po/zh_CN.po
create mode 100644 src/wok/plugins/sample/sample.conf.in
create mode 100644 src/wok/plugins/sample/ui/Makefile.am
create mode 100644 src/wok/plugins/sample/ui/config/Makefile.am
create mode 100644 src/wok/plugins/sample/ui/config/tab-ext.xml
create mode 100644 src/wok/plugins/sample/ui/css/.gitignore
create mode 100644 src/wok/plugins/sample/ui/images/.gitignore
create mode 100644 src/wok/plugins/sample/ui/js/.gitignore
create mode 100644 src/wok/plugins/sample/ui/js/Makefile.am
create mode 100644 src/wok/plugins/sample/ui/js/util.js
create mode 100644 src/wok/plugins/sample/ui/libs/.gitignore
create mode 100644 src/wok/plugins/sample/ui/pages/Makefile.am
create mode 100644 src/wok/plugins/sample/ui/pages/help/en_US/sample-tab1.html
create mode 100644 src/wok/plugins/sample/ui/pages/help/en_US/sample-tab2.html
create mode 100644 src/wok/plugins/sample/ui/pages/i18n.json.tmpl
create mode 100644 src/wok/plugins/sample/ui/pages/sample-tab1.html.tmpl
create mode 100644 src/wok/plugins/sample/ui/pages/sample-tab2.html.tmpl
--
2.4.3
2
6
[PATCH 0/3 V2] [PATCH 0/3] [issue #731] Raw volumes validation
by pvital@linux.vnet.ibm.com 28 Sep '15
by pvital@linux.vnet.ibm.com 28 Sep '15
28 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
V1 -> V2:
- Added new supported valid Raw content
- Make list of valid Raw content global
Kimchi allows to attach Raw volumes that are not disk images when editing
a VM. With this, it's possible attach a XML or PDF file (that qemu-img and
libvirt see as raw volumes) as a disk into the guest.
This patch-set introduces a check for all 'raw' volumes to see if them are
valid disks or not (by using libmagic), and then, pass this information to
the front-end to make a correct list of volumes option when attaching a new
one into a VM.
Paulo Vital (3):
Raw volumes validation: update contrib and README
Raw volumes validation: back-end and front-end
Raw volumes validation: update tests
contrib/DEBIAN/control.in | 3 ++-
contrib/kimchi.spec.fedora.in | 1 +
contrib/kimchi.spec.suse.in | 1 +
docs/API.md | 1 +
docs/README.md | 11 +++++------
src/kimchi/control/storagevolumes.py | 3 ++-
src/kimchi/mockmodel.py | 6 ++++--
src/kimchi/model/storagevolumes.py | 18 +++++++++++++++++-
tests/test_model_storagevolume.py | 2 +-
ui/js/src/kimchi.guest_storage_add.main.js | 2 +-
10 files changed, 35 insertions(+), 13 deletions(-)
--
2.4.3
2
5
28 Sep '15
This patch changes the template default memory in hosts that have less
than 1024 MB or less than 2048 in non x86 hosts. If this is the case,
the template memory becomes the host total memory.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
src/kimchi/osinfo.py | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
index 6a6af8c..aaa12b1 100644
--- a/src/kimchi/osinfo.py
+++ b/src/kimchi/osinfo.py
@@ -94,7 +94,16 @@ def _get_arch():
def _get_default_template_mem():
- return 1024 if _get_arch() == 'x86' else 2048
+ if hasattr(psutil, 'virtual_memory'):
+ mem = psutil.virtual_memory().total >> 10 >> 10
+ else:
+ mem = psutil.TOTAL_PHYMEM >> 10 >> 10
+ if _get_arch() == 'x86':
+ return 1024 if mem > 1024 else mem
+ else:
+ # In PPC some guests does not boot with less than 2G of memory. However
+ # we can do nothing if host has less than that amount.
+ return 2048 if mem > 2048 else mem
def _get_tmpl_defaults():
--
2.1.0
3
2
28 Sep '15
This patch changes the template default memory in hosts that have less
than 1024 MB or less than 2048 in non x86 hosts. If this is the case,
the template memory becomes the host total memory.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
src/kimchi/osinfo.py | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
index 6a6af8c..9445f61 100644
--- a/src/kimchi/osinfo.py
+++ b/src/kimchi/osinfo.py
@@ -94,7 +94,16 @@ def _get_arch():
def _get_default_template_mem():
- return 1024 if _get_arch() == 'x86' else 2048
+ if hasattr(psutil, 'virtual_memory'):
+ mem = psutil.virtual_memory().total >> 10 >> 10
+ else:
+ mem = psutil.TOTAL_PHYMEM >> 10 >> 10
+ if mem < 2048 and _get_arch() != 'x86':
+ return mem
+ elif mem < 1024:
+ return mem
+ else:
+ return 1024 if _get_arch() == 'x86' else 2048
def _get_tmpl_defaults():
--
2.1.0
2
2
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/po/LINGUAS | 11 +
plugins/gingerbase/po/Makefile.in.in | 398 ++++++
plugins/gingerbase/po/Makevars | 41 +
plugins/gingerbase/po/POTFILES.in | 3 +
plugins/gingerbase/po/de_DE.po | 2288 ++++++++++++++++++++++++++++++++
plugins/gingerbase/po/en_US.po | 2075 +++++++++++++++++++++++++++++
plugins/gingerbase/po/es_ES.po | 2305 +++++++++++++++++++++++++++++++++
plugins/gingerbase/po/fr_FR.po | 2338 +++++++++++++++++++++++++++++++++
plugins/gingerbase/po/gen-pot.in | 9 +
plugins/gingerbase/po/gingerbase.pot | 2074 +++++++++++++++++++++++++++++
plugins/gingerbase/po/it_IT.po | 2274 ++++++++++++++++++++++++++++++++
plugins/gingerbase/po/ja_JP.po | 2269 ++++++++++++++++++++++++++++++++
plugins/gingerbase/po/ko_KR.po | 2197 +++++++++++++++++++++++++++++++
plugins/gingerbase/po/pt_BR.po | 2369 ++++++++++++++++++++++++++++++++++
plugins/gingerbase/po/ru_RU.po | 2199 +++++++++++++++++++++++++++++++
plugins/gingerbase/po/zh_CN.po | 2186 +++++++++++++++++++++++++++++++
plugins/gingerbase/po/zh_TW.po | 2138 ++++++++++++++++++++++++++++++
17 files changed, 27174 insertions(+)
create mode 100644 plugins/gingerbase/po/LINGUAS
create mode 100644 plugins/gingerbase/po/Makefile.in.in
create mode 100644 plugins/gingerbase/po/Makevars
create mode 100644 plugins/gingerbase/po/POTFILES.in
create mode 100644 plugins/gingerbase/po/de_DE.po
create mode 100644 plugins/gingerbase/po/en_US.po
create mode 100644 plugins/gingerbase/po/es_ES.po
create mode 100644 plugins/gingerbase/po/fr_FR.po
create mode 100644 plugins/gingerbase/po/gen-pot.in
create mode 100755 plugins/gingerbase/po/gingerbase.pot
create mode 100644 plugins/gingerbase/po/it_IT.po
create mode 100644 plugins/gingerbase/po/ja_JP.po
create mode 100644 plugins/gingerbase/po/ko_KR.po
create mode 100644 plugins/gingerbase/po/pt_BR.po
create mode 100644 plugins/gingerbase/po/ru_RU.po
create mode 100644 plugins/gingerbase/po/zh_CN.po
create mode 100644 plugins/gingerbase/po/zh_TW.po
diff --git a/plugins/gingerbase/po/LINGUAS b/plugins/gingerbase/po/LINGUAS
new file mode 100644
index 0000000..3fcb18f
--- /dev/null
+++ b/plugins/gingerbase/po/LINGUAS
@@ -0,0 +1,11 @@
+en_US
+pt_BR
+zh_CN
+de_DE
+es_ES
+fr_FR
+it_IT
+ja_JP
+ko_KR
+ru_RU
+zh_TW
diff --git a/plugins/gingerbase/po/Makefile.in.in b/plugins/gingerbase/po/Makefile.in.in
new file mode 100644
index 0000000..d01fb31
--- /dev/null
+++ b/plugins/gingerbase/po/Makefile.in.in
@@ -0,0 +1,398 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper(a)gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.18
+GETTEXT_MACRO_VERSION = 0.18
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @prefix@/share/locale
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(MKDIR_P).
+# This macro uses the 'mkdir -p' command if possible. Otherwise, it falls back
+# on invoking install-sh with the -d option, so your package should contain
+# install-sh as described under AC_PROG_INSTALL.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+MKDIR_P = @MKDIR_P@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in gen-pot.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: check-macro-version update-gmo all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+check-macro-version:
+ @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in
+ $(srcdir)/gen-pot $(POTFILES)
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) \
+ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+ esac; \
+ }; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(MKDIR_P) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(MKDIR_P) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(MKDIR_P) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(MKDIR_P) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ esac; \
+ }; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/plugins/gingerbase/po/Makevars b/plugins/gingerbase/po/Makevars
new file mode 100644
index 0000000..927d590
--- /dev/null
+++ b/plugins/gingerbase/po/Makevars
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = gingerbase
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER =
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = project-kimchi(a)googlegroups.com
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/plugins/gingerbase/po/POTFILES.in b/plugins/gingerbase/po/POTFILES.in
new file mode 100644
index 0000000..92eef1e
--- /dev/null
+++ b/plugins/gingerbase/po/POTFILES.in
@@ -0,0 +1,3 @@
+# List of source files which contain translatable strings.
+i18n.py
+ui/pages/*.tmpl
diff --git a/plugins/gingerbase/po/de_DE.po b/plugins/gingerbase/po/de_DE.po
new file mode 100644
index 0000000..094666e
--- /dev/null
+++ b/plugins/gingerbase/po/de_DE.po
@@ -0,0 +1,2288 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: de_DE\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr "Fehler beim Abrufen von Blockeinheiten. Details: %(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr "Fehler beim Abrufen von Blockeinheitinformationen f��r %(device)s."
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "Distro-Datei konnte nicht gefunden werden: %(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+"Distro-Datei konnte nicht analysiert werden: %(filename)s. Stellen Sie "
+"sicher, dass es sich um eine JSON-Datei handelt."
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr "Fehler beim Anmelden bei iSCSI-Hostziel %(portal)s. Details: %(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "Anmeldung bei iSCSI-Host %(host)s Ziel %(target)s nicht m��glich"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "Die ISO-Datei %(filename)s ist nicht bootf��hig"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr "Die ISO-Datei %(filename)s hat keinen g��ltigen El Torito-Bootsatz"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "Ung��ltiger El Torito-Pr��feintrag in ISO-Datei %(filename)s"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "Ung��ltiger El Torito-Boot-Indikator in ISO-Datei %(filename)s"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr ""
+"Unerwarteter Datentr��gertyp f��r Prim��rdatentr��ger in ISO-Datei %(filename)s"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr ""
+"Ung��ltiges Format beim Lesen des Datentr��gerdeskriptors in ISO-Datei "
+"%(filename)s"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"Der Hypervisor hat nicht die Berechtigung, die ISO-Datei %(filename)s zu "
+"verwenden. Verschieben Sie sie entweder nach /var/lib/libvirt oder setzen "
+"Sie, sofern m��glich, die Suchberechtigung auf Dateizugriffssteuerungslisten "
+"f��r den Benutzer '%(user)s' oder f��gen Sie '%(user)s' der ISO-Pfadgruppe "
+"hinzu oder (nicht empfohlen) 'chmod -R o+x 'path_to_iso'. Details: %(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "Virtuelle Maschine %(name)s ist bereits vorhanden"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "Virtuelle Maschine %(name)s ist nicht vorhanden"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr ""
+"Screenshot f��r gestoppte virtuelle Maschine %(name)s konnte nicht abgerufen "
+"werden"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "Fernes ISO-Image wird von diesem Server nicht unterst��tzt."
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht erstellt werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht erstellt werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht abgerufen werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+"Verbindung zur abgeschalteten Maschine %(name)s konnte nicht hergestellt "
+"werden."
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr "Zu ��berwachende Grafikadresse muss IPv4 oder IPv6 sein"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "Vorlage angeben, aus der eine virtuelle Maschine erstellt werden soll"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht gestartet werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht gestoppt werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht gel��scht werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht umbenannt werden. Details: %(err)s"
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr "Netzname muss eine Zeichenfolge sein"
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr "Netzname muss eine Zeichenfolge sein"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "Benutzer '%(users)s' ist nicht vorhanden."
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "Benutzer '%(groups)s' ist nicht vorhanden."
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht gestoppt werden. Details: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht gestartet werden. Details: %(err)s"
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr ""
+"Schnittstelle %(iface)s ist in virtueller Maschine %(name)s nicht vorhanden"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+"Das f��r die virtuelle Maschine %(name)s angegebene Netz %(network)s ist "
+"nicht vorhanden"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr "Unterst��tzter Schnittstellentyp einer virtuellen Maschine ist nur Netz"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr ""
+"Netzname f��r Schnittstelle einer virtuellen Maschine muss eine Zeichenfolge "
+"sein"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+"Ung��ltige Netzmodellkarte f��r Schnittstelle einer virtuellen Maschine "
+"angegeben"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr ""
+"Geben Sie Typ und Netz an, um eine neue Schnittstelle f��r eine virtuelle "
+"Maschine hinzuzuf��gen"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "Vorlage %(name)s ist bereits vorhanden"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr ""
+"Das f��r Vorlage %(template)s angegebene Netz '%(network)s' ist nicht "
+"vorhanden"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+"Der f��r Vorlage %(template)s angegebene Speicherpool '%(pool)s' ist nicht "
+"vorhanden"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+"Der f��r Vorlage %(template)s angegebene Speicherpool '%(pool)s' ist nicht "
+"aktiv"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "Ung��ltiger Parameter '%(param)s' f��r CD-ROM angegeben."
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr ""
+"Das f��r Vorlage %(template)s angegebene Netz %(network)s ist nicht aktiv"
+
+msgid "Template name must be a string"
+msgstr "Vorlagenname muss eine Zeichenfolge sein"
+
+msgid "Template icon must be a path to the image"
+msgstr "Vorlagensymbol muss ein Pfad zum Image sein"
+
+msgid "Template distribution must be a string"
+msgstr "Vorlagenverteilung muss eine Zeichenfolge sein"
+
+msgid "Template distribution version must be a string"
+msgstr "Vorlagenverteilungsversion muss eine Zeichenfolge sein"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "Die Anzahl der CPUs muss eine Ganzzahl sein"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "Speicherkapazit��t (MB) muss eine Ganzzahl gr����er als 512 sein"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "Vorlagen-CD-ROM muss eine lokale oder ferne ISO-Datei sein"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr "Ung��ltiger Speicherpool-URI %(value)s f��r Vorlage angegeben"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr "Geben Sie ein ISO-Image als CD-ROM an, um eine Vorlage zu erstellen"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "Alle Netze f��r die Vorlage m��ssen in einer Liste angegeben werden."
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr ""
+"Vorlage kann aufgrund des folgenden Fehlers nicht erstellt werden: %(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr ""
+"Vorlage kann aufgrund des folgenden Fehlers nicht gel��scht werden: %(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr "Vorlagen-CD-ROM muss eine lokale oder ferne ISO-Datei sein"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "Speicherpool %(name)s ist bereits vorhanden"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "Speicherpool %(name)s ist nicht vorhanden"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr "Geben Sie %(item)s an, um den Speicherpool %(name)s zu erstellen"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "Aktiver Speicherpool %(name)s konnte nicht gel��scht werden"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "Speicherpools konnten nicht aufgelistet werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "Speicherpool %(name)s konnte nicht erstellt werden. Details: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr ""
+"Anzahl der Speicherdatentr��ger im Speicherpool %(name)s konnte nicht "
+"abgerufen werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "Speicherpool %(name)s konnte nicht aktiviert werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr ""
+"Speicherpool %(name)s konnte nicht inaktiviert werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr "Speicherpool %(name)s konnte nicht gel��scht werden. Details: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+"NFS-Pool konnte nicht erstellt werden, weil Exportpfad %(path)s beim Mounten "
+"blockieren kann"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+"NFS-Pool konnte nicht erstellt werden, weil das Mounten des Exportpfads"
+"%(path)s fehlgeschlagen ist"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "Nicht unterst��tzter Speicherpooltyp: %(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr "Speicherpoolpfad muss eine Zeichenfolge sein"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "Speicherpoolhost muss eine IP oder ein Hostname sein"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "Einheitenparameter des Speicherpools muss eine Liste sein"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "Ziel-IQN eines iSCSI-Pools muss eine Zeichenfolge sein"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr ""
+"Port eines fernen Speicherservers muss eine Ganzzahl zwischen 1 und 65535 "
+"sein"
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr "Geben Sie Name und Typ an, um einen Speicherpool zu erstellen"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr ""
+"%(disk)s ist keine g��ltige Platte/Partition. Sie konnte nicht hinzugef��gt "
+"werden zum Pool %(pool)s."
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr ""
+"Die Parameterplatten k��nnen nur f��r den logischen Speicherpool aktualisiert "
+"werden."
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "Der Name des SCSI-Hostadapters muss eine Zeichenfolge sein."
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "Der Speicherpool kimchi_isos ist f��r die interne Verwendung reserviert"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"Der NFS-Speicherpool %(name)s konnte nicht aktiviert werden. NFS-Server "
+"%(server)s ist nicht erreichbar."
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"Der NFS-Speicherpool %(name)s konnte nicht inaktiviert werden. NFS-Server "
+"%(server)s ist nicht erreichbar."
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+"Pool %(name)s konnte nicht inaktiviert werden, weil er einigen Vorlagen "
+"zugeordnet ist"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr ""
+"Pool %(name)s konnte nicht gel��scht werden, weil er einigen Vorlagen "
+"zugeordnet ist"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+"Eine Datentr��gergruppe mit dem Namen '%(name)s' ist bereits vorhanden. "
+"W��hlen Sie einen anderen Namen aus, um den logischen Pool zu erstellen."
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+"Datenbank mit Tiefenscaninformationen kann aufgrund des folgenden Fehlers "
+"nicht aktualisiert werden: %(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "Speicherdatentr��ger %(name)s ist bereits vorhanden"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr ""
+"Speicherdatentr��ger %(name)s ist nicht im Speicherpool %(pool)s vorhanden"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr "Geben Sie %(item)s an, um Speicherdatentr��ger %(volume)s zu erstellen"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+"Speicherdatentr��ger konnten nicht aufgelistet werden, weil Speicherpool "
+"%(pool)s nicht aktiv ist"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr ""
+"Speicherdatentr��ger %(name)s konnte nicht in Speicherpool %(pool)s erstellt "
+"werden. Details: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+"Speicherdatentr��ger konnten nicht in Speicherpool %(pool)s aufgelistet "
+"werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr ""
+"Speicherdatentr��ger %(name)s konnten nicht bereinigt werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr ""
+"Speicherdatentr��ger %(name)s konnte nicht gel��scht werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr ""
+"Gr����e des Speicherdatentr��gers %(name)s konnte nicht ge��ndert werden. "
+"Details: %(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+"Speichertyp %(type)s unterst��tzt nicht das Erstellen und L��schen von "
+"Datentr��gern"
+
+msgid "Storage volume name must be a string"
+msgstr "Name des Speicherdatentr��gers muss eine Zeichenfolge sein"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "Zuordnung des Speicherdatentr��gers muss eine Ganzzahl sein"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr "Speicherdatentr��ger erfordert einen Datentr��gernamen"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+"Datenbank mit Datentr��gerinformationen kann aufgrund des folgenden Fehlers "
+"nicht aktualisiert werden: %(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "Schnittstelle %(name)s ist nicht vorhanden"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "Netz %(name)s ist bereits vorhanden"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "Netz %(name)s ist nicht vorhanden"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+"Das f��r das Netz %(network)s angegebene Teilnetz %(subnet)s ist nicht g��ltig."
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr ""
+"Geben Sie eine Netzschnittstelle an, um ��berbr��cktes Netz %(name)s zu "
+"erstellen"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "Aktives Netz %(name)s konnte nicht gel��scht werden"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+"Die f��r das Netz %(network)s angegebene Schnittstelle %(iface)s wird bereits "
+"verwendet"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr "Schnittstelle sollte blo��es NIC, Bonding oder Br��ckeneinheit sein."
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "Netz %(name)s konnte nicht erstellt werden. Details: %(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "Es konnte keine freie IP-Adresse f��r Netz '%(name)s' gefunden werden"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr ""
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "Unterst��tzte Netztypen sind Isoliert, NAT und Br��cke"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+"Teilnetz des Netzes muss eine Zeichenfolge mit IP-Adresse und Pr��fix oder "
+"Netzmaske sein"
+
+msgid "Network interface must be a string"
+msgstr "Netzschnittstelle muss eine Zeichenfolge sein"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "Netz-VLAN-ID muss eine Ganzzahl zwischen 1 und 4094 sein"
+
+msgid "Specify name and type to create a Network"
+msgstr "Geben Sie Name und Typ an, um ein Netz zu erstellen"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+"Netz %(name)s konnte nicht inaktiviert werden. Es sind einige virtuellen "
+"Maschinen %(vms)s und/oder Vorlagen mit diesem Netz verkn��pft."
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+"Netz %(name)s konnte nicht inaktiviert werden. Es sind einige virtuellen "
+"Maschinen %(vms)s und/oder Vorlagen mit diesem Netz verkn��pft."
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr "Br��ckeneinheit %(name)s kann nicht die Trunkeinheit eines VLAN sein."
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "Schnittstelle %(iface)s konnte nicht aktiviert werden: %(err)s."
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+"Schnittstelle %(iface)s konnte nicht aktiviert werden. Bitte ��berpr��fen Sie "
+"den Status der physischen Verbindung."
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "Debugbericht %(name)s ist nicht vorhanden"
+
+msgid "Debug report tool not found in system"
+msgstr "Debugberichtstool nicht im System gefunden"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr "Debugbericht %(name)s konnte nicht erstellt werden. Details: %(err)s."
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr "Debugbericht %(name)s konnte nicht generiert werden. Details: %(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+"Eine Datentr��gergruppe mit dem Namen '%(name)s' ist bereits vorhanden. "
+"W��hlen Sie einen anderen Namen aus, um den logischen Pool zu erstellen."
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "Speicherserver %(server)s wurde nicht von Kimchi verwendet"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "Distro '%(name)s' ist nicht vorhanden"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "Partition %(name)s ist nicht im Host vorhanden"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr ""
+"Hostmaschine konnte nicht heruntergefahren werden, weil virtuelle Maschinen "
+"ausgef��hrt werden"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr ""
+"Hostmaschine konnte nicht neu gestartet werden, weil virtuelle Maschinen "
+"ausgef��hrt werden"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "Knoteneinheit '%(name)s' nicht gefunden"
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr "Keine Pakete f��r Aktualisierung markiert"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "Paket %(name)s ist nicht f��r Aktualisierung markiert."
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr ""
+"Fehler beim Abrufen von Paketen, die f��r die Aktualsierung markiert sind. "
+"Details: %(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "Es gibt keinen kompatiblen Paketmanager f��r dieses System."
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "Ung��ltiger URI %(uri)s"
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "Ung��ltiger Speichertyp. Unterst��tzte Typen: 'cdrom'"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr "Fehler beim Erstellen einer neuen Speichereinheit: %(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr "Fehler beim Aktualisieren einer Speichereinheit: %(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr "Fehler beim Entfernen einer Speichereinheit: %(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr ""
+"Geben Sie Typ und Pfad an, um einen neuen Datentr��ger f��r eine virtuelle "
+"Maschine hinzuzf��gen"
+
+msgid "Specify path to update virtual machine disk"
+msgstr ""
+"Geben Sie einen Pfad an, um die Platte der virtuellen Maschine zu "
+"aktualisieren"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr ""
+"Geben Sie Typ und Pfad an, um einen neuen Datentr��ger f��r eine virtuelle "
+"Maschine hinzuzf��gen"
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr ""
+"YUM-Repository-ID darf nur ein aus einer Zeichenfolge bestehendes Wort sein."
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "Repository-URL muss ein http://-, ftp://- oder file://-URL sein."
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+"Repository-Konfiguration ist ein W��rterbuch mit bestimmten Werten "
+"hinsichtlich Repository-Typ."
+
+msgid "Distribution to DEB repository must be a string"
+msgstr "Verteilung an DEB-Repository muss eine Zeichenfolge sein"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "Komponenten f��r DEB-Repository m��ssen in einem Array aufgelistet sein"
+
+msgid "Components to DEB repository must be a string"
+msgstr "Komponenten f��r DEB-Repository m��ssen eine Zeichenfolge sein"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "Name des YUM-Repositorys muss eine Zeichenfolge sein."
+
+msgid "GPG check must be a boolean value."
+msgstr "GPG-Pr��fung muss ein boolescher Wert sein."
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr "GPG-Schl��ssel muss ein URL sein, der auf die ASCII-Armor-Datei zeigt."
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "Repository %(repo_id)s konnte nicht aktualisiert werden."
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "Repository %(repo_id)s ist nicht vorhanden."
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr "Repository-Verwaltungstool wurde f��r Ihr System nicht erkannt."
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "Repository %(repo_id)s ist bereits aktiviert."
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "Repository %(repo_id)s ist bereits inaktiviert."
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "Repository %(repo_id)s konnte nicht entfernt werden."
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr ""
+"Repository-Konfigurationsdatei %(repo_file)s konnte nicht geschrieben werden"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr ""
+"Geben Sie die Repository-Verteilung an, um ein DEB-Repository zu erstellen."
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "Repository %(repo_id)s konnte nicht aktiviert werden."
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "Repository %(repo_id)s konnte nicht inaktiviert werden."
+
+msgid "YUM Repository ID already exists"
+msgstr "YUM-Repository-ID ist bereits vorhanden"
+
+msgid "YUM Repository name must be a string"
+msgstr "YUM-Repository-Name muss eine Zeichenfolge sein"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "Repositorys konnten nicht aufgelistet werden. Details: '%(err)s'"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr ""
+"Repository-Informationen konnten nicht abgerufen werden. Details: '%(err)s'"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "Repository konnte nicht hinzugef��gt werden. Details: '%(err)s'"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "Repository konnte nicht entfernt werden. Details: '%(err)s'"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr "FEHLERCODE"
+
+msgid "REASON"
+msgstr "GRUND"
+
+msgid "STACK"
+msgstr "STACK"
+
+msgid "Go to Homepage"
+msgstr "Gehe zu Homepage"
+
+msgid "Create a New Virtual Machine"
+msgstr "Neue virtuelle Maschine erstellen"
+
+msgid "Virtual Machine Name"
+msgstr "Name der virtuellen Maschine"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+"Der f��r die Kennzeichnung der virtuellen Maschine verwendete Name. Falls er "
+"ausgelassen wird, wird ein Name anhand der verwendeten Vorlage ausgew��hlt."
+
+msgid "Template"
+msgstr "Vorlage"
+
+msgid "Please create a template first."
+msgstr "Erstellen Sie zun��chst eine Vorlage."
+
+msgid "Create a Template"
+msgstr "Vorlage erstellen"
+
+msgid "Please choose a template."
+msgstr "W��hlen Sie eine Vorlage aus."
+
+msgid "OS"
+msgstr "BS"
+
+msgid "OS Version"
+msgstr "BS-Version"
+
+msgid "CPUS"
+msgstr "CPUS"
+
+msgid "Memory"
+msgstr "Speicher"
+
+msgid "Create"
+msgstr "Erstellen"
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Abbrechen"
+
+msgid "Edit Guest"
+msgstr "Gast bearbeiten"
+
+msgid "General"
+msgstr "Allgemein"
+
+msgid "Storage"
+msgstr "Speicher"
+
+msgid "Interface"
+msgstr "Schnittstelle"
+
+msgid "Permission"
+msgstr "Version"
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr "Name"
+
+msgid "CPUs"
+msgstr "CPUs"
+
+msgid "Memory (MB)"
+msgstr "Speicher"
+
+msgid "Icon"
+msgstr "Symbol"
+
+msgid "Device"
+msgstr "Einheitenname"
+
+msgid "Path"
+msgstr "NFS-Pfad"
+
+msgid "Network"
+msgstr "Netz"
+
+msgid "Type"
+msgstr "Typ"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr "Alle"
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr "Anbieter"
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr "Speichern"
+
+msgid "Replace"
+msgstr "Ersetzen"
+
+msgid "Detach"
+msgstr "Abh��ngen"
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr "Starten"
+
+msgid "Reset"
+msgstr "Zur��cksetzen"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Actions"
+msgstr "Aktionen"
+
+msgid "Connect"
+msgstr "Verbinden"
+
+msgid "Clone"
+msgstr ""
+
+msgid "Edit"
+msgstr "Bearbeiten"
+
+msgid "Shut Down"
+msgstr "Herunterfahren"
+
+msgid "Delete"
+msgstr "L��schen"
+
+msgid "CPU"
+msgstr "CPU"
+
+msgid "Disk I/O"
+msgstr "Platten-E/A"
+
+msgid "Network I/O"
+msgstr "Netz-E/A"
+
+msgid "Livetile"
+msgstr "Live Tile"
+
+msgid "No guests found."
+msgstr "Keine G��ste gefunden."
+
+msgid "Add a Storage Device to VM"
+msgstr "Speichereinheit zur virtuellen Maschine hinzuf��gen"
+
+msgid "Device Type"
+msgstr "Einheitentyp"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "Der Einheitentyp. Derzeit wird nur \"cdrom\" unterst��tzt."
+
+msgid "Storage Pool"
+msgstr "Speicherpool"
+
+msgid "Storage pool which volume located in"
+msgstr "Speicherpoolpfad muss eine Zeichenfolge sein"
+
+msgid "Storage Volume"
+msgstr "Speicherpoolname"
+
+msgid "Storage volume to be attached"
+msgstr "Name des Speicherdatentr��gers muss eine Zeichenfolge sein"
+
+msgid "File Path"
+msgstr "Dateipfad"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Der ISO-Dateipfad auf dem Server f��r die CD-ROM."
+
+msgid "Attach"
+msgstr "Anh��ngen"
+
+msgid "Shut down"
+msgstr "Herunterfahren"
+
+msgid "Restart"
+msgstr "Erneut starten"
+
+msgid "Basic Information"
+msgstr "Basisinformationen"
+
+msgid "OS Distro"
+msgstr "BS-Distro"
+
+msgid "OS Code Name"
+msgstr "BS-Codename"
+
+msgid "Processor"
+msgstr "Prozessor"
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr "Systemstatistik"
+
+msgid "Software Updates"
+msgstr "Software-Updates"
+
+msgid "Update Progress"
+msgstr "Aktualisierungsfortschritt"
+
+msgid "Repositories"
+msgstr "Repositorys"
+
+msgid "Debug Reports"
+msgstr "Debugberichte"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr ""
+"Der Benutzername oder das Kennwort, den bzw. das Sie eingegeben haben, ist "
+"falsch. Versuchen Sie es bitte erneut."
+
+msgid "This field is required."
+msgstr "Dieses Feld ist erforderlich."
+
+msgid "Log in"
+msgstr "Anmelden"
+
+msgid "Logging in..."
+msgstr "Wird angemeldet..."
+
+msgid "Host"
+msgstr "Host"
+
+msgid "Guests"
+msgstr "G��ste"
+
+msgid "Templates"
+msgstr "Vorlagen"
+
+msgid "Failed to get application configuration"
+msgstr "Anwendungskonfiguration konnte nicht abgerufen werden"
+
+msgid "This is not a valid Linux path"
+msgstr "Dies ist kein g��ltiger Linux-Pfad"
+
+msgid "This is not a valid URL."
+msgstr "Dies ist kein g��ltiger URL."
+
+msgid "No such data available."
+msgstr "Keine solchen Daten verf��gbar."
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"Hostsystem kann nicht kontaktiert werden. Pr��fen Sie, ob das Hostsystem "
+"aktiv ist und obNetzkonnektivit��t besteht. HTTP-Anforderungsantwort %1. "
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "L��schbest��tigung"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Confirm"
+msgstr "Best��tigen"
+
+msgid "Warning"
+msgstr "Warnung"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "Wird geladen..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "Wiederholen"
+
+msgid "Detailed message:"
+msgstr "Detaillierte Meldung:"
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr "Dies ist keine g��ltige ISO-Datei."
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "Dies wird einige Zeit dauern. M��chten Sie fortfahren?"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "Hiermit wird die Vorlage dauerhaft gel��scht. M��chten Sie fortfahren?"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+"System konnte nicht heruntergefahren werden, weil einige virtuellen "
+"Maschinen ausgef��hrt werden!"
+
+msgid "Max:"
+msgstr "Max:"
+
+msgid "Utilization"
+msgstr "Auslastung"
+
+msgid "Available"
+msgstr "Verf��gbar"
+
+msgid "Read Rate"
+msgstr "Leserate"
+
+msgid "Write Rate"
+msgstr "Schreibrate"
+
+msgid "Received"
+msgstr "Empfangen"
+
+msgid "Sent"
+msgstr "Gesendet"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+"Durch das Herunterfahren oder Neustarten des Hosts k��nnen ungesicherte "
+"Arbeiten verloren gehen. M��chten Sie mit dem Herunterfahren/Neustarten "
+"fortfahren?"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"Repository wird dauerhaft entfernt und kann nicht wiederhergestellt werden. "
+"M��chten Sie fortfahren?"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Base URL"
+msgstr "Basis-URL"
+
+msgid "Is Mirror"
+msgstr "Ist Spiegel"
+
+msgid "URL Args"
+msgstr "URL-Args"
+
+msgid "Enabled"
+msgstr "Aktiviert"
+
+msgid "GPG Check"
+msgstr "GPG-Pr��fung"
+
+msgid "GPG Key"
+msgstr "GPG-Schl��ssel"
+
+msgid "Add"
+msgstr "Hinzuf��gen"
+
+msgid "Remove"
+msgstr "Entfernen"
+
+msgid "Enable"
+msgstr "Aktivieren"
+
+msgid "Disable"
+msgstr "Inaktivieren"
+
+msgid "Package Name"
+msgstr "Paketname"
+
+msgid "Version"
+msgstr "Version"
+
+msgid "Architecture"
+msgstr "Architektur"
+
+msgid "Repository"
+msgstr "Repository"
+
+msgid "Update All"
+msgstr "Alle aktualisieren"
+
+msgid "Updating..."
+msgstr "Wird aktualisiert..."
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr "Pakete konnten nicht aktualisiert werden."
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"Debugbericht wird dauerhaft entfernt und kann nicht wiederhergestellt "
+"werden. M��chten Sie fortfahren?"
+
+msgid "Generated Time"
+msgstr "Generierte Zeit"
+
+msgid "Generate"
+msgstr "Generieren"
+
+msgid "Generating..."
+msgstr "Wird generiert..."
+
+msgid "Rename"
+msgstr "Umbenennen"
+
+msgid "Download"
+msgstr "Herunterladen"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr ""
+"Berichtsname darf nur Buchstaben, Zahlen und/oder Bindestriche ('-') "
+"enthalten."
+
+msgid "Pending..."
+msgstr "Wird geladen..."
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+"Hiermit werden die virtuelle Maschine und deren virtuellen Platten gel��scht. "
+"Diese Operation kann nicht r��ckg��ngig gemacht werden. M��chten Sie fortfahren?"
+
+msgid "Power off Confirmation"
+msgstr "L��schbest��tigung"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr "L��schbest��tigung"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr "L��schbest��tigung"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr "Hiermit wird die Vorlage dauerhaft gel��scht. M��chten Sie fortfahren?"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"Diese CD-ROM wird dauerhaft abgeh��ngt und Sie k��nnen sie neu anh��ngen. "
+"M��chten Sie mit dem Abh��ngen fortfahren?"
+
+msgid "Attaching..."
+msgstr "Wird angeh��ngt..."
+
+msgid "Replacing..."
+msgstr "Wird ersetzt..."
+
+msgid "Successfully attached!"
+msgstr "Erfolgreich angeh��ngt!"
+
+msgid "Successfully replaced!"
+msgstr "Erfolgreich ersetzt!"
+
+msgid "Successfully detached!"
+msgstr "Erfolgreich abgeh��ngt!"
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "Die VLAN-ID muss zwischen 1 und 4094 liegen."
+
+msgid "unavailable"
+msgstr "nicht verf��gbar"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+"Diese Aktion unterbricht die Netzkonnektivit��t f��r jede virtuelle Maschine, "
+"die von diesem Netz abh��ngt."
+
+msgid "Create a network"
+msgstr "Netz erstellen"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Dieser Speicherpool ist nicht permanent. Durch diese Aktion wird er nicht "
+"inaktiviert, sondern permanent gel��scht. M��chten Sie fortfahren?"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr ""
+"Hiermit wird der Speicherpool dauerhaft gel��scht. M��chten Sie fortfahren?"
+
+msgid "This storage pool is empty."
+msgstr "Dieser Speicherpool ist leer."
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+"Hiermit wird Ihre Platte formatiert und Sie verlieren s��mtliche Daten "
+"darauf. Sind Sie sicher, dass Sie fortfahren m��chten? "
+
+msgid "SCSI Fibre Channel"
+msgstr "SCSI-Fibre Channel"
+
+msgid "No SCSI adapters found."
+msgstr "Keine SCSI-Adapter gefunden."
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr "Der Speicherpoolname darf nicht leer sein."
+
+msgid "The storage pool path can not be blank."
+msgstr "Der Speicherpoolpfad darf nicht leer sein."
+
+msgid "NFS server mount path can not be blank."
+msgstr "Der Mountpfad des NFS-Servers darf nicht leer sein."
+
+msgid "Invalid NFS mount path."
+msgstr "Ung��ltiger NFS-Mountpfad."
+
+msgid "No logical device selected."
+msgstr "Keine logische Einheit ausgew��hlt."
+
+msgid "The iSCSI target can not be blank."
+msgstr "Das iSCSI-Ziel darf nicht leer sein."
+
+msgid "Server name can not be blank."
+msgstr "Servername darf nicht leer sein."
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr "Es wird nach verf��gbaren Partitionen gesucht..."
+
+msgid "No available partitions found."
+msgstr "Keine g��ltigen Partitionen gefunden."
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Dieser Speicherpool ist nicht permanent. Durch diese Aktion wird er nicht "
+"inaktiviert, sondern permanent gel��scht. M��chten Sie fortfahren?"
+
+msgid "Unable to retrieve partitions information."
+msgstr ""
+"Repository-Informationen konnten nicht abgerufen werden. Details: '%(err)s'"
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "Der Speicherpoolname darf nicht leer sein."
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr "Netzname"
+
+msgid "State"
+msgstr "Status"
+
+msgid "Network Type"
+msgstr "Netztyp"
+
+msgid "Address Space"
+msgstr "Adressraum"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr "Ung��ltiger Speicherpoolname. Er darf nicht '/' enthalten."
+
+msgid "Isolated: no external network connection"
+msgstr "Isolatiert: keine physisische Netzverbindung"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT: nur ausgehende physische Netzverbindung"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr ""
+"��berbr��ckt: Virtuelle Maschinen sind direkt mit physischem Netz verbunden"
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr "Ziel:"
+
+msgid "Enable VLAN"
+msgstr "Virtuelles LAN (VLAN) aktivieren:"
+
+msgid "VLAN ID"
+msgstr "VLAN-ID:"
+
+msgid "Stop"
+msgstr "Stoppen"
+
+msgid "Generate a New Debug Report"
+msgstr "Neuen Debugbericht erstellen"
+
+msgid "Report Name"
+msgstr "Berichtsname"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"Der Name, mit dem der Bericht gekennzeichnet wird. Falls er ausgelassen "
+"wird, wird ein Name basierend auf der aktuellen Zeit ausgew��hlt. Der Name "
+"darf Buchstaben, Zahlen und Bindestriche (\"-\") enthalten."
+
+msgid "Rename a Debug Report"
+msgstr "Neuen Debugbericht erstellen"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"Der Name, mit dem der Bericht gekennzeichnet wird. Falls er ausgelassen "
+"wird, wird ein Name basierend auf der aktuellen Zeit ausgew��hlt. Der Name "
+"darf Buchstaben, Zahlen und Bindestriche (\"-\") enthalten."
+
+msgid "Submit"
+msgstr ""
+
+msgid "Add a Repository"
+msgstr "Repository hinzuf��gen"
+
+msgid "Identifier"
+msgstr "Kennung"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "Einzelnes Wort, eindeutige Kennung f��r das Repository."
+
+msgid "Textual name for the repository."
+msgstr "Textname f��r das Repository."
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "Erforderliches Feld"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "URL zum Repository. Unterst��tzte Protokolle sind http, ftp und file."
+
+msgid "Repository is a mirror"
+msgstr "Repository ist ein Spiegel."
+
+msgid "Distribution"
+msgstr "Verteilung"
+
+msgid "Distribution of the DEB repository."
+msgstr "Verteilung des DEB-Repositorys."
+
+msgid "Components"
+msgstr "Komponenten"
+
+msgid "List of components in DEB repository."
+msgstr "Liste der Komponenten im DEB-Repository."
+
+msgid "Edit Repository"
+msgstr "Repository bearbeiten"
+
+msgid "Mirror List URL"
+msgstr "Spiegellisten-URL"
+
+msgid "Yes"
+msgstr "Ja"
+
+msgid "No"
+msgstr "Nein"
+
+msgid "Capacity"
+msgstr "Kapazit��t"
+
+msgid "Allocated"
+msgstr "Zugeordnet"
+
+msgid "Location"
+msgstr "Position"
+
+msgid "Device path"
+msgstr "Einheitenpfad"
+
+msgid "active"
+msgstr "aktiv"
+
+msgid "inactive"
+msgstr "inaktiv"
+
+msgid "Deactivate"
+msgstr "Inaktivieren"
+
+msgid "Activate"
+msgstr "Aktivieren"
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr "Definition aufheben"
+
+msgid "Format"
+msgstr "Format:"
+
+msgid "Allocation"
+msgstr "Zuordnung:"
+
+msgid "Define a New Storage Pool"
+msgstr "Neuen Speicherpool definieren"
+
+msgid "Storage Pool Name"
+msgstr "Speicherpoolname"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr ""
+"Der Name, mit dem die Speicherpools gekennzeichnet werden. Er darf nicht "
+"leer sein."
+
+msgid "Storage Pool Type"
+msgstr "Speicherpooltyp"
+
+msgid "Storage Path"
+msgstr "Speicherpfad"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr ""
+"Der Pfad des Speicherpools. Jeder Speicherpool muss einen eindeutigen Pfad "
+"haben."
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr ""
+"Kimchi versucht, das Verzeichnis zu erstellen, wenn es noch nicht in Ihrem "
+"System vorhanden ist."
+
+msgid "NFS Server IP"
+msgstr "NFS-Server-IP"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+"IP oder Hostname des NFS-Servers. Diese(r) kann eingegeben oder aus dem "
+"Verlauf ausgew��hlt werden."
+
+msgid "NFS Path"
+msgstr "NFS-Pfad"
+
+msgid "The NFS exported path on NFS server."
+msgstr "Der NFS-Exportpfad auf dem NFS-Server."
+
+msgid "iSCSI Server"
+msgstr "iSCSI-Server"
+
+msgid "Server"
+msgstr "Server"
+
+msgid "Port"
+msgstr "Port"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "IP oder Hostname des iSCSI-Servers. Diese(r) darf nicht leer sein."
+
+msgid "Target"
+msgstr "Ziel"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "Das iSCSI-Ziel auf dem iSCSI-Server"
+
+msgid "Add iSCSI Authentication"
+msgstr "iSCSI-Authentifizierung hinzuf��gen"
+
+msgid "iSCSI Authentication"
+msgstr "iSCSI-Authentifizierung"
+
+msgid "User Name"
+msgstr "Benutzername"
+
+msgid "Password"
+msgstr "Kennwort"
+
+msgid "SCSI Adapter"
+msgstr "SCSI-Adapter"
+
+msgid "Please, wait..."
+msgstr "Bitte warten..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr "Vorlage hinzuf��gen"
+
+msgid "Where is the source media for this template? "
+msgstr "Wo ist der Quellendatentr��ger f��r diese Vorlage?"
+
+msgid "Local ISO Image"
+msgstr "Lokales ISO-Image"
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr "Fernes ISO-Image"
+
+msgid "Search ISOs"
+msgstr "ISOs suchen"
+
+msgid "The following ISOs are available:"
+msgstr "Die folgenden ISOs sind verf��gbar:"
+
+msgid "OS: "
+msgstr "BS: "
+
+msgid "Version: "
+msgstr "Version: "
+
+msgid "Size: "
+msgstr "Gr����e: "
+
+msgid "Search more ISOs"
+msgstr "Weitere ISOs suchen"
+
+msgid "Create Templates from Selected ISO"
+msgstr "Vorlagen aus ausgew��hltem ISO erstellen"
+
+msgid "I want to use a specific ISO file"
+msgstr "Ich m��chte eine bestimmte ISO-Datei verwenden"
+
+msgid "Loading default remote ISOs ..."
+msgstr "Standardm����ige ferne ISOs werden geladen ..."
+
+msgid "Arch: "
+msgstr "Arch: "
+
+msgid "I want to use a custom URL"
+msgstr "Ich m��chte einen benutzerdefinierten URL verwenden"
+
+msgid "Edit Template"
+msgstr "Vorlage bearbeiten"
+
+msgid "CDROM"
+msgstr "CD-ROM"
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr "Grafik"
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "CPU-Anzahl"
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr "Keine Vorlagen gefunden."
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "L��schen ist nicht zul��ssig f��r %(resource)s"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s implementiert keine Aktualisierungsmethode"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "Erstellen ist nicht zul��ssig f��r %(resource)s"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "JSON-Anfrage konnte nicht analysiert werden"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "Diese API unterst��tzt nur JSON"
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "Datenspeicher wird nicht im Modellobjekt initialisiert."
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr ""
+#~ "Task kann aufgrund des folgenden Fehlers nicht gestartet werden: %(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr ""
+#~ "Authentifizierung f��r Benutzer '%(username)s' fehlgeschlagen. "
+#~ "[Fehlercode: %(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "Sie sind nicht berechtigt, auf Kimchi zuzugreifen"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "Geben Sie %(item)s an, um sich bei Kimchi anzumelden"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "%(item)s konnten nicht im Datenspeicher gefunden werden"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr ""
+#~ "Zeitlimit��berschreitung beim Ausf��hren des Befehls '%(cmd)s' nach "
+#~ "%(seconds)s Sekunden"
+
+#~ msgid "Help"
+#~ msgstr "Hilfe"
+
+#~ msgid "About"
+#~ msgstr "Informationen"
+
+#~ msgid "Log out"
+#~ msgstr "Abmelden"
+
+#~ msgid "Version:"
+#~ msgstr "Version:"
diff --git a/plugins/gingerbase/po/en_US.po b/plugins/gingerbase/po/en_US.po
new file mode 100644
index 0000000..149e9c4
--- /dev/null
+++ b/plugins/gingerbase/po/en_US.po
@@ -0,0 +1,2075 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr ""
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr ""
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr ""
+
+msgid "Remote ISO image is not supported by this server."
+msgstr ""
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr ""
+
+msgid "Specify a template to create a virtual machine from"
+msgstr ""
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr ""
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr ""
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr ""
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr ""
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr ""
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr ""
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr ""
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr ""
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr ""
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr ""
+
+msgid "Template name must be a string"
+msgstr ""
+
+msgid "Template icon must be a path to the image"
+msgstr ""
+
+msgid "Template distribution must be a string"
+msgstr ""
+
+msgid "Template distribution version must be a string"
+msgstr ""
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr ""
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr ""
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr ""
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr ""
+
+msgid "All networks for the template must be specified in a list."
+msgstr ""
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr ""
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr ""
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr ""
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr ""
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr ""
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr ""
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr ""
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr ""
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr ""
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr ""
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr ""
+
+msgid "The SCSI host adapter name must be a string."
+msgstr ""
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr ""
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+
+msgid "Storage volume name must be a string"
+msgstr ""
+
+msgid "Storage volume allocation must be an integer number"
+msgstr ""
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr ""
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr ""
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr ""
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr ""
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr ""
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+
+msgid "Network interface must be a string"
+msgstr ""
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr ""
+
+msgid "Specify name and type to create a Network"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr ""
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr ""
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr ""
+
+msgid "Debug report tool not found in system"
+msgstr ""
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr ""
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr ""
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr ""
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr ""
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr ""
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr ""
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr ""
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr ""
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr ""
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr ""
+
+msgid "There is no compatible package manager for this system."
+msgstr ""
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr ""
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr ""
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr ""
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr ""
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr ""
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr ""
+
+msgid "Specify path to update virtual machine disk"
+msgstr ""
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr ""
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr ""
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+
+msgid "Distribution to DEB repository must be a string"
+msgstr ""
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr ""
+
+msgid "Components to DEB repository must be a string"
+msgstr ""
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr ""
+
+msgid "GPG check must be a boolean value."
+msgstr ""
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr ""
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr ""
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr ""
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr ""
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr ""
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr ""
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr ""
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr ""
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr ""
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr ""
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr ""
+
+msgid "YUM Repository ID already exists"
+msgstr ""
+
+msgid "YUM Repository name must be a string"
+msgstr ""
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr ""
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr ""
+
+msgid "REASON"
+msgstr ""
+
+msgid "STACK"
+msgstr ""
+
+msgid "Go to Homepage"
+msgstr ""
+
+msgid "Create a New Virtual Machine"
+msgstr ""
+
+msgid "Virtual Machine Name"
+msgstr ""
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+
+msgid "Template"
+msgstr ""
+
+msgid "Please create a template first."
+msgstr ""
+
+msgid "Create a Template"
+msgstr ""
+
+msgid "Please choose a template."
+msgstr ""
+
+msgid "OS"
+msgstr ""
+
+msgid "OS Version"
+msgstr ""
+
+msgid "CPUS"
+msgstr ""
+
+msgid "Memory"
+msgstr ""
+
+msgid "Create"
+msgstr ""
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Edit Guest"
+msgstr ""
+
+msgid "General"
+msgstr ""
+
+msgid "Storage"
+msgstr ""
+
+msgid "Interface"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "CPUs"
+msgstr ""
+
+msgid "Memory (MB)"
+msgstr ""
+
+msgid "Icon"
+msgstr ""
+
+msgid "Device"
+msgstr ""
+
+msgid "Path"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Type"
+msgstr ""
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr ""
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr ""
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Detach"
+msgstr ""
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr ""
+
+msgid "Reset"
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Actions"
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Clone"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Shut Down"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "CPU"
+msgstr ""
+
+msgid "Disk I/O"
+msgstr ""
+
+msgid "Network I/O"
+msgstr ""
+
+msgid "Livetile"
+msgstr ""
+
+msgid "No guests found."
+msgstr ""
+
+msgid "Add a Storage Device to VM"
+msgstr ""
+
+msgid "Device Type"
+msgstr ""
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+
+msgid "Storage Pool"
+msgstr ""
+
+msgid "Storage pool which volume located in"
+msgstr ""
+
+msgid "Storage Volume"
+msgstr ""
+
+msgid "Storage volume to be attached"
+msgstr ""
+
+msgid "File Path"
+msgstr ""
+
+msgid "The ISO file path in the server for CDROM."
+msgstr ""
+
+msgid "Attach"
+msgstr ""
+
+msgid "Shut down"
+msgstr ""
+
+msgid "Restart"
+msgstr ""
+
+msgid "Basic Information"
+msgstr ""
+
+msgid "OS Distro"
+msgstr ""
+
+msgid "OS Code Name"
+msgstr ""
+
+msgid "Processor"
+msgstr ""
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr ""
+
+msgid "Software Updates"
+msgstr ""
+
+msgid "Update Progress"
+msgstr ""
+
+msgid "Repositories"
+msgstr ""
+
+msgid "Debug Reports"
+msgstr ""
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr ""
+
+msgid "This field is required."
+msgstr ""
+
+msgid "Log in"
+msgstr ""
+
+msgid "Logging in..."
+msgstr ""
+
+msgid "Host"
+msgstr ""
+
+msgid "Guests"
+msgstr ""
+
+msgid "Templates"
+msgstr ""
+
+msgid "Failed to get application configuration"
+msgstr ""
+
+msgid "This is not a valid Linux path"
+msgstr ""
+
+msgid "This is not a valid URL."
+msgstr ""
+
+msgid "No such data available."
+msgstr ""
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr ""
+
+msgid "OK"
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr ""
+
+msgid "Detailed message:"
+msgstr ""
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr ""
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr ""
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr ""
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+
+msgid "Max:"
+msgstr ""
+
+msgid "Utilization"
+msgstr ""
+
+msgid "Available"
+msgstr ""
+
+msgid "Read Rate"
+msgstr ""
+
+msgid "Write Rate"
+msgstr ""
+
+msgid "Received"
+msgstr ""
+
+msgid "Sent"
+msgstr ""
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+
+msgid "ID"
+msgstr ""
+
+msgid "Base URL"
+msgstr ""
+
+msgid "Is Mirror"
+msgstr ""
+
+msgid "URL Args"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "GPG Check"
+msgstr ""
+
+msgid "GPG Key"
+msgstr ""
+
+msgid "Add"
+msgstr ""
+
+msgid "Remove"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Disable"
+msgstr ""
+
+msgid "Package Name"
+msgstr ""
+
+msgid "Version"
+msgstr ""
+
+msgid "Architecture"
+msgstr ""
+
+msgid "Repository"
+msgstr ""
+
+msgid "Update All"
+msgstr ""
+
+msgid "Updating..."
+msgstr ""
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr ""
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+
+msgid "Generated Time"
+msgstr ""
+
+msgid "Generate"
+msgstr ""
+
+msgid "Generating..."
+msgstr ""
+
+msgid "Rename"
+msgstr ""
+
+msgid "Download"
+msgstr ""
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr ""
+
+msgid "Pending..."
+msgstr ""
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+
+msgid "Power off Confirmation"
+msgstr ""
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr ""
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr ""
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr ""
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+
+msgid "Attaching..."
+msgstr ""
+
+msgid "Replacing..."
+msgstr ""
+
+msgid "Successfully attached!"
+msgstr ""
+
+msgid "Successfully replaced!"
+msgstr ""
+
+msgid "Successfully detached!"
+msgstr ""
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr ""
+
+msgid "unavailable"
+msgstr ""
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+
+msgid "Create a network"
+msgstr ""
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr ""
+
+msgid "This storage pool is empty."
+msgstr ""
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+
+msgid "SCSI Fibre Channel"
+msgstr ""
+
+msgid "No SCSI adapters found."
+msgstr ""
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr ""
+
+msgid "The storage pool path can not be blank."
+msgstr ""
+
+msgid "NFS server mount path can not be blank."
+msgstr ""
+
+msgid "Invalid NFS mount path."
+msgstr ""
+
+msgid "No logical device selected."
+msgstr ""
+
+msgid "The iSCSI target can not be blank."
+msgstr ""
+
+msgid "Server name can not be blank."
+msgstr ""
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr ""
+
+msgid "No available partitions found."
+msgstr ""
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+
+msgid "Unable to retrieve partitions information."
+msgstr ""
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr ""
+
+msgid "State"
+msgstr ""
+
+msgid "Network Type"
+msgstr ""
+
+msgid "Address Space"
+msgstr ""
+
+msgid "Name should not contain '/' and '\"'."
+msgstr ""
+
+msgid "Isolated: no external network connection"
+msgstr ""
+
+msgid "NAT: outbound physical network connection only"
+msgstr ""
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr ""
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr ""
+
+msgid "Enable VLAN"
+msgstr ""
+
+msgid "VLAN ID"
+msgstr ""
+
+msgid "Stop"
+msgstr ""
+
+msgid "Generate a New Debug Report"
+msgstr ""
+
+msgid "Report Name"
+msgstr ""
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+
+msgid "Rename a Debug Report"
+msgstr ""
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+
+msgid "Submit"
+msgstr ""
+
+msgid "Add a Repository"
+msgstr ""
+
+msgid "Identifier"
+msgstr ""
+
+msgid "Single word, unique identifier for the repository."
+msgstr ""
+
+msgid "Textual name for the repository."
+msgstr ""
+
+msgid "URL"
+msgstr ""
+
+msgid "Required Field"
+msgstr ""
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr ""
+
+msgid "Repository is a mirror"
+msgstr ""
+
+msgid "Distribution"
+msgstr ""
+
+msgid "Distribution of the DEB repository."
+msgstr ""
+
+msgid "Components"
+msgstr ""
+
+msgid "List of components in DEB repository."
+msgstr ""
+
+msgid "Edit Repository"
+msgstr ""
+
+msgid "Mirror List URL"
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "Capacity"
+msgstr ""
+
+msgid "Allocated"
+msgstr ""
+
+msgid "Location"
+msgstr ""
+
+msgid "Device path"
+msgstr ""
+
+msgid "active"
+msgstr ""
+
+msgid "inactive"
+msgstr ""
+
+msgid "Deactivate"
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr ""
+
+msgid "Format"
+msgstr ""
+
+msgid "Allocation"
+msgstr ""
+
+msgid "Define a New Storage Pool"
+msgstr ""
+
+msgid "Storage Pool Name"
+msgstr ""
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr ""
+
+msgid "Storage Pool Type"
+msgstr ""
+
+msgid "Storage Path"
+msgstr ""
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr ""
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr ""
+
+msgid "NFS Server IP"
+msgstr ""
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+
+msgid "NFS Path"
+msgstr ""
+
+msgid "The NFS exported path on NFS server."
+msgstr ""
+
+msgid "iSCSI Server"
+msgstr ""
+
+msgid "Server"
+msgstr ""
+
+msgid "Port"
+msgstr ""
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "The iSCSI target on iSCSI server"
+msgstr ""
+
+msgid "Add iSCSI Authentication"
+msgstr ""
+
+msgid "iSCSI Authentication"
+msgstr ""
+
+msgid "User Name"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "SCSI Adapter"
+msgstr ""
+
+msgid "Please, wait..."
+msgstr ""
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr ""
+
+msgid "Where is the source media for this template? "
+msgstr ""
+
+msgid "Local ISO Image"
+msgstr ""
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr ""
+
+msgid "Search ISOs"
+msgstr ""
+
+msgid "The following ISOs are available:"
+msgstr ""
+
+msgid "OS: "
+msgstr ""
+
+msgid "Version: "
+msgstr ""
+
+msgid "Size: "
+msgstr ""
+
+msgid "Search more ISOs"
+msgstr ""
+
+msgid "Create Templates from Selected ISO"
+msgstr ""
+
+msgid "I want to use a specific ISO file"
+msgstr ""
+
+msgid "Loading default remote ISOs ..."
+msgstr ""
+
+msgid "Arch: "
+msgstr ""
+
+msgid "I want to use a custom URL"
+msgstr ""
+
+msgid "Edit Template"
+msgstr ""
+
+msgid "CDROM"
+msgstr ""
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr ""
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr ""
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr ""
diff --git a/plugins/gingerbase/po/es_ES.po b/plugins/gingerbase/po/es_ES.po
new file mode 100644
index 0000000..7271403
--- /dev/null
+++ b/plugins/gingerbase/po/es_ES.po
@@ -0,0 +1,2305 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: es_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr ""
+"Se ha producido un error al obtener dispositivos de bloque. Detalles: %(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr ""
+"Se ha producido un error al obtener informaci��n de dispositivo de bloque "
+"para %(device)s."
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "No se puede encontrar el archivo distro: %(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+"No se puede analizar el archivo distro: %(filename)s. Aseg��rese de que es un "
+"archivo JSON."
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr ""
+"No se puede iniciar la sesi��n en %(portal)s del destino de host iSCSI. "
+"Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr ""
+"No se puede iniciar la sesi��n en el destino %(target)s del %(host)s host de "
+"iSCSI"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "El archivo ISO %(filename)s no es arrancable"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr ""
+"El archivo ISO %(filename)s no tiene un registro de arranque de El Torito "
+"v��lido"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "Entrada de validaci��n de El Torito no v��lida en ISO %(filename)s"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "Indicador de arranque de El Torito no v��lido en ISO %(filename)s"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr ""
+"Tipo de volumen inesperado para el volumen primario en ISO %(filename)s"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr ""
+"Formato incorrecto mientras se le��a el descriptor de volumen en ISO "
+"%(filename)s"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"El hipervisor no tiene permiso para utilizar este ISO %(filename)s. "
+"Considere moverlo a /var/lib/libvirt, o establezca el permiso de b��squeda en "
+"listas de control de accesos de archivo para el usuario '%(user)s' si es "
+"posible, o a��ada el '%(user)s' al grupo de v��as de acceso ISO, o (no "
+"recomendado) 'chmod -R o+x 'path_to_iso'.Detalles: %(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "La m��quina virtual %(name)s ya existe"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "La m��quina virtual %(name)s no existe"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr ""
+"No se puede recuperar la captura de pantalla para la m��quina virtual "
+"detenida %(name)s"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "La imagen ISO remota no est�� soportada por este servidor."
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede crear la m��quina virtual %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede crear la m��quina virtual %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede recuperar la m��quina virtual %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr ""
+"La direcci��n de gr��ficos en que hay que estar a la escucha debe ser IPv4 o "
+"IPv6"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr ""
+"Especifique una plantilla a partir de la que se crear�� una m��quina virtual"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede iniciar la m��quina virtual %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede detener la m��quina virtual %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede suprimir la m��quina virtual %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede redenominar la m��quina virtual %(name)s. Detalles: %(err)s"
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr "El nombre de red debe ser una serie"
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr "El nombre de red debe ser una serie"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "El usuario '%(users)s' no existe."
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "El usuario '%(groups)s' no existe."
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede detener la m��quina virtual %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr "No se puede iniciar la m��quina virtual %(name)s. Detalles: %(err)s"
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "La interfaz %(iface)s no existe en la m��quina virtual %(name)s"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+"La red %(network)s especificada para la m��quina virtual %(name)s no existe"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr "El tipo de interfaces de m��quina virtual soportado es de red solamente"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr ""
+"El nombre de red para la interfaz de m��quina virtual debe ser una serie"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+"Especificada tarjeta de modelo de red no v��lida para la interfaz de m��quina "
+"virtual"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr ""
+"Especifique el tipo y la red para a��adir una interfaz de m��quina virtual "
+"nueva"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "La plantilla %(name)s ya existe"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr ""
+"La red '%(network)s' especificada para la plantilla %(template)s no existe"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+"La agrupaci��n de almacenamiento %(pool)s especificada para la plantilla "
+"%(template)s no existe"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+"La agrupaci��n de almacenamiento %(pool)s especificada para la plantilla "
+"%(template)s no est�� activa"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "Par��metro no v��lido '%(param)s' especificado para CDROM."
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr ""
+"La red %(network)s especificada para la plantilla %(template)s no est�� activa"
+
+msgid "Template name must be a string"
+msgstr "El nombre de plantilla debe ser una serie"
+
+msgid "Template icon must be a path to the image"
+msgstr "El icono de plantilla debe ser una v��a de acceso a la imagen"
+
+msgid "Template distribution must be a string"
+msgstr "La distribuci��n de plantilla debe ser una serie"
+
+msgid "Template distribution version must be a string"
+msgstr "La versi��n de distribuci��n de plantilla debe ser una serie"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "El n��mero de CPUs debe ser un entero"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "La cantidad de memoria (MB) debe ser un entero mayor que 512"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "El CDROM de plantilla debe ser un archivo ISO local o remoto"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr ""
+"URI de agrupaci��n de almacenamiento no v��lido %(value)s especificado para la "
+"plantilla"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr "Especifique una imagen de ISO como CDROM para crear una plantilla"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "Todas las redes para la plantilla deben especificarse en una lista."
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "No se puede crear la plantilla debido a un error: %(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "No se puede suprimir la plantilla debido a un error: %(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr "El CDROM de plantilla debe ser un archivo ISO local o remoto"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "La agrupaci��n de almacenamiento %(name)s ya existe"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "La agrupaci��n de almacenamiento %(name)s no existe"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr ""
+"Especifique %(item)s para poder crear la agrupaci��n de almacenamiento "
+"%(name)s"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "No se puede suprimir la agrupaci��n de almacenamiento activa %(name)s"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "No se pueden listar agrupaciones de almacenamiento. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr ""
+"No se puede crear la agrupaci��n de almacenamiento %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr ""
+"No se puede obtener el n��mero de vol��menes de almacenamiento en la "
+"agrupaci��n de almacenamiento %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr ""
+"No se puede activar la agrupaci��n de almacenamiento %(name)s. Detalles: "
+"%(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr ""
+"No se puede desactivar la agrupaci��n de almacenamiento %(name)s. Detalles: "
+"%(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr ""
+"No se puede suprimir la agrupaci��n de almacenamiento %(name)s. Detalles: "
+"%(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+"No se puede crear la agrupaci��n de NFS ya que la v��a de acceso de "
+"exportaci��n %(path)s podr��a bloquearse durante el montaje"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+"No se puede crear la agrupaci��n de NFS ya que el montaje de la v��a de acceso "
+"de exportaci��n %(path)s ha fallado"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "Tipo de agrupaci��n de almacenamiento no soportado: %(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr "La v��a de acceso de la agrupaci��n de almacenamiento debe ser una serie"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr ""
+"El host de la agrupaci��n de almacenamiento debe ser un IP o nombre de host"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr ""
+"El par��metro de los dispositivos de agrupaci��n de almacenamiento debe ser "
+"una lista"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "El IQN destino de una agrupaci��n de iSCSI debe ser una serie"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr ""
+"El puerto de un servidor de almacenamiento remoto debe ser un entero entre 1 "
+"y 65535"
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr ""
+"Especifique el nombre y el tipo para crear una agrupaci��n de almacenamiento"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr ""
+"%(disk)s no es un disco/partici��n. No se ha podido a��adir a la agrupaci��n "
+"%(pool)s."
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr ""
+"Los discos de par��metro s��lo pueden actualizarse para la agrupaci��n de "
+"almacenamiento l��gico."
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "El nombre del adaptador de host SCSI debe ser una serie."
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr ""
+"La agrupaci��n de almacenamiento kimchi_isos est�� reservada para uso interno"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"No se puede activar la agrupaci��n de almacenamiento NFS %(name)s. El "
+"servidor NFS %(server)s est�� fuera de alcance."
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"No se puede desactivar la agrupaci��n de almacenamiento NFS %(name)s. El "
+"servidor NFS %(server)s est�� fuera de alcance."
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+"No se puede desactivar la agrupaci��n %(name)s ya que est�� asociada con "
+"algunas plantillas"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr ""
+"No se puede suprimir la agrupaci��n %(name)s ya que est�� asociada con algunas "
+"plantillas"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+"Un grupo de vol��menes denominado '%(name)s' ya existe. Elija otro nombre "
+"para crear la agrupaci��n l��gica."
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+"No se puede actualizar la base de datos con la informaci��n de exploraci��n "
+"profunda debido a un error: %(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "El volumen de almacenamiento %(name)s ya existe"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr ""
+"El volumen de almacenamiento %(name)s no existe en la agrupaci��n de "
+"almacenamiento %(pool)s"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr ""
+"Especifique %(item)s para poder crear el volumen de almacenamiento %(volume)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+"No se pueden listar los vol��menes de almacenamiento porque la agrupaci��n de "
+"almacenamiento %(pool)s no est�� activa"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr ""
+"No se puede crear el volumen de almacenamiento %(name)s en la agrupaci��n de "
+"almacenamiento %(pool)s. Detalles: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+"No se pueden listar vol��menes de almacenamiento en la agrupaci��n de "
+"almacenamiento %(pool)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr ""
+"No se pueden borrar los vol��menes de almacenamiento %(name)s. Detalles: "
+"%(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr ""
+"No se puede suprimir el volumen de almacenamiento %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr ""
+"No se puede redimensionar el volumen de almacenamiento %(name)s. Detalles: "
+"%(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+"El tipo de almacenamiento %(type)s no da soporte a crear y suprimir vol��menes"
+
+msgid "Storage volume name must be a string"
+msgstr "El nombre de volumen de almacenamiento debe ser una serie"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "La asignaci��n de volumen de almacenamiento debe ser un n��mero entero"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr "El volumen de almacenamiento requiere un nombre de volumen"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+"No se puede actualizar la base de datos con la informaci��n de volumen de "
+"almacenamiento debido a un error: %(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "La interfaz %(name)s no existe"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "La red %(name)s ya existe"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "La red %(name)s no existe"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+"La subred %(subnet)s especificada para la red %(network)s no es v��lida."
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr "Especifique una interfaz de red para crear una red puenteada %(name)s"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "No se puede suprimir la red activa %(name)s"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+"La interfaz %(iface)s especificada para la red %(network)s ya est�� en uso"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr "La interfaz debe ser dispositivo de puente, enlazado o NIC simple."
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "No se puede crear la red %(name)s. Detalles: %(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "No se puede encontrar una direcci��n IP libre para la red '%(name)s'"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr "La interfaz %(iface)s ya existe"
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "Los tipos de red soportados son aislada, NAT y puente"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+"La subred de red debe ser una serie con direcci��n IP y prefijo o m��scara de "
+"red"
+
+msgid "Network interface must be a string"
+msgstr "La interfaz de red debe ser una serie"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "El ID de VLAN de red debe ser un entero entre 1 y 4094"
+
+msgid "Specify name and type to create a Network"
+msgstr "Especifique el nombre y el tipo para crear una red"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+"No se puede suprimir la red %(name)s. Hay algunas m��quinas virtuales %(vms)s "
+"y/o plantillas enlazadas a esta red."
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+"No se puede desactivar la red %(name)s. Hay algunas m��quinas virtuales "
+"%(vms)s y/o plantillas enlazadas a esta red."
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr ""
+"El dispositivo de puente %(name)s no puede ser el dispositivo de conexi��n "
+"troncal de una VLAN."
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "No se puede activar la interfaz %(iface)s: %(err)s."
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+"No se puede activar la interfaz %(iface)s. Compruebe el estado del enlace "
+"f��sico."
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "El informe de depuraci��n %(name)s no existe"
+
+msgid "Debug report tool not found in system"
+msgstr "Herramienta de informes de depuraci��n no encontrada en el sistema"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr ""
+"No se puede crear el informe de depuraci��n %(name)s. Detalles: %(err)s."
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr ""
+"No se puede generar el informe de depuraci��n %(name)s. Detalles: %(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+"Un grupo de vol��menes denominado '%(name)s' ya existe. Elija otro nombre "
+"para crear la agrupaci��n l��gica."
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "Kimchi no utilizaba el servidor de almacenamiento %(server)s"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "Distro '%(name)s' no existe"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "La partici��n %(name)s no existe en el host"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr ""
+"No se puede concluir la m��quina host ya que hay m��quinas virtuales en "
+"ejecuci��n"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr ""
+"No se puede rearrancar la m��quina host ya que hay m��quinas virtuales en "
+"ejecuci��n"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "No se ha encontrado el dispositivo de nodo '%(name)s'"
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr "No hay paquetes marcados para su actualizaci��n"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "El paquete %(name)s no est�� marcado para su actualizaci��n."
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr ""
+"Se ha producido un error al obtener paquetes marcados para su actualizaci��n. "
+"Detalles: %(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "No hay ning��n gestor de paquetes compatible para este sistema."
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "URI %(uri)s no v��lido"
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "Tipo de almacenamiento no v��lido. Tipos soportados: 'cdrom'"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr ""
+"Se ha producido un error al crear el nuevo dispositivo de almacenamiento: "
+"%(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr ""
+"Se ha producido un error al actualizar el dispositivo de almacenamiento: "
+"%(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr ""
+"Se ha producido un error al eliminar el dispositivo de almacenamiento: "
+"%(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr ""
+"Especifique el tipo y la v��a de acceso para a��adir un disco de m��quina "
+"virtual nuevo"
+
+msgid "Specify path to update virtual machine disk"
+msgstr ""
+"Especifique la v��a de acceso para actualizar el disco de m��quina virtual"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr ""
+"Especifique el tipo y la v��a de acceso para a��adir un disco de m��quina "
+"virtual nuevo"
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr "El ID de repositorio YUM debe ser una serie de una sola palabra."
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "El URL de repositorio debe ser http://, ftp:// o archivo:// URL."
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+"La configuraci��n de repositorio es un diccionario con valores espec��ficos "
+"seg��n el tipo de repositorio."
+
+msgid "Distribution to DEB repository must be a string"
+msgstr "El repositorio de Distribuci��n a DEB debe ser una serie"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "El repositorio de Componentes a DEB debe estar listado en una matriz"
+
+msgid "Components to DEB repository must be a string"
+msgstr "El repositorio de Componentes a DEB debe ser una serie"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "El nombre del repositorio YUM debe ser una serie."
+
+msgid "GPG check must be a boolean value."
+msgstr "La comprobaci��n de GPG debe ser un valor booleano."
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr "La clave GPG debe ser un URL que apunta al archivo blindado por ASCII."
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "No se ha podido actualizar el repositorio %(repo_id)s."
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "El repositorio %(repo_id)s no existe."
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr ""
+"La herramienta de gesti��n de repositorio no se ha reconocido para su sistema."
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "El repositorio %(repo_id)s ya est�� habilitado."
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "El repositorio %(repo_id)s ya est�� inhabilitado."
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "No se ha podido eliminar el repositorio %(repo_id)s."
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr ""
+"No se ha podido grabar el archivo de configuraci��n del repositorio "
+"%(repo_file)s"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr ""
+"Especifique la distribuci��n del repositorio para crear un repositorio de DEB."
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "No se ha podido habilitar el repositorio %(repo_id)s."
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "No se ha podido inhabilitar el repositorio %(repo_id)s."
+
+msgid "YUM Repository ID already exists"
+msgstr "El ID de repositorio de YUM ya existe"
+
+msgid "YUM Repository name must be a string"
+msgstr "El nombre del repositorio de YUM debe ser una serie"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "No se pueden listar repositorios. Detalles: '%(err)s'"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr "No se puede recuperar informaci��n del repositorio. Detalles: '%(err)s'"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "No se puede a��adir el repositorio. Detalles: '%(err)s'"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "No se puede eliminar el repositorio. Detalles: '%(err)s'"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr "C��DIGO DE ERROR"
+
+msgid "REASON"
+msgstr "RAZ��N"
+
+msgid "STACK"
+msgstr "PILA"
+
+msgid "Go to Homepage"
+msgstr "Ir a la p��gina inicial"
+
+msgid "Create a New Virtual Machine"
+msgstr "Crear una nueva m��quina virtual"
+
+msgid "Virtual Machine Name"
+msgstr "Nombre de m��quina virtual"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+"El nombre que se utiliza para identificar la m��quina virtual. Si se omite, "
+"se elegir�� un nombre bas��ndose en la plantilla utilizada."
+
+msgid "Template"
+msgstr "Plantilla"
+
+msgid "Please create a template first."
+msgstr "Cree una plantilla primero."
+
+msgid "Create a Template"
+msgstr "Crear una plantilla"
+
+msgid "Please choose a template."
+msgstr "Elija una plantilla."
+
+msgid "OS"
+msgstr "SO"
+
+msgid "OS Version"
+msgstr "Versi��n del SO"
+
+msgid "CPUS"
+msgstr "CPUS"
+
+msgid "Memory"
+msgstr "Memoria"
+
+msgid "Create"
+msgstr "Crear"
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgid "Edit Guest"
+msgstr "Editar invitado"
+
+msgid "General"
+msgstr "General"
+
+msgid "Storage"
+msgstr "Almacenamiento"
+
+msgid "Interface"
+msgstr "Interfaz"
+
+msgid "Permission"
+msgstr "Versi��n"
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr "Nombre"
+
+msgid "CPUs"
+msgstr "CPUs"
+
+msgid "Memory (MB)"
+msgstr "Memoria"
+
+msgid "Icon"
+msgstr "Icono"
+
+msgid "Device"
+msgstr "Nombre de dispositivo"
+
+msgid "Path"
+msgstr "V��a de acceso NFS"
+
+msgid "Network"
+msgstr "Red"
+
+msgid "Type"
+msgstr "Tipo"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr "Todo"
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr "Proveedor"
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr "Guardar"
+
+msgid "Replace"
+msgstr "Sustituir"
+
+msgid "Detach"
+msgstr "Desconectar"
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr "Iniciar"
+
+msgid "Reset"
+msgstr "Restablecer"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Actions"
+msgstr "Acciones"
+
+msgid "Connect"
+msgstr "Conectar"
+
+msgid "Clone"
+msgstr ""
+
+msgid "Edit"
+msgstr "Editar"
+
+msgid "Shut Down"
+msgstr "Concluir"
+
+msgid "Delete"
+msgstr "Suprimir"
+
+msgid "CPU"
+msgstr "CPU"
+
+msgid "Disk I/O"
+msgstr "E/S de disco"
+
+msgid "Network I/O"
+msgstr "E/S de red"
+
+msgid "Livetile"
+msgstr "Livetile"
+
+msgid "No guests found."
+msgstr "No se ha encontrado invitados."
+
+msgid "Add a Storage Device to VM"
+msgstr "A��adir un dispositivo de almacenamiento a VM"
+
+msgid "Device Type"
+msgstr "Tipo de dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "El tipo de dispositivo. Actualmente s��lo est�� soportado \"cdrom\"."
+
+msgid "Storage Pool"
+msgstr "Agrupaci��n de almacenamiento"
+
+msgid "Storage pool which volume located in"
+msgstr "La v��a de acceso de la agrupaci��n de almacenamiento debe ser una serie"
+
+msgid "Storage Volume"
+msgstr "Nombre de agrupaci��n de almacenamiento"
+
+msgid "Storage volume to be attached"
+msgstr "El nombre de volumen de almacenamiento debe ser una serie"
+
+msgid "File Path"
+msgstr "V��a de acceso de archivo"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "La v��a de acceso del archivo ISO en el servidor para el CDROM."
+
+msgid "Attach"
+msgstr "Conectar"
+
+msgid "Shut down"
+msgstr "Concluir"
+
+msgid "Restart"
+msgstr "Reiniciar"
+
+msgid "Basic Information"
+msgstr "Informaci��n b��sica"
+
+msgid "OS Distro"
+msgstr "Distro de SO"
+
+msgid "OS Code Name"
+msgstr "Nombre de c��digo de SO"
+
+msgid "Processor"
+msgstr "Procesador"
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr "Estad��sticas del sistema"
+
+msgid "Software Updates"
+msgstr "Actualizaciones de software"
+
+msgid "Update Progress"
+msgstr "Actualizar progreso"
+
+msgid "Repositories"
+msgstr "Repositorios"
+
+msgid "Debug Reports"
+msgstr "Informes de depuraci��n"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr ""
+"El nombre de usuario o contrase��a que ha especificado es incorrecto. Por "
+"favor, vuelva a intentarlo."
+
+msgid "This field is required."
+msgstr "Este campo es obligatorio."
+
+msgid "Log in"
+msgstr "Iniciar sesi��n"
+
+msgid "Logging in..."
+msgstr "Iniciando sesi��n..."
+
+msgid "Host"
+msgstr "Host"
+
+msgid "Guests"
+msgstr "Invitados"
+
+msgid "Templates"
+msgstr "Plantillas"
+
+msgid "Failed to get application configuration"
+msgstr "No se ha podido obtener la configuraci��n de la aplicaci��n"
+
+msgid "This is not a valid Linux path"
+msgstr "No es una v��a de acceso de Linux v��lida"
+
+msgid "This is not a valid URL."
+msgstr "No es un URL v��lido."
+
+msgid "No such data available."
+msgstr "No hay datos de ese tipo disponibles."
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"No se puede contactar con el sistema host, Verifique que el sistema host "
+"est�� activo y que tiene conectividad de red con ��l. Respuesta de solicitud "
+"HTTP %1. "
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "Confirmaci��n de supresi��n"
+
+msgid "OK"
+msgstr "Aceptar"
+
+msgid "Confirm"
+msgstr "Confirmar"
+
+msgid "Warning"
+msgstr "Aviso"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "Cargando..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "Reintentar"
+
+msgid "Detailed message:"
+msgstr "Mensaje detallado:"
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr "No es un archivo ISO v��lido."
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "Tardar�� mucho tiempo. ��Desea continuar?"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "Esto suprimir�� permanentemente la plantilla. ��Desea continuar?"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+"No se puede concluir el sistema ya que hay algunas m��quinas virtuales en "
+"ejecuci��n."
+
+msgid "Max:"
+msgstr "M��x.:"
+
+msgid "Utilization"
+msgstr "Utilizaci��n"
+
+msgid "Available"
+msgstr "Disponible"
+
+msgid "Read Rate"
+msgstr "Velocidad de lectura"
+
+msgid "Write Rate"
+msgstr "Velocidad de escritura"
+
+msgid "Received"
+msgstr "Recibido"
+
+msgid "Sent"
+msgstr "Enviado"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+"Concluir o reiniciar el host har�� que se pierda el trabajo no guardado. "
+"��Desea continuar para concluir/reiniciar?"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"El repositorio se eliminar�� de forma permanente y no se puede recuperar. "
+"��Desea continuar?"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Base URL"
+msgstr "URL base"
+
+msgid "Is Mirror"
+msgstr "Es duplicado"
+
+msgid "URL Args"
+msgstr "Args de URL"
+
+msgid "Enabled"
+msgstr "Habilitado"
+
+msgid "GPG Check"
+msgstr "Comprobaci��n GPG"
+
+msgid "GPG Key"
+msgstr "Clave GPG"
+
+msgid "Add"
+msgstr "A��adir"
+
+msgid "Remove"
+msgstr "Eliminar"
+
+msgid "Enable"
+msgstr "Habilitar"
+
+msgid "Disable"
+msgstr "Inhabilitar"
+
+msgid "Package Name"
+msgstr "Nombre de paquete"
+
+msgid "Version"
+msgstr "Versi��n"
+
+msgid "Architecture"
+msgstr "Arquitectura"
+
+msgid "Repository"
+msgstr "Repositorio"
+
+msgid "Update All"
+msgstr "Actualizar todo"
+
+msgid "Updating..."
+msgstr "Actualizando..."
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr "No se han podido actualizar paquetes."
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"El informe de depuraci��n se eliminar�� permanentemente y no se puede "
+"recuperar. ��Desea continuar?"
+
+msgid "Generated Time"
+msgstr "Tiempo generado"
+
+msgid "Generate"
+msgstr "Generar"
+
+msgid "Generating..."
+msgstr "Generando..."
+
+msgid "Rename"
+msgstr "Redenominar"
+
+msgid "Download"
+msgstr "Descargar"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr ""
+"El nombre de informe debe contener s��lo letras, d��gitos y/o gui��n ('-')."
+
+msgid "Pending..."
+msgstr "Cargando..."
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+"Esto suprimir�� la m��quina virtual y sus discos virtuales. Esta operaci��n no "
+"puede deshacerse. ��Desea continuar?"
+
+msgid "Power off Confirmation"
+msgstr "Confirmaci��n de supresi��n"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr "Confirmaci��n de supresi��n"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr "Confirmaci��n de supresi��n"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr "Esto suprimir�� permanentemente la plantilla. ��Desea continuar?"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"Este CDROM se desconectar�� de forma permanente pero puede volver a "
+"conectarlo. ��Desea continuar para desconectarlo?"
+
+msgid "Attaching..."
+msgstr "Conectando..."
+
+msgid "Replacing..."
+msgstr "Sustituyendo..."
+
+msgid "Successfully attached!"
+msgstr "��Conectado correctamente!"
+
+msgid "Successfully replaced!"
+msgstr "��Sustituido correctamente!"
+
+msgid "Successfully detached!"
+msgstr "��Desconectado correctamente!"
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "El ID de VLAN debe estar entre 1 y 4094."
+
+msgid "unavailable"
+msgstr "no disponible"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+"Esta acci��n interrumpir�� la conectividad de red para cualquier m��quina "
+"virtual que dependa de esta red."
+
+msgid "Create a network"
+msgstr "Crear una red"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Esta agrupaci��n de almacenamiento no es persistente. En lugar de desactivar, "
+"esta acci��n la suprimir�� permanentemente. ��Desea continuar?"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr ""
+"Esto suprimir�� permanentemente la agrupaci��n de almacenamiento. ��Desea "
+"continuar?"
+
+msgid "This storage pool is empty."
+msgstr "Esta agrupaci��n de almacenamiento est�� vac��a."
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+"Dar�� formato al disco y se perder��n los datos que tenga en ��l. ��Est�� seguro "
+"de que desea continuar? "
+
+msgid "SCSI Fibre Channel"
+msgstr "Canal de fibra de SCSI"
+
+msgid "No SCSI adapters found."
+msgstr "No se han encontrado adaptadores SCSI."
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr "El nombre de la agrupaci��n de almacenamiento no puede estar en blanco."
+
+msgid "The storage pool path can not be blank."
+msgstr ""
+"La v��a de acceso de la agrupaci��n de almacenamiento no puede estar en blanco."
+
+msgid "NFS server mount path can not be blank."
+msgstr "La v��a de acceso de montaje del servidor NFS no puede estar en blanco."
+
+msgid "Invalid NFS mount path."
+msgstr "V��a de acceso de montaje de NFS no v��lida."
+
+msgid "No logical device selected."
+msgstr "No se ha seleccionado ning��n dispositivo l��gico."
+
+msgid "The iSCSI target can not be blank."
+msgstr "El destino iSCSI no puede estar en blanco."
+
+msgid "Server name can not be blank."
+msgstr "El nombre de servidor no puede estar en blanco."
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr "Buscando particiones disponibles..."
+
+msgid "No available partitions found."
+msgstr "No se han encontrado particiones disponibles."
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Esta agrupaci��n de almacenamiento no es persistente. En lugar de desactivar, "
+"esta acci��n la suprimir�� permanentemente. ��Desea continuar?"
+
+msgid "Unable to retrieve partitions information."
+msgstr "No se puede recuperar informaci��n del repositorio. Detalles: '%(err)s'"
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "El nombre de la agrupaci��n de almacenamiento no puede estar en blanco."
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr "Nombre de red"
+
+msgid "State"
+msgstr "Estado"
+
+msgid "Network Type"
+msgstr "Tipo de red"
+
+msgid "Address Space"
+msgstr "Espacio de direcciones"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr ""
+"Nombre de agrupaci��n de almacenamiento no v��lido. No debe contener '/'."
+
+msgid "Isolated: no external network connection"
+msgstr "Aislado: no hay conexi��n de red f��sica"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT: conexi��n de red f��sica saliente solamente"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr ""
+"Puenteado: Las m��quinas virtuales est��n conectadas a la red f��sica "
+"directamente"
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr "Destino:"
+
+msgid "Enable VLAN"
+msgstr "Habilitar VLAN:"
+
+msgid "VLAN ID"
+msgstr "ID de VLAN:"
+
+msgid "Stop"
+msgstr "Detener"
+
+msgid "Generate a New Debug Report"
+msgstr "Generar un Informe de depuraci��n nuevo"
+
+msgid "Report Name"
+msgstr "Nombre de informe"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"El nombre que se utiliza para identificar el informe. Si se omite, se "
+"elegir�� un nombre bas��ndose en la hora actual. El nombre puede contener: "
+"letras, d��gitos y gui��n (\"-\")."
+
+msgid "Rename a Debug Report"
+msgstr "Generar un Informe de depuraci��n nuevo"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"El nombre que se utiliza para identificar el informe. Si se omite, se "
+"elegir�� un nombre bas��ndose en la hora actual. El nombre puede contener: "
+"letras, d��gitos y gui��n (\"-\")."
+
+msgid "Submit"
+msgstr ""
+
+msgid "Add a Repository"
+msgstr "A��adir un repositorio"
+
+msgid "Identifier"
+msgstr "Identificador"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "Identificador exclusivo de una sola palabra para el repositorio."
+
+msgid "Textual name for the repository."
+msgstr "Nombre textual para el repositorio."
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "Campo obligatorio"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "URL al repositorio. Los protocolos soportados son http, ftp y archivo."
+
+msgid "Repository is a mirror"
+msgstr "El repositorio es un duplicado."
+
+msgid "Distribution"
+msgstr "Distribuci��n"
+
+msgid "Distribution of the DEB repository."
+msgstr "Distribuci��n del repositorio DEB."
+
+msgid "Components"
+msgstr "Componentes"
+
+msgid "List of components in DEB repository."
+msgstr "Lista de componentes en el repositorio DEB."
+
+msgid "Edit Repository"
+msgstr "Editar repositorio"
+
+msgid "Mirror List URL"
+msgstr "URL de lista duplicada"
+
+msgid "Yes"
+msgstr "S��"
+
+msgid "No"
+msgstr "No"
+
+msgid "Capacity"
+msgstr "Capacidad"
+
+msgid "Allocated"
+msgstr "Asignado"
+
+msgid "Location"
+msgstr "Ubicaci��n"
+
+msgid "Device path"
+msgstr "V��a de acceso del dispositivo"
+
+msgid "active"
+msgstr "activo"
+
+msgid "inactive"
+msgstr "inactivo"
+
+msgid "Deactivate"
+msgstr "Desactivar"
+
+msgid "Activate"
+msgstr "Activar"
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr "No definir"
+
+msgid "Format"
+msgstr "Formato:"
+
+msgid "Allocation"
+msgstr "Asignado:"
+
+msgid "Define a New Storage Pool"
+msgstr "Definir una agrupaci��n de almacenamiento nueva"
+
+msgid "Storage Pool Name"
+msgstr "Nombre de agrupaci��n de almacenamiento"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr ""
+"El nombre que se utiliza para identificar las agrupaciones de almacenamiento "
+"y no debe estar vac��o."
+
+msgid "Storage Pool Type"
+msgstr "Tipo de agrupaci��n de almacenamiento"
+
+msgid "Storage Path"
+msgstr "V��a de acceso de almacenamiento"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr ""
+"La v��a de acceso de la agrupaci��n de almacenamiento. Cada agrupaci��n de "
+"almacenamiento debe tener una v��a de acceso exclusiva."
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr "Kimchi intentar�� crear el directorio cuando no existe en el sistema."
+
+msgid "NFS Server IP"
+msgstr "IP de Servidor NFS"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+"IP o nombre de host de servidor NFS. Puede especificarse o elegirse del "
+"historial."
+
+msgid "NFS Path"
+msgstr "V��a de acceso NFS"
+
+msgid "The NFS exported path on NFS server."
+msgstr "La v��a de acceso exportada de NFS en el servidor NFS."
+
+msgid "iSCSI Server"
+msgstr "Servidor iSCSI"
+
+msgid "Server"
+msgstr "Servidor"
+
+msgid "Port"
+msgstr "Puerto"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "IP o nombre de host de servidor iSCSI. No debe estar vac��o."
+
+msgid "Target"
+msgstr "Destino"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "El destino iSCSI en el servidor iSCSI"
+
+msgid "Add iSCSI Authentication"
+msgstr "A��adir Autenticaci��n iSCSI"
+
+msgid "iSCSI Authentication"
+msgstr "Autenticaci��n iSCSI"
+
+msgid "User Name"
+msgstr "Nombre de usuario"
+
+msgid "Password"
+msgstr "Contrase��a"
+
+msgid "SCSI Adapter"
+msgstr "Adaptador SCSI"
+
+msgid "Please, wait..."
+msgstr "Por favor, espere..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr "A��adir plantilla"
+
+msgid "Where is the source media for this template? "
+msgstr "��D��nde est�� el soporte de origen para esta plantilla?"
+
+msgid "Local ISO Image"
+msgstr "Imagen ISO local"
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr "Imagen ISO remota"
+
+msgid "Search ISOs"
+msgstr "Buscar ISOs"
+
+msgid "The following ISOs are available:"
+msgstr "Las siguientes ISO est��n disponibles:"
+
+msgid "OS: "
+msgstr "SO: "
+
+msgid "Version: "
+msgstr "Versi��n: "
+
+msgid "Size: "
+msgstr "Tama��o: "
+
+msgid "Search more ISOs"
+msgstr "Buscar m��s ISO"
+
+msgid "Create Templates from Selected ISO"
+msgstr "Crear plantillas a partir de ISO seleccionadas"
+
+msgid "I want to use a specific ISO file"
+msgstr "Deseo utilizar un archivo ISO espec��fico"
+
+msgid "Loading default remote ISOs ..."
+msgstr "Cargando ISO remotas predeterminadas ..."
+
+msgid "Arch: "
+msgstr "Arch: "
+
+msgid "I want to use a custom URL"
+msgstr "Deseo utilizar un URL personalizado"
+
+msgid "Edit Template"
+msgstr "Editar plantilla"
+
+msgid "CDROM"
+msgstr "CDROM"
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr "Gr��ficos"
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "N��mero de CPU"
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr "No se han encontrado plantillas."
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "Suprimir no est�� permitido para %(resource)s"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s no implementa m��todo de actualizaci��n"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "Crear no est�� permitido para %(resource)s"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "No se puede analizar la solicitud JSON"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "Esta API s��lo da soporte a JSON"
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "El almac��n de datos no se ha iniciado en el objeto de modelo."
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "No se puede iniciar la tarea debido a un error: %(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr ""
+#~ "La autenticaci��n ha fallado para el usuario '%(username)s'. [C��digo de "
+#~ "error: %(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "No tiene autorizaci��n para acceder a Kimchi"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "Especifique %(item)s para iniciar la sesi��n en Kimchi"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "No se puede encontrar %(item)s en el almac��n de datos"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr ""
+#~ "Tiempo de espera excedido al ejecutar el mandato '%(cmd)s' despu��s de "
+#~ "%(seconds)s segundos"
+
+#~ msgid "Help"
+#~ msgstr "Ayuda"
+
+#~ msgid "About"
+#~ msgstr "Acerca de"
+
+#~ msgid "Log out"
+#~ msgstr "Finalizar sesi��n"
+
+#~ msgid "Version:"
+#~ msgstr "Versi��n:"
diff --git a/plugins/gingerbase/po/fr_FR.po b/plugins/gingerbase/po/fr_FR.po
new file mode 100644
index 0000000..6c9dd09
--- /dev/null
+++ b/plugins/gingerbase/po/fr_FR.po
@@ -0,0 +1,2338 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2014-08-27 21:30+0000\n"
+"Last-Translator: BobSynfig\n"
+"Language-Team: French (http://www.transifex.com/projects/p/kimchi/language/"
+"fr/)\n"
+"Language: fr_FR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr "Param��tre inconnu %(value)s"
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr "\"_cap\" sp��cifi��e inconnue"
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr "\"_passthrough\" doit ��tre \"true\" ou \"false\""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr "\"_passthrough_affected_by\" doit ��tre un nom de p��riph��rique"
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr "Erreur durant l'acc��s aux p��riph��riques de bloc. D��tails: %(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr ""
+"Erreur durant l'obtention de l'information sur le p��riph��rique de bloc %"
+"(device)s."
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "Impossible de trouver le fichier de distro: %(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+"Impossible de parser le fichier de distro: %(filename)s. Veuillez vous "
+"assurer qu'il s'agit d'un fichier JSON."
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr ""
+"Impossible de se connecter �� l'h��te cible iSCSI %(portal)s. D��tails: %(err)s "
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "Impossible de se connecter �� l'h��te iSCSI %(host)s cible %(target)s"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr "Impossible de trouver le fichier ISO %(filename)s"
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "Le fichier ISO %(filename)s n'est pas bootable"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr ""
+"Le fichier ISO %(filename)s n'a pas d'enregistrement de boot El Torito valide"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "Entr��e de validation El Torito invalide dans l'ISO %(filename)s"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "Indicateur de boot El Torito invalide dans l'ISO %(filename)s"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr ""
+"Type de volume inattendu pour le volume primaire dans l'ISO %(filename)s"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr ""
+"Mauvais format durant la lecture du descripteur de volume dans l'ISO %"
+"(filename)s"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the '%"
+"(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"L'hyperviseur n'a pas la permission d'utiliser cet ISO %(filename)s. "
+"Veuillez consid��rer de le d��placer sous /var/lib/libvirt,, ou de d��finir la "
+"permission de recherche sur les listes de contrpole d'acc��s fichier pour "
+"l'utilisateur '%(user)s' si possible, ou ajouter le '%(user)s' au groupe de "
+"chemins d'ISO, ou (non recommand��) 'chmod -R o+x 'chemin_vers_iso'.D��tails: "
+"%(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+"Une erreur est survenue lors de la d��tection de l'information d'OS de "
+"l'image."
+
+msgid "No OS information found in given image."
+msgstr "Aucune information d'OS trouv��e sur l'image donn��e."
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr "Impossible de lire le fichier image %(filename)s"
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+"Le fichier image doit ��tre un fichier existant sur le syst��me. %(filename)s "
+"n'est pas une donn��e valide."
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "La machine virtuelle %(name)s existe d��j��"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "La machine virtuelle %(name)s n'existe pas"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+"Impossible de renommer la machine virtuelle %(name)s. Le nom %(new_name)s "
+"est d��ja utilis�� ou la machine virtuelle n'est pas ��teinte."
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr ""
+"Impossible de r��cup��rer une capture d'��cran pour la machine virtuelle "
+"stopp��e %(name)s"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "L'image ISO distante n'est pas support��e par le serveur."
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr "Copie d'��cran non support��e par la machine virtuelle %(name)s"
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossible de cr��er la machine virtuelle %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de mettre �� jour la machine virtuelle %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de r��cup��rer la machine virtuelle %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr "Impossible de se connecter �� la machine virtuelle ��teinte %(name)s."
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr "L'adresse d'��coute du graphics doit ��tre IPv4 ou IPv6"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "Sp��cifier un mod��le �� partir duquel cr��er une machine virtuelle"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossible de d��marrer la machine virtuelle %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de mettre hors tension la machine virtuelle %(name)s. D��tails: %"
+"(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de supprimer la machine virtuelle %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de r��initrialiser la machine virtuelle %(name)s. D��tails: %(err)s"
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr "Le nom d'utilisateur doit ��tre une cha��ne de caract��res"
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr "Le nom de groupe doit ��tre une cha��ne de caract��res"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "Le(s) utilisateur(s) '%(users)s' n'existe(nt) pas"
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "Le(s) groupe(s) '%(groups)s' n'existe(nt) pas"
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossible d'��teindre la machine virtuelle %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible d'acc��der aux metadata de la machine virtuelle %(name)s. D��tails: "
+"%(err)s"
+
+msgid "The guest console password must be a string."
+msgstr "Le mot de passe de console invit��e doit ��tre une cha��ne de caract��res."
+
+msgid "The life time for the guest console password must be a number."
+msgstr "La dur��e de vie du mot de passe de console invit��e doit ��tre un nombre"
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+"La machine virtuelle %(vmid)s ne peut pas contenir le p��riph��rique h��te "
+"directement assign�� %(dev_name)s."
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+"The p��riph��rique h��te %(dev_name)s ne peut ��tre directement assign�� �� la "
+"machine virtuelle"
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr "\"name\" doit ��tre un nom de p��riph��rique"
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "L'interface %(iface)s n'existe pas dans la machine virtuelle %(name)s"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+"Le r��seau %(network)s sp��cifi�� pour la machine virtuelle %(name)s n'existe "
+"pas"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr ""
+"Le type d'interface de machine virtuelle support�� est r��seau uniquement"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr ""
+"Le nom de r��seau pour l'interface de la machine virtuelle doit ��tre une "
+"cha��ne de caract��res"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+"Mod��le de carte r��seau sp��cifi�� invalide pour l'interface de machine "
+"virtuelle"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr ""
+"Sp��cifier le type et le r��seau �� ajouter �� la nouvelle interface de la "
+"machine virtuelle"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "Le mod��le %(name)s existe d��j��"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr ""
+"Le r��seau '%(network)s' sp��cifi�� pour le mod��le %(template)s n'existe pas"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+"Le pool de stockage sp��cifi�� %(pool)s pour le mod��le %(template)s n'existe "
+"pas"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+"Le pool de stockage sp��cifi�� %(pool)s pour le mod��le %(template)s n'est pas "
+"actif"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "Param��tres '%(param)s' sp��cifi�� invalide pour le CDROM"
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr ""
+"Le r��seau %(network)s sp��cifi�� pour le mod��le %(template)s n'est pas actif"
+
+msgid "Template name must be a string"
+msgstr "Le mod��le de nom doit ��tre une cha��ne de caract��res"
+
+msgid "Template icon must be a path to the image"
+msgstr "Le mod��le d'icone doit ��tre un chemin vers l'image"
+
+msgid "Template distribution must be a string"
+msgstr "Le mod��le de distribution doit ��tre une cha��ne de caract��res"
+
+msgid "Template distribution version must be a string"
+msgstr ""
+"Le mod��le de version de distribution doit ��tre une cha��ne de caract��res"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "Le nombre de CPU doit ��tre un nombre entier sup��rieur �� 0"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "La quantit�� de m��moire (Mo) doit ��tre un nombre entier sup��rieur �� 512"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "Le CDROM mod��le doit ��tre un fichier ISO local ou distant"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr "URI %(value)s du pool de stockage sp��cifi��e invalide pour le mod��le"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr ""
+"Sp��cifiez une image ISO comme CDROM ou une image de base pour cr��er un mod��le"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "Tous les r��seaux pour le mod��le doivent ��tre sp��cifi��s dans une liste"
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr "Le volume %(volume)s n'est pas dans le pool de stockage %(pool)s"
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "Impossible de cr��er le mod��le �� cause de l'erreur: %(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "Impossilbe de supprimer le mod��le �� cause de l'erreur: %(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr "La taille de disque doit ��tre un entier sup��rieur �� 1Go."
+
+msgid "Template base image must be a valid local image file"
+msgstr "L'image de base de mod��le doit petre un fichier image local valide"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr "Ne peut identifier le format de l'image de base %(path)s"
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+"Dans la topologie de CPU, chaque ��l��ment doit ��tre un entier strictement "
+"positif."
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "Le pool de stockage %(name)s existe d��j��"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "Le pool de stockage %(name)s n'existe pas"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr "Sp��cifier %(item)s afin de cr��er le pool de stockage %(name)s"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "Impossible de supprimer le pool de stockage actif %(name)s"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "Impossible de lister les pools de stockage. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "Impossilble de cr��er le pool de stockage %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: %"
+"(err)s"
+msgstr ""
+"Impossible d'obtenir le nombre de volumes de stockage dans le pool de "
+"stockage%(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "Impossible d'activer le pool de stockage %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de d��sactiver le pool de stockage %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de supprimer le pool de stockage %(name)s. D��tails: %(err)s "
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+"Impossible de cr��er le Pool NFS du fait que le chemin d'export %(path)s "
+"pourrait se bloquer durant le montage"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+"Impossible de cr��er le pool NFS du fait que le montage du chemin d'export %"
+"(path)s a ��chou��"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "Type de pool de stockage non support��: %(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+"Les types de pool de stockage support��s sont: dir, netfs, logical, iscsi, "
+"isci et kimchi-iso"
+
+msgid "Storage pool path must be a string"
+msgstr "Le chemin du pool de stockage doit ��tre une cha��ne de caract��res"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "L'h��te du pool de stockage doit ��tre une IP ou un nom d'h��te"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "Le param��tre de p��riph��rique de pool de stockage doit ��tre une list"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "La cible IQN d'un pool iSCSI doit ��tre une cha��ne de caract��res"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr ""
+"Le port d'un serveur de stockage distant doit ��tre un nombre entier entre 1 "
+"et 65535"
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+"Le nom d'utilisateur de la cible iSCSI doit ��tre une cha��ne de caract��res"
+
+msgid "iSCSI target password must be a string"
+msgstr "Le mot de passe de la cible iSCSI doit ��tre une cha��ne de caract��res"
+
+msgid "Specify name and type to create a storage pool"
+msgstr "Sp��cifier un nom et un type pour cr��er un pool de stockage"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool %(pool)"
+"s."
+msgstr ""
+"%(disk)s n'est pas un(e) disque/partition valide. N'a pu l'ajouter au pool %"
+"(pool)s."
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr "Impossible d'agrandir le pool logique %(pool)s. D��tails: %(err)s"
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr ""
+"Les disques en param��tre peuvent seulement ��tre mis �� jour pour un pool de "
+"stockage logique."
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "Le nom d'adaptateur de l'h��te SCSI doit ��tre une chapine de caract��res"
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "Le pool de stockage kimchi_isos est r��serv�� �� un usage interne"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"Impossible d'activer le pool de stockage NFS%(name)s. Le serveur NFS %"
+"(server)s n'est pas joignable."
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"Impossible de d��sactiver le pool de stockage NFS%(name)s. Le serveur NFS %"
+"(server)s n'est pas joignable."
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+"Impossible de d��sactiver le pool %(name)s du fait qu'il est associ�� �� des "
+"mod��les"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr ""
+"Impossible de supprimer le pool %(name)s du fait qu'il est associ�� �� des "
+"mod��les"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+"Un groupe de volume appel�� '%(name)s' existe d��j��. Veuillez choisir un autre "
+"nom pour cr��er le pool logique."
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+"Impossible de mettre �� jour la base de donn��es avec les informations de scan "
+"profond �� cause de l'erreur: %(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "Le volume de stockage %(name)s existe d��j��"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr ""
+"Le volume de stockage %(name)s n'existe pas dans le pool de stockage %(pool)s"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+"Impossible de cr��er le volume de stockage %(volume)s car le pool de stockage "
+"%(pool)s n'est pas actif"
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr "Sp��cifier %(item)s afin de cr��er le volume de stockage %(volume)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+"Impossible de lister les volumes de stockage car le pool de stockage %(pool)"
+"s n'est pas actif"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: %"
+"(err)s"
+msgstr ""
+"Impossible de cr��er le volume de stockage %(name)s dans le pool de stockage %"
+"(pool)s. D��tails: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+"Impossible de lister les volumes de stockage dans le pool de stockage %(pool)"
+"s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr "Impossible de wiper les volumes de stockage %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de supprimer le volume de stockage %(name)s. D��tails: %(err)s "
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de redimensionner le volume de stockage %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+"Le type de stockage %(type)s ne supporte pas ni la cr��ation ni la "
+"suppression de volume"
+
+msgid "Storage volume name must be a string"
+msgstr "Le nom de volume de stockage doit ��tre une cha��ne de caract��res"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "L'allocation de volume de stockage doit ��tre une nombre entier"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr "Le volume de stockage requiert un nom de volume"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+"Impossible de mettre �� jour la base de donn��es avec les informations du "
+"volume de stockage �� cause de l'erreur: %(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr "Seulement un seul des param��tre %(param)s peut ��tre sp��cifi��"
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr "La cr��ation de volume avec %(param)s n'est pas support��e"
+
+msgid "Storage volume capacity must be an integer number."
+msgstr "La capacit�� du volume de stockage doit ��tre un nombre entier."
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+"L'URL du volume de stockage doit ��tre http://, https://, ftp:// ou ftps://."
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr "Impossible d'acc��der au fichier %(url)s. Veuillez le v��rifier."
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: %(err)"
+"s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "L'interface %(name)s n'existe pas"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "Le r��seau %(name)s existe d��j��"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "Le r��seau %(name)s n'existe pas"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+"Le sous-r��seau %(subnet)s sp��cifi�� pour le r��seau %(network)s n'est pas "
+"valide"
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr "Sp��cifier une interface r��seau pour cr��er le r��seau bridge %(name)s"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "Impossible de supprimer le r��seau actif %(name)s"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+"L'interface %(iface)s sp��cifi��e pour le r��seau %(network)s est d��j�� utilis��e"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr "L'interface doit ��tre un p��riph��rique NIC vide, bonding ou bridg��."
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "Impossible de cr��er le r��seau %(name)s. D��tails: %(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "Impossible de trouver une adresse IP libre pour le r��seau '%(name)s'"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr "L'interface %(iface)s existe d��j��"
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "Les types de r��seaux support��s sont isolated, NAT et bridge"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+"Le sous-r��seau doit ��tre une chaine de caract��res avec une adresse IP et un "
+"pr��fixe ou un masque de r��seau"
+
+msgid "Network interface must be a string"
+msgstr "L'interface de r��seau doit ��tre une cha��ne de caract��res"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "L'ID de VLAN du r��seau doit ��tre un nombre entier entre 1 et 4094"
+
+msgid "Specify name and type to create a Network"
+msgstr "Sp��cifiez un nom et un type pour cr��er un r��seau"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+"Impossible de supprimer le r��seau %(name)s. Il y a des machines virtuelles %"
+"(vms)s et/ou des mod��les li��s �� ce r��seau. "
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines %(vms)"
+"s and/or templates linked to this network."
+msgstr ""
+"Impossible de d��sactiver r��seau %(name)s. Il y a des machines virtuelles%"
+"(vms)s et/ou des mod��les li��s �� ce r��seau. "
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr ""
+"Le p��riph��rique bridge %(name)s ne peut ��tre le p��riph��rique tronc d'un VLAN."
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "��chec durant l'activation de l'interface %(iface)s: %(err)s."
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+"��chec durant l'activation de l'interface %(iface)s. Veuillez v��rifier le "
+"statut du lien physique."
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "Le rapport de d��boggage %(name)s n'existe pas"
+
+msgid "Debug report tool not found in system"
+msgstr "L'outil de rapport de d��boggage n'a pas ��t�� trouv�� dans le syst��me"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr ""
+"Impossible de cr��er le rapport de d��boggage %(name)s. D��tails: %(err)s."
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+"Impossible de trouver un rapport de d��boggage avec le nom fourni %(name)s"
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr ""
+"Impossible de g��n��rer le rapport de d��boggage %(name)s. D��tails: %(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr "Vous devriez donner un nom au fichier de rapport de d��boggage."
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+"Le nom du rapport de d��boggage doit ��tre une cha��ne de caract��res. Seulement "
+"les lettres, chiffres, blanc soulign�� ('_') et tirets ('-') sont accept��s."
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+"Le rapport de d��boggage avec le nom sp��cifi�� \"%(name)s\" existe d��j��. "
+"Veuillez en utiliser un autre."
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "Le server de stockage %(server)s n'��tait pas utilis�� par Kimchi"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "La distro '%(name)s' n'existe pas"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "La partition %(name)s n'existe pas sur cet h��te"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr ""
+"Impossible d'��teindre la machine h��te car des machines virtuelles en sont "
+"cours d'ex��cution"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr ""
+"Impossible de red��marrer la machine h��te car des machines virtuelles en sont "
+"cours d'ex��cution"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "P��riph��rique de noeud '%(name)s' non trouv��"
+
+msgid "Conflicting flag filters specified."
+msgstr "Filtres incompatibles sp��cifi��s."
+
+msgid "No packages marked for update"
+msgstr "Aucun paquet marqu�� pour mise �� jour"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "Le paquet %(name)s n'est pas marqu�� pour mise �� jour"
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr ""
+"Erreur durant la r��cup��ration des paquets marqu��s pour la mise�� jour. "
+"D��tails: %(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "Il n'y a pas de gestionnaire de paquets compatible avec ce syst��me."
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "URI %(uri)s invalide"
+
+msgid "Unable to choose a virtual machine name"
+msgstr "Impossible de s��lectionner un nom de machine virtuelle"
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "Type de stockage invalide. Les Types support��s sont: 'cdrom', 'disk'"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr "Seulement le chemin d'un CDROM peut ��tre modifi��."
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine %"
+"(vm_name)s"
+msgstr ""
+"Le p��riph��rique de stockage %(dev_name)s n'existe pas dans la machine "
+"virtuelle %(vm_name)s"
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr ""
+"Erreur durant la cr��ation du nouveau p��riph��rique de stockage: %(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr "Erreur durant la mise �� jour du p��riph��rique de stockage: %(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr "Erreur durant le retrait du p��riph��rique de stockage: %(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr "Ne pas supporter le branchement �� chaud de p��riph��rique IDE"
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr ""
+"Sp��cifier le type et le chemin ou le type et le pool/volume pour ajouter un "
+"nouveau disque de machine virtuelle."
+
+msgid "Specify path to update virtual machine disk"
+msgstr "Sp��cifier un chemin pour mettre �� jour le disque de machine virtuelle"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+"La limitation de %(limit)s p��riph��riques a ��t�� atteinte pour le contr��leur "
+"de type %(type)s "
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr ""
+"Seul un chemin ou pool/volume peut ��tre sp��cifi�� pour ajouter un nouveau "
+"disque de machine virtuelle"
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type %(type)"
+"s"
+msgstr ""
+"Le volume de format %(format)s s��lectionn�� ne correspond pas au type de "
+"stockage %(type)s"
+
+msgid "YUM Repository ID must be one word only string."
+msgstr ""
+"L'ID du d��p��t YUM doit ��tre une cha��ne de caract��res ne comportant qu'un "
+"seul mot"
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "L'URL du d��p��t doit ��tre une URL en http://, ftp:// ou file://."
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+"La configuration du d��p��t est un dictionaire avec des valeurs sp��cifiques en "
+"accord avec le type de d��p��t."
+
+msgid "Distribution to DEB repository must be a string"
+msgstr ""
+"La distribution dans le nom de d��p��t DEB doit ��tre une cha��ne de caract��res"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "Les composants dans le d��p��t DEB doivent ��tre list��s dans un tableau"
+
+msgid "Components to DEB repository must be a string"
+msgstr "Les composants dans le d��p��t DEB doivent ��tre une cha��ne de caract��res"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "Le nom du d��p��t YUM doit ��tre une cha��ne de caract��res"
+
+msgid "GPG check must be a boolean value."
+msgstr "La v��rification GPG doit ��tre une valeur bool��enne."
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr "La cl�� GPG doit ��tre une URL pointant vers un fichier ASCII non arm��."
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "Ne peut mettre �� jour le d��p��t %(repo_id)s."
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "Le d��p��t %(repo_id)s n'existe pas."
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr "L'outil de gestion de d��p��t n'a pas ��t�� reconnu pour votre syst��me."
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "Le d��p��t %(repo_id)s est d��j�� activ��."
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "Le d��p��t %(repo_id)s est d��j�� d��sactiv��."
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "Ne peut supprimer le d��p��t %(repo_id)s. "
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr "Ne peut ��crire le fichier de configuration du d��p��t %(repo_file)s"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr "Sp��cifier la distribution du d��p��t afin de cr��er un d��p��t DEB."
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "Ne peut activer le d��p��t %(repo_id)s."
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "Ne peut d��sactiver le d��p��t %(repo_id)s."
+
+msgid "YUM Repository ID already exists"
+msgstr "L'ID du d��p��t YUM existe d��j��"
+
+msgid "YUM Repository name must be a string"
+msgstr "Le nom du d��p��t YUM doit ��tre une cha��ne de caract��res"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "Impossible de lister les d��p��ts. D��tails: '%(err)s'"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr "Impossible de r��cup��rer les informations du d��p��t. D��tails: '%(err)s'"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "Impossible d'ajouter un d��p��t. D��tails: '%(err)s'"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "Impossible de supprimer un d��p��t. D��tails: '%(err)s'"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+"��l��ments de configurations: %(items)s ne sont pas support��s par le "
+"gestionnaire de d��p��t"
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr "ERROR CODE"
+
+msgid "REASON"
+msgstr "REASON"
+
+msgid "STACK"
+msgstr "STACK"
+
+msgid "Go to Homepage"
+msgstr "Aller �� la page d'accueil"
+
+msgid "Create a New Virtual Machine"
+msgstr "Cr��er une nouvelle Machine Virtuelle"
+
+msgid "Virtual Machine Name"
+msgstr "Nom de Machine Virtuelle"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+"Le nm est utilis�� pour identifier une machine virtuelle. Si omis, un nom "
+"sera choisi en se basant sur le mod��le utilis��."
+
+msgid "Template"
+msgstr "Mod��le"
+
+msgid "Please create a template first."
+msgstr "Veuillez d'abord cr��er un mod��le."
+
+msgid "Create a Template"
+msgstr "Cr��er un mod��le"
+
+msgid "Please choose a template."
+msgstr "Veuillez choisir un mod��le"
+
+msgid "OS"
+msgstr "OS"
+
+msgid "OS Version"
+msgstr "Version de l'OS"
+
+msgid "CPUS"
+msgstr "CPUS"
+
+msgid "Memory"
+msgstr "M��moire"
+
+msgid "Create"
+msgstr "Cr��er"
+
+msgid "Creating..."
+msgstr "Cr��ation en cours..."
+
+msgid "Cancel"
+msgstr "Annuler"
+
+msgid "Edit Guest"
+msgstr "��diter l'Invit��"
+
+msgid "General"
+msgstr "G��n��ral"
+
+msgid "Storage"
+msgstr "Stockage"
+
+msgid "Interface"
+msgstr "Interface"
+
+msgid "Permission"
+msgstr "Permission"
+
+msgid "Host PCI Device"
+msgstr "P��riph��rique PCI H��te"
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr "Nom"
+
+msgid "CPUs"
+msgstr "CPUs"
+
+msgid "Memory (MB)"
+msgstr "M��moire (Mo)"
+
+msgid "Icon"
+msgstr "Icone"
+
+msgid "Device"
+msgstr "P��riph��rique"
+
+msgid "Path"
+msgstr "Chemin"
+
+msgid "Network"
+msgstr "R��seau"
+
+msgid "Type"
+msgstr "Type"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr "Utilisateurs et groupes syst��mes disponibles"
+
+msgid "Selected system users and groups"
+msgstr "Utilisateurs et groupes syst��mes s��lectionn��s"
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr "Tous"
+
+msgid "To Add"
+msgstr "�� Ajouter"
+
+msgid "Added"
+msgstr "Ajouter"
+
+msgid "filter"
+msgstr "Filtre"
+
+msgid "Product"
+msgstr "Produit"
+
+msgid "Vendor"
+msgstr "Vendeur"
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr "Enregistrer"
+
+msgid "Replace"
+msgstr "Remplacer"
+
+msgid "Detach"
+msgstr "D��tacher"
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr "D��marrer"
+
+msgid "Reset"
+msgstr "R��initialiser"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr "Mettre hors tension"
+
+msgid "Actions"
+msgstr "Actions"
+
+msgid "Connect"
+msgstr "Connecter"
+
+msgid "Clone"
+msgstr "Cloner"
+
+msgid "Edit"
+msgstr "��diter"
+
+msgid "Shut Down"
+msgstr "��teindre"
+
+msgid "Delete"
+msgstr "Supprimer"
+
+msgid "CPU"
+msgstr "CPU"
+
+msgid "Disk I/O"
+msgstr "E/S Disque"
+
+msgid "Network I/O"
+msgstr "E/S R��seau"
+
+msgid "Livetile"
+msgstr "Livetile"
+
+msgid "No guests found."
+msgstr "Aucun invit�� trouv��."
+
+msgid "Add a Storage Device to VM"
+msgstr "Ajouter un P��riph��rique de Stockage �� la VM"
+
+msgid "Device Type"
+msgstr "Type de P��riph��rique"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"Le type de p��riph��rique. Actuellement, \"cdrom\" et \"disk\" sont support��s."
+
+msgid "Storage Pool"
+msgstr "Pool de Stockage"
+
+msgid "Storage pool which volume located in"
+msgstr "Pool de Stockage dans lequel le volume est situ��"
+
+msgid "Storage Volume"
+msgstr "Volume de Stockage"
+
+msgid "Storage volume to be attached"
+msgstr "Le volume de stockage �� attacher"
+
+msgid "File Path"
+msgstr "Chemin de Fichier"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Le chemin de fichier ISO sur le serveur comme CDROM."
+
+msgid "Attach"
+msgstr "Attacher"
+
+msgid "Shut down"
+msgstr "��teindre"
+
+msgid "Restart"
+msgstr "Red��marrer"
+
+msgid "Basic Information"
+msgstr "Informations de Base"
+
+msgid "OS Distro"
+msgstr "Distro de l'OS"
+
+msgid "OS Code Name"
+msgstr "Nom de code de l'OS"
+
+msgid "Processor"
+msgstr "Processeur"
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr "Statistiques Syst��me"
+
+msgid "Software Updates"
+msgstr "Mises �� jour Logiciel"
+
+msgid "Update Progress"
+msgstr "Progr��s de la Mise �� Jour"
+
+msgid "Repositories"
+msgstr "D��p��ts"
+
+msgid "Debug Reports"
+msgstr "Rapports de D��boggage"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr ""
+"Le nom d'utilisateur ou le mot de passe que vous avez entr�� est incorrect. "
+"Veuillez essayer �� nouveau."
+
+msgid "This field is required."
+msgstr "Ce champ est requis."
+
+msgid "Log in"
+msgstr "Se connecter"
+
+msgid "Logging in..."
+msgstr "En cours de connexion..."
+
+msgid "Host"
+msgstr "H��te"
+
+msgid "Guests"
+msgstr "Invit��s"
+
+msgid "Templates"
+msgstr "Mod��les"
+
+msgid "Failed to get application configuration"
+msgstr "��chec lors de l'obtention de la configuration de l'application"
+
+msgid "This is not a valid Linux path"
+msgstr "Ce n'est pas un chemin Linux valide"
+
+msgid "This is not a valid URL."
+msgstr "Ce n'est pas une URL valide."
+
+msgid "No such data available."
+msgstr "De telles donn��es ne sont pas disponibles."
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"Ne peut contacter le syst��me h��te. V��rifiez que le syst��me h��te est allum�� "
+"et que vous avez une connectivit�� r��seau avec lui. R��ponse de requ��te HTTP %"
+"1."
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "Confirmation de Suppression"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Confirm"
+msgstr "Confirmer"
+
+msgid "Warning"
+msgstr "Avertissement"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "Chargement en cours..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "Essayer �� nouveau"
+
+msgid "Detailed message:"
+msgstr "Message d��taill��:"
+
+msgid "No ISO found"
+msgstr "Aucune ISO d��tect��e"
+
+msgid "This is not a valid ISO file."
+msgstr "Ce n'est pas un fichier ISO valide."
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "Cela va prendre un long moment. Voulez-vous continuer ?"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr ""
+"Cela va supprimer de mani��re permanent le mod��le. Souhaites-vous continuer ?"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+"Impossible d'��teindre le syst��me du fait que certaines machines virtuelles "
+"sont lanc��es !"
+
+msgid "Max:"
+msgstr "Max:"
+
+msgid "Utilization"
+msgstr "Utilisation"
+
+msgid "Available"
+msgstr "Disponible"
+
+msgid "Read Rate"
+msgstr "Taux en Lecture"
+
+msgid "Write Rate"
+msgstr "Taux en ��criture"
+
+msgid "Received"
+msgstr "Re��u"
+
+msgid "Sent"
+msgstr "Envoy��"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+"��teindre ou red��marrer l'h��te causera la perte de tout travail non "
+"enregistr��. Continuer �� ��teindre/red��marrer ?"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"Le d��p��t sera retir�� de fa��on permanente et ne pourra ��tre r��tabli. Voulez-"
+"vous continuer ?"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Base URL"
+msgstr "URL de base"
+
+msgid "Is Mirror"
+msgstr "Est un miroir"
+
+msgid "URL Args"
+msgstr "Arguments d'URL"
+
+msgid "Enabled"
+msgstr "Activ��"
+
+msgid "GPG Check"
+msgstr "V��rification GPG"
+
+msgid "GPG Key"
+msgstr "Cl�� GPG"
+
+msgid "Add"
+msgstr "Ajouter"
+
+msgid "Remove"
+msgstr "Retirer"
+
+msgid "Enable"
+msgstr "Activer"
+
+msgid "Disable"
+msgstr "D��sactiver"
+
+msgid "Package Name"
+msgstr "Nom de paquet"
+
+msgid "Version"
+msgstr "Version"
+
+msgid "Architecture"
+msgstr "Architecture"
+
+msgid "Repository"
+msgstr "D��p��t"
+
+msgid "Update All"
+msgstr "Tout mettre �� jour"
+
+msgid "Updating..."
+msgstr "En cours de mise �� jour..."
+
+msgid "Failed to retrieve packages update information."
+msgstr "��chec de r��cup��ration des informations de mise-��-jour des paquets."
+
+msgid "Failed to update package(s)."
+msgstr "��chec durant la mise �� jour du/des paquet(s)"
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"Le rapport de d��boggage sera enlev�� de fa��on permanente et ne pourra ��tre "
+"r��tabli. Voulez-vous continuer ?"
+
+msgid "Generated Time"
+msgstr "Horodatage de g��n��ration"
+
+msgid "Generate"
+msgstr "G��n��rer"
+
+msgid "Generating..."
+msgstr "En cours de g��n��ration..."
+
+msgid "Rename"
+msgstr "Renommer"
+
+msgid "Download"
+msgstr "T��l��charger"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr ""
+"Le nom de rapport devrait contenir uniquement des lettres, nombres, "
+"soulignement ('_') et/ou tiret ('-')."
+
+msgid "Pending..."
+msgstr "En attente..."
+
+msgid "Report name is the same as the original one."
+msgstr "Le nom du rapport est le m��me que celui d'origine."
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+"Cela va supprimer la machine virtuelle et tous ses disques virtuels. Cette "
+"op��ration est irr��versible. Voulez-vous continuer ?"
+
+msgid "Power off Confirmation"
+msgstr "Confirmation de mise hors tension"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+"Cette action pourrait produire des r��sultats ind��sirables, par exemple un "
+"cache disque non flush�� dans l'invit��. Voulez-vous continuer ?"
+
+msgid "Reset Confirmation"
+msgstr "Confirmation de R��initialisation"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+"Il y a un risque de perte de donn��es caus��es par une r��initialisation sans "
+"extinction de l'OS invit��. Voulez-vous continuer ?"
+
+msgid "Shut Down Confirmation"
+msgstr "Confirmation d'Extinction"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr ""
+"Noter que l'OS invit�� pourrait ignorer cette requ��te. Voulez-vous continuer ?"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr "Confirmation de suppression de Machine Virtuelle"
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"Ce CDROM sera d��tach�� de fa��on permanente et vous pourrez le r��-attacher. "
+"Continuer le d��tachement ?"
+
+msgid "Attaching..."
+msgstr "En cours d'attachement..."
+
+msgid "Replacing..."
+msgstr "En cours de Remplacement..."
+
+msgid "Successfully attached!"
+msgstr "Attach�� avec succ��s !"
+
+msgid "Successfully replaced!"
+msgstr "Remplac�� avec succ��s !"
+
+msgid "Successfully detached!"
+msgstr "D��tach�� avec Succ��s !"
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+"Ce disque sera d��finitivement d��tach�� et peut ��tre r��-attach��. Continuer �� "
+"le d��tacher ?"
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "L'id du VLAN doit ��tre entre 1 et 4094."
+
+msgid "unavailable"
+msgstr "non disponible"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+"Cette action va interrompre la connectivit�� r��seau pour tout machine "
+"virtuelle qui d��pend de ce r��seau."
+
+msgid "Create a network"
+msgstr "Cr��er un r��seau"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Ce r��seau n'est pas persistant. Au lieu de s'arr��ter, cette actionva le "
+"suppromer de mani��re permanente. Voulez-vous continuer ?"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr ""
+"Cela va effacer de mani��re permanente le pool de stockage. Voulez-vous "
+"continuer ?"
+
+msgid "This storage pool is empty."
+msgstr "Ce pool de stockage est vide."
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+"Cela va formater votre disque et vous allez perdre toutes les donn��es qui "
+"s'y trouvent, ��tes-vous s��r de continuer ?"
+
+msgid "SCSI Fibre Channel"
+msgstr "Canal Fibre SCSI"
+
+msgid "No SCSI adapters found."
+msgstr "Aucun adaptateur SCSI trouv��."
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr "Le nom de pool de stockage ne peut ��tre vierge."
+
+msgid "The storage pool path can not be blank."
+msgstr "Le chemin de pool de stockage ne peut ��tre vierge."
+
+msgid "NFS server mount path can not be blank."
+msgstr "Le chemin de montage du serveur NFS ne peut ��tre vierge."
+
+msgid "Invalid NFS mount path."
+msgstr "Chemin de montage NFS invalide."
+
+msgid "No logical device selected."
+msgstr "Aucun p��riph��rique logique s��lectionn��."
+
+msgid "The iSCSI target can not be blank."
+msgstr "La cible iSCSI ne peut ��tre vierge."
+
+msgid "Server name can not be blank."
+msgstr "Le nom de serveur ne peut ��tre vierge."
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr "En cours de recherche de partitions disponibles..."
+
+msgid "No available partitions found."
+msgstr "Aucune partition disponible trouv��e."
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Le pool de stockage n'est pas persistent. Au lieu de le d��sactiver, cette "
+"action va le supprimer de mani��re permanente. Voulez-vous continuer ?"
+
+msgid "Unable to retrieve partitions information."
+msgstr "Impossible de r��cup��rer les informations des partitions."
+
+msgid "In progress..."
+msgstr "En cours..."
+
+msgid "Failed!"
+msgstr "��chec!"
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+"Le chemin de CDROM doit ��tre un chemin local/distant valide et ne peut ��tre "
+"virge."
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "Le pool de disque ou le volume ne peut ��tre vierge."
+
+#, fuzzy
+msgid "Filter"
+msgstr "Filtre"
+
+msgid "Network Name"
+msgstr "Nom de R��seau"
+
+msgid "State"
+msgstr "��tat"
+
+msgid "Network Type"
+msgstr "Type de R��seau"
+
+msgid "Address Space"
+msgstr "Espace d'adressage"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr "Le nom ne devrait pas contenir '/' et '\"'."
+
+msgid "Isolated: no external network connection"
+msgstr "Isol��: pas de connexion �� un r��seau externe"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT: connexion physique au r��seau sortant uniquement"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr ""
+"Bridg��: Les macines virtuelles sont connect��es directement au r��seau physique"
+
+msgid "(No interfaces found)"
+msgstr "(Aucune interface trouv��e)"
+
+msgid "Destination"
+msgstr "Destination"
+
+msgid "Enable VLAN"
+msgstr "Activer le VLAN"
+
+msgid "VLAN ID"
+msgstr "ID de VLAN"
+
+msgid "Stop"
+msgstr "Arr��ter"
+
+msgid "Generate a New Debug Report"
+msgstr "G��n��rer un Nouveau Rapport de D��boggage"
+
+msgid "Report Name"
+msgstr "Nom du Rapport"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"Le nom utilis�� pour identifier le rapport. Si omis, un nom sera choisi bas�� "
+"sur l'heure courante. Le nom peut contenir des lettres, des nombres, le "
+"soulignement (\"_\") et le tiret (\"-\")."
+
+msgid "Rename a Debug Report"
+msgstr "Renommer un Rapport de D��boggage"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"Le nom utilis�� pour identifer le rapport. Le nom peut contenir des lettres, "
+"nombres et tirets (\"-\")."
+
+msgid "Submit"
+msgstr "Soumettre"
+
+msgid "Add a Repository"
+msgstr "Ajouter un D��p��t"
+
+msgid "Identifier"
+msgstr "Identificateur"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "Mot unique, identifiant unique pour le d��p��t."
+
+msgid "Textual name for the repository."
+msgstr "Nom textuel pour le d��p��t."
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "Champ requis"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "URL du d��p��t. Les protocoles support��s sont http, ftp et ficheir."
+
+msgid "Repository is a mirror"
+msgstr "Le d��p��t est un miroir"
+
+msgid "Distribution"
+msgstr "Distribution"
+
+msgid "Distribution of the DEB repository."
+msgstr "Distribution du d��p��t DEB."
+
+msgid "Components"
+msgstr "Composants"
+
+msgid "List of components in DEB repository."
+msgstr "Liste des composants dans le d��p��t DEB."
+
+msgid "Edit Repository"
+msgstr "Editer le D��p��t"
+
+msgid "Mirror List URL"
+msgstr "URL de Liste de Miroir"
+
+msgid "Yes"
+msgstr "Oui"
+
+msgid "No"
+msgstr "Non"
+
+msgid "Capacity"
+msgstr "Capacit��"
+
+msgid "Allocated"
+msgstr "Allou��"
+
+msgid "Location"
+msgstr "Emplacement"
+
+msgid "Device path"
+msgstr "Chemin du P��riph��rique"
+
+msgid "active"
+msgstr "actif"
+
+msgid "inactive"
+msgstr "inactif"
+
+msgid "Deactivate"
+msgstr "D��sactiver"
+
+msgid "Activate"
+msgstr "Activer"
+
+msgid "Add Volume"
+msgstr "Ajouter un Volume"
+
+msgid "Extend"
+msgstr "��tendre"
+
+msgid "Undefine"
+msgstr "Supprimer"
+
+msgid "Format"
+msgstr "Format"
+
+msgid "Allocation"
+msgstr "Allocation"
+
+msgid "Define a New Storage Pool"
+msgstr "D��finir un Nouveau Pool de Stockage"
+
+msgid "Storage Pool Name"
+msgstr "Nom de Pool de Stockage"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr ""
+"Le nom utilis�� pour identifier les pools de stockage, et il ne doit pas ��tre "
+"vide."
+
+msgid "Storage Pool Type"
+msgstr "Type de Pool de Stockage"
+
+msgid "Storage Path"
+msgstr "Chemin de Stockage"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr ""
+"Le chemin du Pool de Stockage. Chaque Pool de Stockage doit avoir un chemin "
+"unique."
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr ""
+"Kimchi va essayer de cr��er un r��pertoire quand il n'existe pas d��j�� dans "
+"votre syst��me."
+
+msgid "NFS Server IP"
+msgstr "IP du Serveur NFS"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+"IP du Serveur NFS ou nom d'h��te. Il peut ��tre saisi ou entr�� �� partir de "
+"l'historique."
+
+msgid "NFS Path"
+msgstr "Chemin NFS"
+
+msgid "The NFS exported path on NFS server."
+msgstr "Le chemin NFS export�� sur le serveur NFS."
+
+msgid "iSCSI Server"
+msgstr "Serveur iSCSI"
+
+msgid "Server"
+msgstr "Serveur"
+
+msgid "Port"
+msgstr "Port"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "IP du Serveur iSCSI ou nom d'h��te. Il ne devrait pas ��tre vide."
+
+msgid "Target"
+msgstr "Cible"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "La cible iSCSI sur le serveur iSCSI"
+
+msgid "Add iSCSI Authentication"
+msgstr "Ajouter l'Authentification iSCSI"
+
+msgid "iSCSI Authentication"
+msgstr "Authentification iSCSI"
+
+msgid "User Name"
+msgstr "Nom d'Utilisateur"
+
+msgid "Password"
+msgstr "Mot de Passe"
+
+msgid "SCSI Adapter"
+msgstr "Adaptateur SCSI"
+
+msgid "Please, wait..."
+msgstr "Veuillez patienter..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr "iAjouter un Volume au Pool de Stockage"
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr "Saisir une URL distante ici"
+
+msgid "Upload a file"
+msgstr "Charger un fichier"
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr "Ajouter un Mod��le"
+
+msgid "Where is the source media for this template? "
+msgstr "O�� se trouve le media source pour le mod��le ?"
+
+msgid "Local ISO Image"
+msgstr "Image ISO Locale"
+
+msgid "Local Image File"
+msgstr "Fichier Image Local"
+
+msgid "Remote ISO Image"
+msgstr "Image ISO Distante"
+
+msgid "Search ISOs"
+msgstr "Rechercher des ISOs"
+
+msgid "The following ISOs are available:"
+msgstr "Les ISOs suivants sont disponibles:"
+
+msgid "OS: "
+msgstr "OS: "
+
+msgid "Version: "
+msgstr "Version: "
+
+msgid "Size: "
+msgstr "Taille: "
+
+msgid "Search more ISOs"
+msgstr "Chercher plus d'ISOs"
+
+msgid "Create Templates from Selected ISO"
+msgstr "Cr��er des mod��les depuis l'ISO s��lectionn��"
+
+msgid "I want to use a specific ISO file"
+msgstr "Je veux utiliser un fichier ISO sp��cifique"
+
+msgid "Loading default remote ISOs ..."
+msgstr "Chargement des ISOs distants par d��faut en cours..."
+
+msgid "Arch: "
+msgstr "Arch: "
+
+msgid "I want to use a custom URL"
+msgstr "Je veux utiliser une URL personnalis��e"
+
+msgid "Edit Template"
+msgstr "��diter un Mod��le"
+
+msgid "CDROM"
+msgstr "CDROM"
+
+msgid "Image File"
+msgstr "Fichier Image"
+
+msgid "Graphics"
+msgstr "Graphiques"
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "Nombre de CPU"
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr "Aucun mod��le trouv��."
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "La suppression n'est pas autoris��e pour %(resource)s"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s n'impl��mente pas de m��thode de mise �� jour"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "La cr��ation n'est pas autoris��e pour %(resource)s"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "Impossible de parser la requ��te JSON"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "Cette API supporte uniquement le JSON"
+
+#~ msgid "Parameters does not match requirement in schema: %(err)s"
+#~ msgstr ""
+#~ "Les param��tres ne correspondent pas �� ce qui est requis dans le sch��ma: %"
+#~ "(err)s"
+
+#~ msgid "You don't have permission to perform this operation."
+#~ msgstr "Vous n'avez pas la permission d'effectuer cette op��ration."
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "Le magasin de donn��es n'est pas initi�� dans l'objet mod��le."
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "Impossible de d��marrer la t��che �� cause de l'erreur: %(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr ""
+#~ "L'authentification a ��chou�� pour l'utilisateur '%(username)s'. [Code "
+#~ "d'Erreur: %(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "Vous n'��tes pas autoris�� �� acc��der �� Kimchi"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "Sp��cifiez %(item)s pour vous logguer dans Kimchi"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "Impossible de trouver %(item)s dans le magasin de donn��es"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr ""
+#~ "Timeout durant l'ex��cution de la commande '%(cmd)s' apr��s %(seconds)s "
+#~ "secondes"
+
+#~ msgid "Help"
+#~ msgstr "Aide"
+
+#~ msgid "About"
+#~ msgstr "A propos..."
+
+#~ msgid "Log out"
+#~ msgstr "Se d��connecter"
+
+#~ msgid "Version:"
+#~ msgstr "Version:"
+
+#~ msgid "Session timeout, please re-login."
+#~ msgstr "Session expir��e, veuillez vous reconnecter."
diff --git a/plugins/gingerbase/po/gen-pot.in b/plugins/gingerbase/po/gen-pot.in
new file mode 100644
index 0000000..507f0aa
--- /dev/null
+++ b/plugins/gingerbase/po/gen-pot.in
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+for src in $@; do
+ if [ ${src: -3} == ".py" ]; then
+ cat $src
+ else
+ cat $src | @CHEETAH@ compile -
+ fi
+done | xgettext --no-location -o gingerbase.pot -L Python -
diff --git a/plugins/gingerbase/po/gingerbase.pot b/plugins/gingerbase/po/gingerbase.pot
new file mode 100755
index 0000000..d4605c7
--- /dev/null
+++ b/plugins/gingerbase/po/gingerbase.pot
@@ -0,0 +1,2074 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL(a)li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr ""
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr ""
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the '%"
+"(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr ""
+
+msgid "Remote ISO image is not supported by this server."
+msgstr ""
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr ""
+
+msgid "Specify a template to create a virtual machine from"
+msgstr ""
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr ""
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr ""
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr ""
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr ""
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr ""
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr ""
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr ""
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr ""
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr ""
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr ""
+
+msgid "Template name must be a string"
+msgstr ""
+
+msgid "Template icon must be a path to the image"
+msgstr ""
+
+msgid "Template distribution must be a string"
+msgstr ""
+
+msgid "Template distribution version must be a string"
+msgstr ""
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr ""
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr ""
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr ""
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr ""
+
+msgid "All networks for the template must be specified in a list."
+msgstr ""
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr ""
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr ""
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr ""
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr ""
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr ""
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr ""
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr ""
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr ""
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr ""
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool %(pool)"
+"s."
+msgstr ""
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr ""
+
+msgid "The SCSI host adapter name must be a string."
+msgstr ""
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr ""
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+
+msgid "Storage volume name must be a string"
+msgstr ""
+
+msgid "Storage volume allocation must be an integer number"
+msgstr ""
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: %(err)"
+"s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr ""
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr ""
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr ""
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr ""
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr ""
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr ""
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+
+msgid "Network interface must be a string"
+msgstr ""
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr ""
+
+msgid "Specify name and type to create a Network"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines %(vms)"
+"s and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr ""
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr ""
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr ""
+
+msgid "Debug report tool not found in system"
+msgstr ""
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr ""
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr ""
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr ""
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr ""
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr ""
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr ""
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr ""
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr ""
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr ""
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr ""
+
+msgid "There is no compatible package manager for this system."
+msgstr ""
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr ""
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr ""
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine %"
+"(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr ""
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr ""
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr ""
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr ""
+
+msgid "Specify path to update virtual machine disk"
+msgstr ""
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr ""
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type %(type)"
+"s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr ""
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+
+msgid "Distribution to DEB repository must be a string"
+msgstr ""
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr ""
+
+msgid "Components to DEB repository must be a string"
+msgstr ""
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr ""
+
+msgid "GPG check must be a boolean value."
+msgstr ""
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr ""
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr ""
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr ""
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr ""
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr ""
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr ""
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr ""
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr ""
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr ""
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr ""
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr ""
+
+msgid "YUM Repository ID already exists"
+msgstr ""
+
+msgid "YUM Repository name must be a string"
+msgstr ""
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr ""
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: %"
+"(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr ""
+
+msgid "REASON"
+msgstr ""
+
+msgid "STACK"
+msgstr ""
+
+msgid "Go to Homepage"
+msgstr ""
+
+msgid "Create a New Virtual Machine"
+msgstr ""
+
+msgid "Virtual Machine Name"
+msgstr ""
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+
+msgid "Template"
+msgstr ""
+
+msgid "Please create a template first."
+msgstr ""
+
+msgid "Create a Template"
+msgstr ""
+
+msgid "Please choose a template."
+msgstr ""
+
+msgid "OS"
+msgstr ""
+
+msgid "OS Version"
+msgstr ""
+
+msgid "CPUS"
+msgstr ""
+
+msgid "Memory"
+msgstr ""
+
+msgid "Create"
+msgstr ""
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Edit Guest"
+msgstr ""
+
+msgid "General"
+msgstr ""
+
+msgid "Storage"
+msgstr ""
+
+msgid "Interface"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "CPUs"
+msgstr ""
+
+msgid "Memory (MB)"
+msgstr ""
+
+msgid "Icon"
+msgstr ""
+
+msgid "Device"
+msgstr ""
+
+msgid "Path"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Type"
+msgstr ""
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr ""
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr ""
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Detach"
+msgstr ""
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr ""
+
+msgid "Reset"
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Actions"
+msgstr ""
+
+msgid "Connect"
+msgstr ""
+
+msgid "Clone"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Shut Down"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "CPU"
+msgstr ""
+
+msgid "Disk I/O"
+msgstr ""
+
+msgid "Network I/O"
+msgstr ""
+
+msgid "Livetile"
+msgstr ""
+
+msgid "No guests found."
+msgstr ""
+
+msgid "Add a Storage Device to VM"
+msgstr ""
+
+msgid "Device Type"
+msgstr ""
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+
+msgid "Storage Pool"
+msgstr ""
+
+msgid "Storage pool which volume located in"
+msgstr ""
+
+msgid "Storage Volume"
+msgstr ""
+
+msgid "Storage volume to be attached"
+msgstr ""
+
+msgid "File Path"
+msgstr ""
+
+msgid "The ISO file path in the server for CDROM."
+msgstr ""
+
+msgid "Attach"
+msgstr ""
+
+msgid "Shut down"
+msgstr ""
+
+msgid "Restart"
+msgstr ""
+
+msgid "Basic Information"
+msgstr ""
+
+msgid "OS Distro"
+msgstr ""
+
+msgid "OS Code Name"
+msgstr ""
+
+msgid "Processor"
+msgstr ""
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr ""
+
+msgid "Software Updates"
+msgstr ""
+
+msgid "Update Progress"
+msgstr ""
+
+msgid "Repositories"
+msgstr ""
+
+msgid "Debug Reports"
+msgstr ""
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr ""
+
+msgid "This field is required."
+msgstr ""
+
+msgid "Log in"
+msgstr ""
+
+msgid "Logging in..."
+msgstr ""
+
+msgid "Host"
+msgstr ""
+
+msgid "Guests"
+msgstr ""
+
+msgid "Templates"
+msgstr ""
+
+msgid "Failed to get application configuration"
+msgstr ""
+
+msgid "This is not a valid Linux path"
+msgstr ""
+
+msgid "This is not a valid URL."
+msgstr ""
+
+msgid "No such data available."
+msgstr ""
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr ""
+
+msgid "OK"
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr ""
+
+msgid "Detailed message:"
+msgstr ""
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr ""
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr ""
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr ""
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+
+msgid "Max:"
+msgstr ""
+
+msgid "Utilization"
+msgstr ""
+
+msgid "Available"
+msgstr ""
+
+msgid "Read Rate"
+msgstr ""
+
+msgid "Write Rate"
+msgstr ""
+
+msgid "Received"
+msgstr ""
+
+msgid "Sent"
+msgstr ""
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+
+msgid "ID"
+msgstr ""
+
+msgid "Base URL"
+msgstr ""
+
+msgid "Is Mirror"
+msgstr ""
+
+msgid "URL Args"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "GPG Check"
+msgstr ""
+
+msgid "GPG Key"
+msgstr ""
+
+msgid "Add"
+msgstr ""
+
+msgid "Remove"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Disable"
+msgstr ""
+
+msgid "Package Name"
+msgstr ""
+
+msgid "Version"
+msgstr ""
+
+msgid "Architecture"
+msgstr ""
+
+msgid "Repository"
+msgstr ""
+
+msgid "Update All"
+msgstr ""
+
+msgid "Updating..."
+msgstr ""
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr ""
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+
+msgid "Generated Time"
+msgstr ""
+
+msgid "Generate"
+msgstr ""
+
+msgid "Generating..."
+msgstr ""
+
+msgid "Rename"
+msgstr ""
+
+msgid "Download"
+msgstr ""
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr ""
+
+msgid "Pending..."
+msgstr ""
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+
+msgid "Power off Confirmation"
+msgstr ""
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr ""
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr ""
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr ""
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+
+msgid "Attaching..."
+msgstr ""
+
+msgid "Replacing..."
+msgstr ""
+
+msgid "Successfully attached!"
+msgstr ""
+
+msgid "Successfully replaced!"
+msgstr ""
+
+msgid "Successfully detached!"
+msgstr ""
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr ""
+
+msgid "unavailable"
+msgstr ""
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+
+msgid "Create a network"
+msgstr ""
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr ""
+
+msgid "This storage pool is empty."
+msgstr ""
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+
+msgid "SCSI Fibre Channel"
+msgstr ""
+
+msgid "No SCSI adapters found."
+msgstr ""
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr ""
+
+msgid "The storage pool path can not be blank."
+msgstr ""
+
+msgid "NFS server mount path can not be blank."
+msgstr ""
+
+msgid "Invalid NFS mount path."
+msgstr ""
+
+msgid "No logical device selected."
+msgstr ""
+
+msgid "The iSCSI target can not be blank."
+msgstr ""
+
+msgid "Server name can not be blank."
+msgstr ""
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr ""
+
+msgid "No available partitions found."
+msgstr ""
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+
+msgid "Unable to retrieve partitions information."
+msgstr ""
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr ""
+
+msgid "State"
+msgstr ""
+
+msgid "Network Type"
+msgstr ""
+
+msgid "Address Space"
+msgstr ""
+
+msgid "Name should not contain '/' and '\"'."
+msgstr ""
+
+msgid "Isolated: no external network connection"
+msgstr ""
+
+msgid "NAT: outbound physical network connection only"
+msgstr ""
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr ""
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr ""
+
+msgid "Enable VLAN"
+msgstr ""
+
+msgid "VLAN ID"
+msgstr ""
+
+msgid "Stop"
+msgstr ""
+
+msgid "Generate a New Debug Report"
+msgstr ""
+
+msgid "Report Name"
+msgstr ""
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+
+msgid "Rename a Debug Report"
+msgstr ""
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+
+msgid "Submit"
+msgstr ""
+
+msgid "Add a Repository"
+msgstr ""
+
+msgid "Identifier"
+msgstr ""
+
+msgid "Single word, unique identifier for the repository."
+msgstr ""
+
+msgid "Textual name for the repository."
+msgstr ""
+
+msgid "URL"
+msgstr ""
+
+msgid "Required Field"
+msgstr ""
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr ""
+
+msgid "Repository is a mirror"
+msgstr ""
+
+msgid "Distribution"
+msgstr ""
+
+msgid "Distribution of the DEB repository."
+msgstr ""
+
+msgid "Components"
+msgstr ""
+
+msgid "List of components in DEB repository."
+msgstr ""
+
+msgid "Edit Repository"
+msgstr ""
+
+msgid "Mirror List URL"
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "Capacity"
+msgstr ""
+
+msgid "Allocated"
+msgstr ""
+
+msgid "Location"
+msgstr ""
+
+msgid "Device path"
+msgstr ""
+
+msgid "active"
+msgstr ""
+
+msgid "inactive"
+msgstr ""
+
+msgid "Deactivate"
+msgstr ""
+
+msgid "Activate"
+msgstr ""
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr ""
+
+msgid "Format"
+msgstr ""
+
+msgid "Allocation"
+msgstr ""
+
+msgid "Define a New Storage Pool"
+msgstr ""
+
+msgid "Storage Pool Name"
+msgstr ""
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr ""
+
+msgid "Storage Pool Type"
+msgstr ""
+
+msgid "Storage Path"
+msgstr ""
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr ""
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr ""
+
+msgid "NFS Server IP"
+msgstr ""
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+
+msgid "NFS Path"
+msgstr ""
+
+msgid "The NFS exported path on NFS server."
+msgstr ""
+
+msgid "iSCSI Server"
+msgstr ""
+
+msgid "Server"
+msgstr ""
+
+msgid "Port"
+msgstr ""
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "The iSCSI target on iSCSI server"
+msgstr ""
+
+msgid "Add iSCSI Authentication"
+msgstr ""
+
+msgid "iSCSI Authentication"
+msgstr ""
+
+msgid "User Name"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "SCSI Adapter"
+msgstr ""
+
+msgid "Please, wait..."
+msgstr ""
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr ""
+
+msgid "Where is the source media for this template? "
+msgstr ""
+
+msgid "Local ISO Image"
+msgstr ""
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr ""
+
+msgid "Search ISOs"
+msgstr ""
+
+msgid "The following ISOs are available:"
+msgstr ""
+
+msgid "OS: "
+msgstr ""
+
+msgid "Version: "
+msgstr ""
+
+msgid "Size: "
+msgstr ""
+
+msgid "Search more ISOs"
+msgstr ""
+
+msgid "Create Templates from Selected ISO"
+msgstr ""
+
+msgid "I want to use a specific ISO file"
+msgstr ""
+
+msgid "Loading default remote ISOs ..."
+msgstr ""
+
+msgid "Arch: "
+msgstr ""
+
+msgid "I want to use a custom URL"
+msgstr ""
+
+msgid "Edit Template"
+msgstr ""
+
+msgid "CDROM"
+msgstr ""
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr ""
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr ""
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr ""
diff --git a/plugins/gingerbase/po/it_IT.po b/plugins/gingerbase/po/it_IT.po
new file mode 100644
index 0000000..268d536
--- /dev/null
+++ b/plugins/gingerbase/po/it_IT.po
@@ -0,0 +1,2274 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: it_IT\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr ""
+"Errore durante il richiamo dei dispositivi del blocco. Dettagli: %(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr ""
+"Errore durante il richiamo delle informazioni sul dispositivo del blocco per "
+"%(device)s."
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "Impossibile trovare il file distro: %(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+"Impossibile analizzare il file distro: %(filename)s. Verificare che sia un "
+"file JSON."
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr ""
+"Impossibile accedere a %(portal)s di destinazione host iSCSI. Dettagli: "
+"%(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "Impossibile accedere alla destinazione %(target)s host %(host)s iSCSI"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "Il file ISO %(filename)s non �� avviabile"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr "Il file ISO %(filename)s non ha un record di avvio El Torito valido"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "Voce di convalida El Torito non valida in ISO %(filename)s"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "Indicatore di avvio El Torito non valido in ISO %(filename)s"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr "Tipo di volume imprevisto per il volume primario in ISO %(filename)s"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr ""
+"Formato non corretto durante la lettura del descrittore volume in ISO "
+"%(filename)s"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"L'hypervisor non dispone dell'autorizzazione per utilizzare questo ISO "
+"%(filename)s. Spostarlo in /var/lib/libvirt o impostare l'autorizzazione di "
+"ricerca per gli elenchi di controllo accesso ai file per l'utente "
+"'%(user)s', se possibile, o aggiungere '%(user)s' al gruppo percorso ISO o "
+"(non consigliato) 'chmod -R o+x 'path_to_iso'. Dettagli: %(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "Macchina virtuale %(name)s gi�� esistente"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "La macchina virtuale %(name)s non esiste"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr ""
+"Impossibile richiamare l'immagine per la macchina virtuale arrestata %(name)s"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "L'immagine ISO remota non �� supportata da questo server."
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossibile creare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossibile creare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Impossibile richiamare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr ""
+"L'indirizzo dei grafici su cui rimanere in ascolto deve essere IPv4 o IPv6"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "Specificare un modello da cui creare una macchina virtuale"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossibile avviare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossibile eliminare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"Impossibile ridenominare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr "Il nome della rete deve essere una stringa"
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr "Il nome della rete deve essere una stringa"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "L'utente '%(users)s' non esiste."
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "L'utente '%(groups)s' non esiste."
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr "Impossibile avviare la macchina virtuale %(name)s. Dettagli: %(err)s"
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "L'interfaccia %(iface)s non esiste nella macchina virtuale %(name)s"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+"La rete %(network)s specificata per la macchina virtuale %(name)s non esiste"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr ""
+"Il tipo supportato per le interfacce della macchina virtuale �� solo rete"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr ""
+"Il nome di rete per l'interfaccia della macchina virtuale deve essere una "
+"stringa"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+"Scheda modello di rete non valida per l'interfaccia della macchina virtuale"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr ""
+"Specificare il tipo e la rete per aggiungere una nuova interfaccia della "
+"macchina virtuale"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "Modello %(name)s gi�� esistente"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr ""
+"La rete '%(network)s' specificata per il modello %(template)s non esiste"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+"Il pool di memoria %(pool)s specificato per il modello %(template)s non "
+"esiste"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+"Il pool di memoria %(pool)s specificato per il modello %(template)s non �� "
+"attivo"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "Parametro non valido %(param)s' specificato per CDROM."
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr ""
+"La rete %(network)s specificata per il modello %(template)s non �� attiva"
+
+msgid "Template name must be a string"
+msgstr "Il nome del modello deve essere una stringa"
+
+msgid "Template icon must be a path to the image"
+msgstr "L'icona del modello deve essere un percorso all'immagine"
+
+msgid "Template distribution must be a string"
+msgstr "La distribuzione del modello deve essere una stringa"
+
+msgid "Template distribution version must be a string"
+msgstr "La versione della distribuzione del modello deve essere una stringa"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "Il numero di CPU deve essere un numero intero"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr ""
+"La quantit�� di memoria (MB) deve essere un numero intero maggiore di 512"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "Il CDROM del modello deve essere un file ISO locale o remoto"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr "URI pool di memoria non valido: %(value)s specificato per il modello"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr "Specificare un'immagine ISO come CDROM per creare un modello"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "Tutte le reti per il modello devono essere specificate in un elenco."
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "Impossibile creare il modello a causa dell'errore: %(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "Impossibile eliminare il modello a causa dell'errore: %(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr "Il CDROM del modello deve essere un file ISO locale o remoto"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "Pool di memoria %(name)s gi�� esistente"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "Il pool di memoria %(name)s non esiste"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr "Specificare %(item)s per poter creare il pool di memoria %(name)s"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "Impossibile eliminare il pool di memoria attivo %(name)s"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "Impossibile elencare i pool di memoria. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "Impossibile creare il pool di memoria %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr ""
+"Impossibile ottenere il numero di volumi di memoria nel pool di memoria "
+"%(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "Impossibile attivare il pool di memoria %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr "Impossibile disattivare il pool di memoria %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr "Impossibile eliminare il pool di memoria %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+"Impossibile creare il pool NFS poich�� il percorso di esportazione %(path)s "
+"potrebbe bloccarsi durante il montaggio"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+"Impossibile creare il pool NFS poich�� il montaggio del percorso di "
+"esportazione %(path)s ha avuto esito negativo"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "Tipo di pool di memoria non supportato: %(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr "Il percorso del pool di memoria deve essere una stringa"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "L'host del pool di memoria deve essere un nome host o IP"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "Il parametro dispositivi pool di memoria deve essere un elenco"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "L'IQN di destinazione di un pool iSCSI deve essere una stringa"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr ""
+"La porta di un server di memoria remoto deve essere un numero intero tra 1 e "
+"65535"
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr "Specificare nome e tipo per creare un pool di memoria"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr ""
+"%(disk)s non �� un disco/partizione valido. Impossibile aggiungerlo al pool "
+"%(pool)s."
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr ""
+"Solo il parametro dischi pu�� essere aggiornato per il pool di memoria logico."
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "Il nome adattatore host SCSI deve essere una stringa."
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "Il pool di memoria kimchi_isos �� riservato per uso interno"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"Impossibile attivare il pool di memoria NFS %(name)s. Il server NFS "
+"%(server)s �� irraggiungibile."
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"Impossibile disattivare il pool di memoria NFS %(name)s. Il server NFS "
+"%(server)s �� irraggiungibile."
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+"Impossibile disattivare il pool %(name)s poich�� �� associato ad alcuni modelli"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr ""
+"Impossibile eliminare il pool %(name)s poich�� �� associato ad alcuni modelli"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+"Un gruppo di volumi denominato '%(name)s' esiste gi��. Scegliere un altro "
+"nome per creare il pool logico."
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+"Impossibile aggiornare il database con informazioni approfondite sulla "
+"scansione a causa dell'errore: %(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "Volume di memoria %(name)s gi�� esistente"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr "Il volume di memoria %(name)s non esiste nel pool di memoria %(pool)s"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr "Specificare %(item)s per poter creare il volume di memoria %(volume)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+"Impossibile elencare i volumi di memoria poich�� il pool di memoria %(pool)s "
+"non �� attivo"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr ""
+"Impossibile creare il volume di memoria %(name)s nel pool di memoria "
+"%(pool)s. Dettagli: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+"Impossibile elencare i volumi di memoria nel pool di memoria %(pool)s. "
+"Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr "Impossibile ripulire i volumi di memoria %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr "Impossibile eliminare il volume di memoria %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr ""
+"Impossibile ridimensionare il volume di memoria %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+"Il tipo di memoria %(type)s non supporta la creazione ed eliminazione del "
+"volume"
+
+msgid "Storage volume name must be a string"
+msgstr "Il nome del volume di memoria deve essere una stringa"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "L'assegnazione del volume di memoria deve essere un numero intero"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr "Il volume di memoria richiede un nome volume"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+"Impossibile aggiornare il database con informazioni sul volume di memoria a "
+"causa dell'errore: %(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "L'interfaccia %(name)s non esiste"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "Rete %(name)s gi�� esistente"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "La rete %(name)s non esiste"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+"La sottorete %(subnet)s specificata per la rete %(network)s non �� valida ."
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr ""
+"Specificare un'interfaccia di rete per creare la rete con bridge %(name)s"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "Impossibile eliminare la rete attiva %(name)s"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+"L'interfaccia %(iface)s specificata per la rete %(network)s �� gi�� in uso"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr ""
+"L'interfaccia deve essere un dispositivo bridge o di collegamento NIC bare-"
+"metal."
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "Impossibile creare la rete %(name)s. Dettagli: %(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "Impossibile trovare un indirizzo IP libero per la rete '%(name)s'"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr "L'interfaccia %(iface)s gi�� esistente."
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "I tipi di rete supportati sono isolata, NAT e bridge"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+"La sottorete della rete deve essere una stringa con indirizzo IP e prefisso "
+"o maschera di rete"
+
+msgid "Network interface must be a string"
+msgstr "L'interfaccia di rete deve essere una stringa"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "L'ID VLAN di rete deve essere un numero intero tra 1 e 4094"
+
+msgid "Specify name and type to create a Network"
+msgstr "Specificare nome e tipo per creare una rete"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+"Impossibile eliminare la rete %(name)s. Ci sono alcune macchine virtuali "
+"%(vms)s e/o modelli collegati a tale rete."
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+"Impossibile disattivare la rete %(name)s. Ci sono alcune macchine virtualie "
+"%(vms)s e/o modelli collegati a tale rete."
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr ""
+"Il dispositivo bridge %(name)s non pu�� essere il dispositivo trunk di una "
+"VLAN."
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "Impossibile attivare l'interfaccia %(iface)s: %(err)s."
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+"Impossibile attivare l'interfaccia %(iface)s. Controllare lo stato del link "
+"fisico."
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "Il report di debug %(name)s non esiste"
+
+msgid "Debug report tool not found in system"
+msgstr "Strumento report di debug non trovato nel sistema"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr "Impossibile creare il report di debug %(name)s. Dettagli: %(err)s."
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr "Impossibile generare il report di debug %(name)s. Dettagli: %(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+"Un gruppo di volumi denominato '%(name)s' esiste gi��. Scegliere un altro "
+"nome per creare il pool logico."
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "Il server di memoria %(server)s non �� stato utilizzato da Kimchi"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "Distro '%(name)s' non esistente"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "La partizione %(name)s non esiste nell'host"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr ""
+"Impossibile arrestare la macchina host poich�� sono presenti macchine "
+"virtuali in esecuzione"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr ""
+"Impossibile riavviare la macchina host poich�� sono presenti macchine "
+"virtuali in esecuzione"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "Dispositivo nodo '%(name)s' non trovato"
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr "Nessun pacchetto contrassegnato per l'aggiornamento"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "Il pacchetto %(name)s non �� contrassegnato per l'aggiornamento."
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr ""
+"Errore durante il richiamo dei pacchetti contrassegnati per l'aggiornamento. "
+"Dettagli: %(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "Non �� presente un gestore pacchetti compatibile per questo sistema."
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "URI %(uri)s non valido"
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "Tipo di memoria non valido. I tipi supportati sono: 'cdrom'"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr ""
+"Errore durante la creazione del nuovo dispositivo di memoria: %(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr "Errore durante l'aggiornamento del dispositivo di memoria: %(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr "Errore durante la rimozione del dispositivo di memoria: %(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr ""
+"Specificare tipo e percorso per aggiungere un nuovo disco della macchina "
+"virtuale"
+
+msgid "Specify path to update virtual machine disk"
+msgstr ""
+"Specificare il percorso per aggiornare il disco della macchina virtuale"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr ""
+"Specificare tipo e percorso per aggiungere un nuovo disco della macchina "
+"virtuale"
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr "L'ID repository YUM deve essere una stringa di una sola parola."
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "L'URL del repository deve essere http://, ftp:// o file:// URL."
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+"La configurazione del repository �� un dizionario con valori specifici in "
+"base al tipo di repository."
+
+msgid "Distribution to DEB repository must be a string"
+msgstr "La distribuzione al repository DEB deve essere una stringa"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "I componenti per il repository DEB devono essere elencati in un array"
+
+msgid "Components to DEB repository must be a string"
+msgstr "I componenti per il repository DEB devono essere una stringa"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "Il nome del repository YUM deve essere una stringa."
+
+msgid "GPG check must be a boolean value."
+msgstr "Il controllo GPG deve essere un valore booleano."
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr "La chiave GPG deve essere un URL che punta al file blindato ASCII."
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "Impossibile aggiornare il repository %(repo_id)s."
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "Il repository %(repo_id)s non esiste."
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr ""
+"Lo strumento di gestione del repository non �� stato riconosciuto per il "
+"sistema."
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "Il repository %(repo_id)s �� gi�� abilitato."
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "Il repository %(repo_id)s �� gi�� disabilitato."
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "Impossibile rimuovere il repository %(repo_id)s."
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr ""
+"Impossibile scrivere il file di configurazione del repository %(repo_file)s"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr ""
+"Specificare la distribuzione del repository per poter creare un repository "
+"DEB."
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "Impossibile abilitare il repository %(repo_id)s."
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "Impossibile disabilitare il repository %(repo_id)s."
+
+msgid "YUM Repository ID already exists"
+msgstr "ID repository YUM gi�� esistente"
+
+msgid "YUM Repository name must be a string"
+msgstr "Il nome del repository YUM deve essere una stringa"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "Impossibile elencare i repository. Dettagli: '%(err)s'"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr ""
+"Impossibile richiamare le informazioni sul repository. Dettagli: '%(err)s'"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "Impossibile aggiungere il repository. Dettagli: '%(err)s'"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "Impossibile rimuovere il repository. Dettagli: '%(err)s'"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr "CODICE DI ERRORE"
+
+msgid "REASON"
+msgstr "CAUSA"
+
+msgid "STACK"
+msgstr "STACK"
+
+msgid "Go to Homepage"
+msgstr "Vai alla home page"
+
+msgid "Create a New Virtual Machine"
+msgstr "Crea una nuova macchina virtuale"
+
+msgid "Virtual Machine Name"
+msgstr "Nome macchina virtuale"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+"Il nome utilizzato per identificare la macchina virtuale. Se il nome viene "
+"omesso ne verr�� scelto uno in base al modello utilizzato."
+
+msgid "Template"
+msgstr "Modello"
+
+msgid "Please create a template first."
+msgstr "Creare prima un modello."
+
+msgid "Create a Template"
+msgstr "Crea un modello"
+
+msgid "Please choose a template."
+msgstr "Scegliere un modello."
+
+msgid "OS"
+msgstr "SO"
+
+msgid "OS Version"
+msgstr "Versione SO"
+
+msgid "CPUS"
+msgstr "CPUS"
+
+msgid "Memory"
+msgstr "Memoria"
+
+msgid "Create"
+msgstr "Crea"
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Annulla"
+
+msgid "Edit Guest"
+msgstr "Modifica guest"
+
+msgid "General"
+msgstr "Generale"
+
+msgid "Storage"
+msgstr "Memoria"
+
+msgid "Interface"
+msgstr "Interfaccia"
+
+msgid "Permission"
+msgstr "Versione"
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr "Nome"
+
+msgid "CPUs"
+msgstr "CPU"
+
+msgid "Memory (MB)"
+msgstr "Memoria"
+
+msgid "Icon"
+msgstr "Icona"
+
+msgid "Device"
+msgstr "Nome dispositivo"
+
+msgid "Path"
+msgstr "Percorso NFS"
+
+msgid "Network"
+msgstr "Rete"
+
+msgid "Type"
+msgstr "Tipo"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr "Tutti"
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr "Fornitore"
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr "Salva"
+
+msgid "Replace"
+msgstr "Sostituisci"
+
+msgid "Detach"
+msgstr "Scollega"
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr "Avvia"
+
+msgid "Reset"
+msgstr "Reimposta"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Actions"
+msgstr "Azioni"
+
+msgid "Connect"
+msgstr "Connetti"
+
+msgid "Clone"
+msgstr ""
+
+msgid "Edit"
+msgstr "Modifica"
+
+msgid "Shut Down"
+msgstr "Arresta"
+
+msgid "Delete"
+msgstr "Elimina"
+
+msgid "CPU"
+msgstr "CPU"
+
+msgid "Disk I/O"
+msgstr "I/O disco"
+
+msgid "Network I/O"
+msgstr "I/O di rete"
+
+msgid "Livetile"
+msgstr "Riquadro animato"
+
+msgid "No guests found."
+msgstr "Nessuna macchina guest trovata."
+
+msgid "Add a Storage Device to VM"
+msgstr "Aggiungi un dispositivo di memoria alla VM"
+
+msgid "Device Type"
+msgstr "Tipo dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "Il tipo di dispositivo. Attualmente, �� supportato solo \"cdrom\"."
+
+msgid "Storage Pool"
+msgstr "Pool di memoria"
+
+msgid "Storage pool which volume located in"
+msgstr "Il percorso del pool di memoria deve essere una stringa"
+
+msgid "Storage Volume"
+msgstr "Nome pool di memoria"
+
+msgid "Storage volume to be attached"
+msgstr "Il nome del volume di memoria deve essere una stringa"
+
+msgid "File Path"
+msgstr "Percorso file"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Il percorso file ISO nel server per CDROM."
+
+msgid "Attach"
+msgstr "Allega"
+
+msgid "Shut down"
+msgstr "Arresta"
+
+msgid "Restart"
+msgstr "Riavvia"
+
+msgid "Basic Information"
+msgstr "Informazioni di base"
+
+msgid "OS Distro"
+msgstr "Distro SO"
+
+msgid "OS Code Name"
+msgstr "Nome codice SO"
+
+msgid "Processor"
+msgstr "Processore"
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr "Statistiche di sistema"
+
+msgid "Software Updates"
+msgstr "Aggiornamenti del software"
+
+msgid "Update Progress"
+msgstr "Avanzamento aggiornamento"
+
+msgid "Repositories"
+msgstr "Repository"
+
+msgid "Debug Reports"
+msgstr "Report di debug"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr ""
+"Il nome utente o la password immessi non sono corretti. Ripetere "
+"l'operazione."
+
+msgid "This field is required."
+msgstr "Questo campo �� obbligatorio."
+
+msgid "Log in"
+msgstr "Accedi"
+
+msgid "Logging in..."
+msgstr "Accesso in corso..."
+
+msgid "Host"
+msgstr "Host"
+
+msgid "Guests"
+msgstr "Guest"
+
+msgid "Templates"
+msgstr "Modelli"
+
+msgid "Failed to get application configuration"
+msgstr "Richiamo della configurazione dell'applicazione non riuscito"
+
+msgid "This is not a valid Linux path"
+msgstr "Non �� un percorso Linux valido"
+
+msgid "This is not a valid URL."
+msgstr "Non �� un URL valido."
+
+msgid "No such data available."
+msgstr "Dati indicati non disponibili."
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"Impossibile contattare il sistema host. Verificare che il sistema host sia "
+"attivo e che si disponga della connettivit�� di rete per tale sistema. "
+"Risposta alla richiesta HTTP %1. "
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "Conferma eliminazione"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Confirm"
+msgstr "Conferma"
+
+msgid "Warning"
+msgstr "Avvertenza"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "Caricamento in corso..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "Riprova"
+
+msgid "Detailed message:"
+msgstr "Messaggio dettagliato:"
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr "Non �� un file ISO valido."
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "Richieder�� molto tempo. Continuare?"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "L'azione eliminer�� permanentemente il modello. Continuare?"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+"Impossibile arrestare il sistema poich�� sono in esecuzione alcune macchine "
+"virtuali."
+
+msgid "Max:"
+msgstr "Massimo:"
+
+msgid "Utilization"
+msgstr "Utilizzo"
+
+msgid "Available"
+msgstr "Disponibile"
+
+msgid "Read Rate"
+msgstr "Velocit�� di lettura"
+
+msgid "Write Rate"
+msgstr "Velocit�� di scrittura"
+
+msgid "Received"
+msgstr "Ricevuti"
+
+msgid "Sent"
+msgstr "Inviati"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+"L'arresto o il riavvio dell'host provocher�� la perdita del lavoro non "
+"salvato. Continuare con l'arresto o il riavvio?"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"Il repository verr�� rimosso permanentemente e non potr�� essere ripristinato. "
+"Si desidera continuare?"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Base URL"
+msgstr "URL di base"
+
+msgid "Is Mirror"
+msgstr "�� speculare"
+
+msgid "URL Args"
+msgstr "Argomenti URL"
+
+msgid "Enabled"
+msgstr "Abilitato"
+
+msgid "GPG Check"
+msgstr "Controllo GPG"
+
+msgid "GPG Key"
+msgstr "Chiave GPG"
+
+msgid "Add"
+msgstr "Aggiungi"
+
+msgid "Remove"
+msgstr "Rimuovi"
+
+msgid "Enable"
+msgstr "Abilita"
+
+msgid "Disable"
+msgstr "Disabilita"
+
+msgid "Package Name"
+msgstr "Nome pacchetto"
+
+msgid "Version"
+msgstr "Versione"
+
+msgid "Architecture"
+msgstr "Architettura"
+
+msgid "Repository"
+msgstr "Repository"
+
+msgid "Update All"
+msgstr "Aggiorna tutto"
+
+msgid "Updating..."
+msgstr "Aggiornamento in corso..."
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr "Aggiornamento dei pacchetti non riuscito."
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"Il report del debug verr�� rimosso permanentemente e non potr�� essere "
+"ripristinato. Si desidera continuare?"
+
+msgid "Generated Time"
+msgstr "Ora di creazione"
+
+msgid "Generate"
+msgstr "Crea"
+
+msgid "Generating..."
+msgstr "Creazione in corso..."
+
+msgid "Rename"
+msgstr "Ridenomina"
+
+msgid "Download"
+msgstr "Scarica"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr ""
+"Il nome del report pu�� contenere solo lettere, cifre e/o trattini ('-')."
+
+msgid "Pending..."
+msgstr "Caricamento in corso..."
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+"L'operazione eliminer�� la macchina virtuale e i relativi dischi virtuali e "
+"non �� reversibile. Continuare?"
+
+msgid "Power off Confirmation"
+msgstr "Conferma eliminazione"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr "Conferma eliminazione"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr "Conferma eliminazione"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr "L'azione eliminer�� permanentemente il modello. Continuare?"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"Il CDROM verr�� scollegato permanentemente e non sar�� possibile ricollegarlo. "
+"Continuare con lo scollegamento?"
+
+msgid "Attaching..."
+msgstr "Collegamento in corso..."
+
+msgid "Replacing..."
+msgstr "Sostituzione in corso..."
+
+msgid "Successfully attached!"
+msgstr "Collegamento riuscito."
+
+msgid "Successfully replaced!"
+msgstr "Sostituzione riuscita."
+
+msgid "Successfully detached!"
+msgstr "Scollegamento riuscito."
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "L'ID VLAN deve essere compreso tra 1 e 4094."
+
+msgid "unavailable"
+msgstr "non disponibile"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+"L'azione interromper�� la connettivit�� di rete per qualsiasi macchina "
+"virtuale che dipende da questa rete."
+
+msgid "Create a network"
+msgstr "Crea una rete"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Il pool di memoria non �� permanente. Invece di disattivarlo, l'azione lo "
+"eliminer�� permanentemente. Continuare?"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr "L'azione eliminer�� permanentemente il pool di memoria. Continuare?"
+
+msgid "This storage pool is empty."
+msgstr "Il pool di memoria �� vuoto."
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+"Il disco verr�� formattato e tutti i dati su di esso andranno persi, sicuri "
+"di voler continuare? "
+
+msgid "SCSI Fibre Channel"
+msgstr "Canale a fibre ottiche SCSI"
+
+msgid "No SCSI adapters found."
+msgstr "Nessun adattatore SCSI trovato."
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr "Il campo per il nome del pool di memoria non pu�� essere vuoto."
+
+msgid "The storage pool path can not be blank."
+msgstr "Il campo per il percorso del pool di memoria non pu�� essere vuoto."
+
+msgid "NFS server mount path can not be blank."
+msgstr ""
+"Il campo per il percorso di montaggio del server NFS non pu�� essere vuoto."
+
+msgid "Invalid NFS mount path."
+msgstr "Percorso di montaggio NFS non valido."
+
+msgid "No logical device selected."
+msgstr "Nessun dispositivo logico selezionato."
+
+msgid "The iSCSI target can not be blank."
+msgstr "Il campo per la destinazione iSCSI non pu�� essere vuoto."
+
+msgid "Server name can not be blank."
+msgstr "Il campo per il nome del server non pu�� essere vuoto."
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr "Ricerca di partizioni disponibili in corso..."
+
+msgid "No available partitions found."
+msgstr "Nessuna partizione disponibile trovata."
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Il pool di memoria non �� permanente. Invece di disattivarlo, l'azione lo "
+"eliminer�� permanentemente. Continuare?"
+
+msgid "Unable to retrieve partitions information."
+msgstr ""
+"Impossibile richiamare le informazioni sul repository. Dettagli: '%(err)s'"
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "Il campo per il nome del pool di memoria non pu�� essere vuoto."
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr "Nome rete"
+
+msgid "State"
+msgstr "Stato"
+
+msgid "Network Type"
+msgstr "Tipo di Rete"
+
+msgid "Address Space"
+msgstr "Spazio indirizzo"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr "Nome pool di memoria non valido. Non deve contenere '/'."
+
+msgid "Isolated: no external network connection"
+msgstr "Isolata: nessuna connessione di rete fisica"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT: solo connessione di rete fisica in uscita"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr ""
+"Con bridge: le macchine virtuali sono connesse direttamente alla rete fisica"
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr "Destinazione:"
+
+msgid "Enable VLAN"
+msgstr "Abilita VLAN:"
+
+msgid "VLAN ID"
+msgstr "ID VLAN:"
+
+msgid "Stop"
+msgstr "Arresta"
+
+msgid "Generate a New Debug Report"
+msgstr "Crea un nuovo report di debug"
+
+msgid "Report Name"
+msgstr "Nome report"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"Il nome utilizzato per identificare il report. Se il nome viene omesso, ne "
+"viene scelto uno in base all'ora corrente. Il nome pu�� contenere lettere, "
+"cifre e trattini (\"-\")."
+
+msgid "Rename a Debug Report"
+msgstr "Crea un nuovo report di debug"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"Il nome utilizzato per identificare il report. Se il nome viene omesso, ne "
+"viene scelto uno in base all'ora corrente. Il nome pu�� contenere lettere, "
+"cifre e trattini (\"-\")."
+
+msgid "Submit"
+msgstr ""
+
+msgid "Add a Repository"
+msgstr "Aggiungi un repository"
+
+msgid "Identifier"
+msgstr "Identificativo"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "Identificativo univoco di una sola parola per il repository."
+
+msgid "Textual name for the repository."
+msgstr "Nome in formato testo per il repository."
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "Campo obbligatorio"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "URL al repository. I protocolli supportati sono http, ftp e file."
+
+msgid "Repository is a mirror"
+msgstr "Il repository �� un elemento speculare."
+
+msgid "Distribution"
+msgstr "Distribuzione"
+
+msgid "Distribution of the DEB repository."
+msgstr "Distribuzione del repository DEB."
+
+msgid "Components"
+msgstr "Componenti"
+
+msgid "List of components in DEB repository."
+msgstr "Elenco di componenti nel repository DEB."
+
+msgid "Edit Repository"
+msgstr "Modifica repository"
+
+msgid "Mirror List URL"
+msgstr "URL elenco elementi speculari"
+
+msgid "Yes"
+msgstr "S��"
+
+msgid "No"
+msgstr "No"
+
+msgid "Capacity"
+msgstr "Capacit��"
+
+msgid "Allocated"
+msgstr "Assegnato"
+
+msgid "Location"
+msgstr "Ubicazione"
+
+msgid "Device path"
+msgstr "Percorso dispositivo"
+
+msgid "active"
+msgstr "attivo"
+
+msgid "inactive"
+msgstr "non attivo"
+
+msgid "Deactivate"
+msgstr "Disattiva"
+
+msgid "Activate"
+msgstr "Attiva"
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr "Rimuovi definizione"
+
+msgid "Format"
+msgstr "Formato:"
+
+msgid "Allocation"
+msgstr "Allocazione:"
+
+msgid "Define a New Storage Pool"
+msgstr "Definisci un nuovo pool di memoria"
+
+msgid "Storage Pool Name"
+msgstr "Nome pool di memoria"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr ""
+"Il nome utilizzato per identificare i pool di memoria; il campo non deve "
+"essere vuoto."
+
+msgid "Storage Pool Type"
+msgstr "Tipo di pool di memoria"
+
+msgid "Storage Path"
+msgstr "Percorso di memoria"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr ""
+"Il percorso del pool di memoria. Ogni pool di memoria deve avere un percorso "
+"univoco."
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr ""
+"Kimchi tenter�� di creare la directory nel caso non esista ancora sul sistema."
+
+msgid "NFS Server IP"
+msgstr "IP server NFS"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+"Il nome host o l'indirizzo IP del server NFS. �� possibile immetterlo o "
+"sceglierlo dalla cronologia."
+
+msgid "NFS Path"
+msgstr "Percorso NFS"
+
+msgid "The NFS exported path on NFS server."
+msgstr "Il percorso esportato NFS sul server NFS."
+
+msgid "iSCSI Server"
+msgstr "Server iSCSI"
+
+msgid "Server"
+msgstr "Server"
+
+msgid "Port"
+msgstr "Porta"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr ""
+"Il nome host o l'indirizzo IP del server iSCSI. Il campo non deve essere "
+"vuoto."
+
+msgid "Target"
+msgstr "Destinazione"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "La destinazione iSCSI sul server iSCSI"
+
+msgid "Add iSCSI Authentication"
+msgstr "Aggiungi autenticazione iSCSI"
+
+msgid "iSCSI Authentication"
+msgstr "Autenticazione iSCSI"
+
+msgid "User Name"
+msgstr "Nome utente"
+
+msgid "Password"
+msgstr "Password"
+
+msgid "SCSI Adapter"
+msgstr "Adattatore SCSI"
+
+msgid "Please, wait..."
+msgstr "Attendere..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr "Aggiungi modello"
+
+msgid "Where is the source media for this template? "
+msgstr "Dov'�� il supporto di origine per questo modello?"
+
+msgid "Local ISO Image"
+msgstr "Immagine ISO locale"
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr "Immagine ISO remota"
+
+msgid "Search ISOs"
+msgstr "Ricerca ISO"
+
+msgid "The following ISOs are available:"
+msgstr "Sono disponibili i seguenti file ISO:"
+
+msgid "OS: "
+msgstr "SO: "
+
+msgid "Version: "
+msgstr "Versione: "
+
+msgid "Size: "
+msgstr "Dimensione: "
+
+msgid "Search more ISOs"
+msgstr "Ricerca pi�� ISO"
+
+msgid "Create Templates from Selected ISO"
+msgstr "Crea modelli da ISO selezionato"
+
+msgid "I want to use a specific ISO file"
+msgstr "Utilizzare un file ISO specifico"
+
+msgid "Loading default remote ISOs ..."
+msgstr "Caricamento di ISO remoti predefiniti in corso..."
+
+msgid "Arch: "
+msgstr "Arch: "
+
+msgid "I want to use a custom URL"
+msgstr "Utilizzare un URL personalizzato"
+
+msgid "Edit Template"
+msgstr "Modifica modello"
+
+msgid "CDROM"
+msgstr "CDROM"
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr "Grafici"
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "Numero CPU"
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr "Nessun modello trovato."
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "Eliminazione non consentita per %(resource)s"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s non implementa il metodo di aggiornamento"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "Creazione non consentita per %(resource)s"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "Impossibile analizzare la richiesta JSON"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "L'API supporta solo JSON"
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "Archivio dati non inizializzato nell'oggetto modello."
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "Impossibile avviare l'attivit�� a causa dell'errore: %(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr ""
+#~ "Autenticazione non riuscita per l'utente '%(username)s'. [Codice di "
+#~ "errore: %(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "Non si dispone dell'autorizzazione ad accedere a Kimchi"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "Specificare %(item)s per accedere a Kimchi"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "Impossibile trovare %(item)s nell'archivio dati"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr ""
+#~ "�� stato raggiunto il timeout durante l'esecuzione del comando '%(cmd)s' "
+#~ "dopo %(seconds)s secondi"
+
+#~ msgid "Help"
+#~ msgstr "Guida"
+
+#~ msgid "About"
+#~ msgstr "Info su"
+
+#~ msgid "Log out"
+#~ msgstr "Disconnetti"
+
+#~ msgid "Version:"
+#~ msgstr "Versione:"
diff --git a/plugins/gingerbase/po/ja_JP.po b/plugins/gingerbase/po/ja_JP.po
new file mode 100644
index 0000000..3084d21
--- /dev/null
+++ b/plugins/gingerbase/po/ja_JP.po
@@ -0,0 +1,2269 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: ja_JP\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr ""
+"������������������������������������������������������������������������������������������������: %(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr ""
+"%(device)s ���������������������������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "������������������������������������������������ %(filename)s ������������������������"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+"������������������������������������������������ %(filename)s ���������������������������JSON ������������"
+"���������������������������������������������"
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr ""
+"iSCSI ��������������������������� %(portal)s ���������������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "iSCSI ��������� %(host)s ��������������� %(target)s ������������������������������"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "ISO ������������ %(filename)s ������������������������������������������"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr ""
+"ISO ������������ %(filename)s ������������������ El Torito ������������������������������������������"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "��������� El Torito ������������������������ ISO %(filename)s ���������������"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "��������� El Torito ������������������������������������ ISO %(filename)s ���������������"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr ""
+"1 ������������������������������������������������������������������ ISO %(filename)s ���������������"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr ""
+"��������������������������������������������� ISO %(filename)s ���������������������������������������"
+"������������������������������������"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"��������������������������������� ISO %(filename)s ������������������������������������������/var/lib/"
+"libvirt ���������������������������������������������������������������%(user)s���������������������������"
+"���������������������������������������������������������%(user)s������ISO ���������������������������������"
+"���������������������chmod -R o+x path_to_iso������������ (���������������������) ���������������"
+"������������: %(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "��������������� %(name)s ������������������������"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "��������������� %(name)s ���������������������"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr "��������������������������������� %(name)s ���������������������������������������������������������"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "������������ ISO ������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr ""
+"listen ���������������������������������������������������IPv4 ��������� IPv6 ���������������������������"
+"���"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "���������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������������: %(err)s"
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr "���������������������������������������������������������������������"
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr "���������������������������������������������������������������������"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "���������������%(users)s���������������������������"
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "���������������%(groups)s���������������������������"
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������� %(name)s ���������������������������������: %(err)s"
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "������������������������ %(iface)s ������������������ %(name)s ������������������������"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+"��������������� %(name)s ��������������������������������������������� %(network)s ���������������������"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"���"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"���������"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "������������������ %(name)s ������������������������"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr ""
+"������������������ %(template)s ������������������������������������������������%(network)s������������"
+"������������"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+"������������������ %(template)s ������������������������������������������������������ %(pool)s ������"
+"���������������"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+"������������������ %(template)s ������������������������������������������������������ %(pool)s ������"
+"���������������������������������"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "CDROM ���������������������������������������������%(param)s���������������������"
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr ""
+"������������������ %(template)s ��������������������������������������������� %(network)s ���������"
+"������������������������������"
+
+msgid "Template name must be a string"
+msgstr "���������������������������������������������������������������������"
+
+msgid "Template icon must be a path to the image"
+msgstr "���������������������������������������������������������������������������������������"
+
+msgid "Template distribution must be a string"
+msgstr "������������������������������������������������������������������������������������������������������"
+
+msgid "Template distribution version must be a string"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "CPU ������������������������������������������"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "������������������ (MB ������) ������512 ���������������������������������������������������"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr ""
+"������������������ CDROM ��������������������������������������� ISO ���������������������������������������"
+"���"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr ""
+"������������������������������������ URI %(value)s ������������������������������������������������"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr ""
+"CDROM ������������������������������������������������������ ISO ���������������������������������������"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "������������������������������������������������������������������������������������������������������"
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "���������������������������������������������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "���������������������������������������������������������������������: %(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr ""
+"������������������ CDROM ��������������������������������������� ISO ���������������������������������������"
+"���"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "��������������������������� %(name)s ������������������������"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "��������������������������� %(name)s ���������������������"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr ""
+"��������������������������� %(name)s ������������������������������%(item)s ���������������������������"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "��������������������������������������������� %(name)s ������������������������"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "���������������������������������������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr ""
+"��������������������������� %(name)s ������������������������������������������������������������������������"
+"���:%(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������������� %(name)s ���������������������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������������� %(name)s ������������������������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+"��������������������������������������������� %(path)s ���������������������������������������������������"
+"������NFS ���������������������������������"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+"��������������������������� %(path)s ���������������������������������������NFS ���������������������������"
+"������"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "���������������������������������������������������������������������: %(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr "������������������������������������������������������������������������������������"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "���������������������������������������������IP ���������������������������������������������������"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "���������������������������������������������������������������������������������������������������������"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "iSCSI ��������������������������� IQN ������������������������������������������������"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr ""
+"���������������������������������������������������������������1 ������ 65535 ���������������������������������"
+"������������"
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr "������������������������������������������������������������������������������������������������"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr ""
+"%(disk)s ���������������������������/��������������������������������������������������� %(pool)s ������"
+"������������������������������"
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr ""
+"���������������������������������������������������������������������������������������������������������������"
+"������"
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "SCSI ���������������������������������������������������������������������������������"
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "��������������������������� kimchi_isos ������������������������������������������������������"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"NFS ��������������������������� %(name)s ���������������������������������������NFS ������������ "
+"%(server)s ���������������������������"
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"NFS ��������������������������� %(name)s ������������������������������������������NFS ������������ "
+"%(server)s ���������������������������"
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+"��������� %(name)s ������������������������������������������������������������������������������������������"
+"���������������������"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr ""
+"��������� %(name)s ������������������������������������������������������������������������������������������"
+"������"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+"���������%(name)s���������������������������������������������������������������������������������������������"
+"���������������������������������������������������"
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+"���������������������������������������������������������������������������������������������������������: "
+"%(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "��������������������������������� %(name)s ������������������������"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr ""
+"��������������������������������� %(name)s ��������������������������������� %(pool)s ������������������"
+"���"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr ""
+"��������������������������������� %(volume)s ������������������������������%(item)s ���������������������"
+"������"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+"��������������������������� %(pool)s ������������������������������������������������������������������������"
+"���������������������������"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr ""
+"��������������������������������� %(name)s ������������������������������ %(pool)s ���������������������"
+"������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+"��������������������������� %(pool)s ���������������������������������������������������������������������"
+"���: %(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr "��������������������������� %(name)s ������������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr "��������������������������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr "��������������������������������� %(name)s ������������������������������������������: %(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+"��������������������������� %(type)s ������������������������������������������������������������������������"
+"���������"
+
+msgid "Storage volume name must be a string"
+msgstr "������������������������������������������������������������������������������������"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "������������������������������������������������������������������������������������"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr "������������������������������������������������������������������������"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+"���������������������������������������������������������������������������������������������������������������: "
+"%(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "������������������������ %(name)s ���������������������"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "������������������ %(name)s ������������������������"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "������������������ %(name)s ���������������������"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+"������������������ %(network)s ������������������������������������������ %(subnet)s ������������������"
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr ""
+"������������������������������������ %(name)s ���������������������������������������������������������"
+"���������������������������������������"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "������������������������������������ %(name)s ������������������������"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+"������������������ %(network)s ��������������������������������������������������� %(iface)s ���������"
+"���������������������������"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr ""
+"��������������������������������� NIC���������������������������������������������������������������������������"
+"������"
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "������������������ %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "���������������������%(name)s��������������� IP ���������������������������������������"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr ""
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "���������������������������������������������������������������������NAT������������������������������"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+"������������������������������������������IP ������������������������������������������������������������������"
+"������������������������������������������������������"
+
+msgid "Network interface must be a string"
+msgstr "���������������������������������������������������������������������������������������������"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "������������������ VLAN ID ������1 ������ 4094 ���������������������������������������������"
+
+msgid "Specify name and type to create a Network"
+msgstr "���������������������������������������������������������������������������������������"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr ""
+"��������������������������� %(name)s ������VLAN ������������������������������������������������������������"
+"������"
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "������������������������ %(iface)s ���������������������������������: %(err)s���"
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+"������������������������ %(iface)s ���������������������������������������������������������������������������"
+"������������"
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "��������������������������� %(name)s ������������������������"
+
+msgid "Debug report tool not found in system"
+msgstr "������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr "��������������������������� %(name)s ���������������������������������: %(err)s"
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr "��������������������������� %(name)s ���������������������������������: %(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+"���������%(name)s���������������������������������������������������������������������������������������������"
+"���������������������������������������������������"
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr ""
+"������������������������������ %(server)s ������Kimchi ������������������������������������������������"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "������������������������������������%(name)s������������������������"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "��������������������� %(name)s ������������������������������������"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr "���������������������������������������������������������������������������������������������������������"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr "������������������������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "���������������������������%(name)s���������������������������"
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr "���������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "��������������� %(name)s ���������������������������������������������������������������"
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������: %(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "���������������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "��������� URI %(uri)s"
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr ""
+"���������������������������������������������������������������������������������������cdrom������������"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr ""
+"���������������������������������������������������������������������������������������������������: %(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr ""
+"������������������������������������������������������������������������������������������: %(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr ""
+"������������������������������������������������������������������������������������������: %(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr "������������������������������������������������������������������������������������������������"
+
+msgid "Specify path to update virtual machine disk"
+msgstr "���������������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr "������������������������������������������������������������������������������������������������"
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr "YUM ������������������ ID ������1 ���������������������������������������������������������������"
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr ""
+"������������������ URL ��� http://���ftp://������������ file:// URL ���������������������������"
+"������"
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������������"
+
+msgid "Distribution to DEB repository must be a string"
+msgstr ""
+"DEB ������������������������������������������������������������������������������������������������������������"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr ""
+"DEB ������������������������������������������������������������������������������������������������������������"
+"������"
+
+msgid "Components to DEB repository must be a string"
+msgstr "DEB ������������������������������������������������������������������������������������������������"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "YUM ������������������������������������������������������������������������"
+
+msgid "GPG check must be a boolean value."
+msgstr "GPG ������������������������������������������������������������"
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr "GPG ���������ASCII ��������������������������������������� URL ���������������������������������"
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "������������������ %(repo_id)s ������������������������������������"
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "������������������ %(repo_id)s ������������������������"
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr "���������������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "������������������ %(repo_id)s ���������������������������������������"
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "������������������ %(repo_id)s ���������������������������������������"
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "������������������ %(repo_id)s ������������������������������������"
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr ""
+"������������������������������������ %(repo_file)s ������������������������������������������������"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr ""
+"DEB ������������������������������������������������������������������������������������������������������������"
+"������������������������"
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "������������������ %(repo_id)s ���������������������������������������"
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "������������������ %(repo_id)s ���������������������������������������"
+
+msgid "YUM Repository ID already exists"
+msgstr "YUM ������������������ ID ������������������������"
+
+msgid "YUM Repository name must be a string"
+msgstr "YUM ���������������������������������������������������������������������"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "������������������������������������������������������: ���%(err)s���"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr "���������������������������������������������������������: ���%(err)s���"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "���������������������������������������������������: ���%(err)s���"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "���������������������������������������������������: ���%(err)s���"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr "���������������������"
+
+msgid "REASON"
+msgstr "������"
+
+msgid "STACK"
+msgstr "������������"
+
+msgid "Go to Homepage"
+msgstr "������������������������������������"
+
+msgid "Create a New Virtual Machine"
+msgstr "������������������������������"
+
+msgid "Virtual Machine Name"
+msgstr "������������������"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������������������������������������������"
+
+msgid "Template"
+msgstr "������������������"
+
+msgid "Please create a template first."
+msgstr "������������������������������������������������������"
+
+msgid "Create a Template"
+msgstr "���������������������������"
+
+msgid "Please choose a template."
+msgstr "������������������������������������������������"
+
+msgid "OS"
+msgstr "OS"
+
+msgid "OS Version"
+msgstr "OS ���������������"
+
+msgid "CPUS"
+msgstr "CPU"
+
+msgid "Memory"
+msgstr "������������"
+
+msgid "Create"
+msgstr "������"
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr "������"
+
+msgid "Edit Guest"
+msgstr "������������������"
+
+msgid "General"
+msgstr "������"
+
+msgid "Storage"
+msgstr "���������������"
+
+msgid "Interface"
+msgstr "������������������������"
+
+msgid "Permission"
+msgstr "���������������"
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr "������"
+
+msgid "CPUs"
+msgstr "CPU"
+
+msgid "Memory (MB)"
+msgstr "������������"
+
+msgid "Icon"
+msgstr "������������"
+
+msgid "Device"
+msgstr "���������������"
+
+msgid "Path"
+msgstr "NFS ������"
+
+msgid "Network"
+msgstr " ������������������"
+
+msgid "Type"
+msgstr "���������"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr "���������"
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr "������������"
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr "������"
+
+msgid "Replace"
+msgstr "������"
+
+msgid "Detach"
+msgstr "������������"
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr "������"
+
+msgid "Reset"
+msgstr "������������"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Actions"
+msgstr "���������������"
+
+msgid "Connect"
+msgstr "������"
+
+msgid "Clone"
+msgstr ""
+
+msgid "Edit"
+msgstr "������"
+
+msgid "Shut Down"
+msgstr "���������������������"
+
+msgid "Delete"
+msgstr "������"
+
+msgid "CPU"
+msgstr "CPU"
+
+msgid "Disk I/O"
+msgstr "���������������������"
+
+msgid "Network I/O"
+msgstr "���������������������������"
+
+msgid "Livetile"
+msgstr "������������������"
+
+msgid "No guests found."
+msgstr "������������������������������������"
+
+msgid "Add a Storage Device to VM"
+msgstr "VM ������������������������������������������"
+
+msgid "Device Type"
+msgstr "������������������������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "������������������������������������������������������������������ \"cdrom\" ���������������"
+
+msgid "Storage Pool"
+msgstr "���������������������������"
+
+msgid "Storage pool which volume located in"
+msgstr "������������������������������������������������������������������������������������"
+
+msgid "Storage Volume"
+msgstr "������������������������������"
+
+msgid "Storage volume to be attached"
+msgstr "������������������������������������������������������������������������������������"
+
+msgid "File Path"
+msgstr "���������������������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "��������������������� CDROM ��� ISO ������������������������"
+
+msgid "Attach"
+msgstr "������"
+
+msgid "Shut down"
+msgstr "���������������������"
+
+msgid "Restart"
+msgstr "���������"
+
+msgid "Basic Information"
+msgstr "������������"
+
+msgid "OS Distro"
+msgstr "OS ���������������������������������"
+
+msgid "OS Code Name"
+msgstr "OS ������������"
+
+msgid "Processor"
+msgstr "������������������"
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr "������������������������"
+
+msgid "Software Updates"
+msgstr "������������������������"
+
+msgid "Update Progress"
+msgstr "���������������������"
+
+msgid "Repositories"
+msgstr "������������������"
+
+msgid "Debug Reports"
+msgstr "���������������������������"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr "���������������������������������������������������������������������������������������������������������"
+
+msgid "This field is required."
+msgstr "���������������������������������������"
+
+msgid "Log in"
+msgstr "������������"
+
+msgid "Logging in..."
+msgstr "���������������������������..."
+
+msgid "Host"
+msgstr "���������"
+
+msgid "Guests"
+msgstr "���������"
+
+msgid "Templates"
+msgstr "������������������"
+
+msgid "Failed to get application configuration"
+msgstr "���������������������������������������������������������������"
+
+msgid "This is not a valid Linux path"
+msgstr "��������� Linux ���������������������������"
+
+msgid "This is not a valid URL."
+msgstr "��������� URL ������������������������"
+
+msgid "No such data available."
+msgstr "���������������������������������������������"
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������������������������������������������������������������HTTP ������������ %1"
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "���������������"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Confirm"
+msgstr "������"
+
+msgid "Warning"
+msgstr "������"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "������������������������..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "���������"
+
+msgid "Detailed message:"
+msgstr "���������������������:"
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr "��������� ISO ������������������������������������"
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "������������������������������������������������������������������������?"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "���������������������������������������������������������������������?"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������!"
+
+msgid "Max:"
+msgstr "������:"
+
+msgid "Utilization"
+msgstr "���������"
+
+msgid "Available"
+msgstr "������������"
+
+msgid "Read Rate"
+msgstr "������������������"
+
+msgid "Write Rate"
+msgstr "������������������"
+
+msgid "Received"
+msgstr "������������"
+
+msgid "Sent"
+msgstr "������������"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"���������������������/������������������������������?"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"���������������������������������������������������������������������������������������������������������?"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Base URL"
+msgstr "��������� URL"
+
+msgid "Is Mirror"
+msgstr "���������"
+
+msgid "URL Args"
+msgstr "URL ������"
+
+msgid "Enabled"
+msgstr "������������"
+
+msgid "GPG Check"
+msgstr "GPG ������������"
+
+msgid "GPG Key"
+msgstr "GPG ���"
+
+msgid "Add"
+msgstr "������"
+
+msgid "Remove"
+msgstr "������"
+
+msgid "Enable"
+msgstr "������������"
+
+msgid "Disable"
+msgstr "������������"
+
+msgid "Package Name"
+msgstr "������������������"
+
+msgid "Version"
+msgstr "���������������"
+
+msgid "Architecture"
+msgstr "������������������������"
+
+msgid "Repository"
+msgstr "������������������"
+
+msgid "Update All"
+msgstr "���������������"
+
+msgid "Updating..."
+msgstr "���������������������..."
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr "���������������������������������������������������"
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������?"
+
+msgid "Generated Time"
+msgstr "������������"
+
+msgid "Generate"
+msgstr "������"
+
+msgid "Generating..."
+msgstr "���������������������..."
+
+msgid "Rename"
+msgstr "������������"
+
+msgid "Download"
+msgstr "������������������"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr "��������������������������������������������������������������������������������� (-) ���������������"
+
+msgid "Pending..."
+msgstr "������������������������..."
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������������������?"
+
+msgid "Power off Confirmation"
+msgstr "���������������"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr "���������������"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr "���������������"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr "���������������������������������������������������������������������?"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"������ CDROM ������������������������������������������������������������������������������������������������?"
+
+msgid "Attaching..."
+msgstr "���������������������..."
+
+msgid "Replacing..."
+msgstr "���������������������..."
+
+msgid "Successfully attached!"
+msgstr "���������������������������!"
+
+msgid "Successfully replaced!"
+msgstr "���������������������������!"
+
+msgid "Successfully detached!"
+msgstr "������������������������������!"
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "VLAN ID ������1 ������ 4094 ���������������������������������������"
+
+msgid "unavailable"
+msgstr "������������"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������������"
+
+msgid "Create a network"
+msgstr "���������������������������"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"���������������������������������������������������������������������������������?"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr "������������������������������������������������������������������������������?"
+
+msgid "This storage pool is empty."
+msgstr "������������������������������������������������"
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+"���������������������������������������������������������������������������������������������������������������?"
+
+msgid "SCSI Fibre Channel"
+msgstr "SCSI ������������������������������"
+
+msgid "No SCSI adapters found."
+msgstr "SCSI ������������������������������������������"
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr "���������������������������������������������������������������������������������"
+
+msgid "The storage pool path can not be blank."
+msgstr "���������������������������������������������������������������������������������������"
+
+msgid "NFS server mount path can not be blank."
+msgstr "NFS ���������������������������������������������������������������������������������������"
+
+msgid "Invalid NFS mount path."
+msgstr "NFS ���������������������������������������"
+
+msgid "No logical device selected."
+msgstr "���������������������������������������������������"
+
+msgid "The iSCSI target can not be blank."
+msgstr "iSCSI ������������������������������������������������������������������"
+
+msgid "Server name can not be blank."
+msgstr "������������������������������������������������������������������"
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr "���������������������������������������������������������..."
+
+msgid "No available partitions found."
+msgstr "���������������������������������������������������������������"
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"���������������������������������������������������������������������������������?"
+
+msgid "Unable to retrieve partitions information."
+msgstr "���������������������������������������������������������: ���%(err)s���"
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "���������������������������������������������������������������������������������"
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr "���������������������"
+
+msgid "State"
+msgstr "������"
+
+msgid "Network Type"
+msgstr "������������������������������"
+
+msgid "Address Space"
+msgstr "���������������������������"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr ""
+
+msgid "Isolated: no external network connection"
+msgstr "������: ������������������������������������"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT: ���������������������������������������������������������"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr "������������: ������������������������������������������������������������������"
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr "������:"
+
+msgid "Enable VLAN"
+msgstr "VLAN ������������������������:"
+
+msgid "VLAN ID"
+msgstr "VLAN ID:"
+
+msgid "Stop"
+msgstr "������"
+
+msgid "Generate a New Debug Report"
+msgstr "������������������������������������������"
+
+msgid "Report Name"
+msgstr "���������������"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"��������������������������������������������������������������������� (-) ������������������������"
+
+msgid "Rename a Debug Report"
+msgstr "������������������������������������������"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"��������������������������������������������������������������������� (-) ������������������������"
+
+msgid "Submit"
+msgstr ""
+
+msgid "Add a Repository"
+msgstr "���������������������������"
+
+msgid "Identifier"
+msgstr "ID"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "��������������������������� ID ������������������������������"
+
+msgid "Textual name for the repository."
+msgstr "���������������������������������������"
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "���������������������"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr ""
+"��������������������� URL ��������������������������������������������������� http���ftp������������ file "
+"���������"
+
+msgid "Repository is a mirror"
+msgstr "���������������������������������������"
+
+msgid "Distribution"
+msgstr "���������������������������������"
+
+msgid "Distribution of the DEB repository."
+msgstr "DEB ���������������������������������������������������������"
+
+msgid "Components"
+msgstr "���������������������"
+
+msgid "List of components in DEB repository."
+msgstr "DEB ������������������������������������������������������������"
+
+msgid "Edit Repository"
+msgstr "���������������������������"
+
+msgid "Mirror List URL"
+msgstr "��������������������� URL"
+
+msgid "Yes"
+msgstr " ������"
+
+msgid "No"
+msgstr " ���������"
+
+msgid "Capacity"
+msgstr "������"
+
+msgid "Allocated"
+msgstr "������������������"
+
+msgid "Location"
+msgstr "������������������"
+
+msgid "Device path"
+msgstr "���������������������"
+
+msgid "active"
+msgstr "���������������"
+
+msgid "inactive"
+msgstr "������������������"
+
+msgid "Deactivate"
+msgstr "���������������������������"
+
+msgid "Activate"
+msgstr "������������������������"
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr "���������������������"
+
+msgid "Format"
+msgstr "������������������:"
+
+msgid "Allocation"
+msgstr "������������:"
+
+msgid "Define a New Storage Pool"
+msgstr "������������������������������������������"
+
+msgid "Storage Pool Name"
+msgstr "������������������������������"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������"
+
+msgid "Storage Pool Type"
+msgstr "���������������������������������������"
+
+msgid "Storage Path"
+msgstr "������������������������"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr ""
+"���������������������������������������������������������������������������������������������������������������"
+"������"
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr ""
+"���������������������������������������������������������������Kimchi ���������������������������������"
+
+msgid "NFS Server IP"
+msgstr "NFS ������������ IP"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+"NFS ������������ IP ������������������������������������������������������������������������������������������"
+"���������������"
+
+msgid "NFS Path"
+msgstr "NFS ������"
+
+msgid "The NFS exported path on NFS server."
+msgstr "NFS ������������ NFS ������������������������������������������������"
+
+msgid "iSCSI Server"
+msgstr "iSCSI ������������"
+
+msgid "Server"
+msgstr "������������"
+
+msgid "Port"
+msgstr "���������"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "iSCSI ������������ IP ���������������������������������������������������������������"
+
+msgid "Target"
+msgstr "���������������"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "iSCSI ������������������ iSCSI ���������������"
+
+msgid "Add iSCSI Authentication"
+msgstr "iSCSI ���������������"
+
+msgid "iSCSI Authentication"
+msgstr "iSCSI ������"
+
+msgid "User Name"
+msgstr "���������������"
+
+msgid "Password"
+msgstr "���������������"
+
+msgid "SCSI Adapter"
+msgstr "SCSI ���������������"
+
+msgid "Please, wait..."
+msgstr "���������������������..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr "���������������������������"
+
+msgid "Where is the source media for this template? "
+msgstr "������������������������������������������������������������������������������?"
+
+msgid "Local ISO Image"
+msgstr "������������ ISO ������������"
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr "������������ ISO ������������"
+
+msgid "Search ISOs"
+msgstr "ISO ���������"
+
+msgid "The following ISOs are available:"
+msgstr "������ ISO ���������������������:"
+
+msgid "OS: "
+msgstr "OS: "
+
+msgid "Version: "
+msgstr "���������������: "
+
+msgid "Size: "
+msgstr "���������: "
+
+msgid "Search more ISOs"
+msgstr "ISO ������������������"
+
+msgid "Create Templates from Selected ISO"
+msgstr "������������ ISO ���������������������������������"
+
+msgid "I want to use a specific ISO file"
+msgstr "��������� ISO ���������������������������"
+
+msgid "Loading default remote ISOs ..."
+msgstr "������������������������������ ISO ���������������������������..."
+
+msgid "Arch: "
+msgstr "������������������������: "
+
+msgid "I want to use a custom URL"
+msgstr "������������ URL ���������������"
+
+msgid "Edit Template"
+msgstr "���������������������������"
+
+msgid "CDROM"
+msgstr "CDROM"
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr "���������������������"
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "CPU ���"
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr "���������������������������������������������"
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "%(resource)s ���������������������������������"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s ������������������������������������������������"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "%(resource)s ���������������������������������"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "JSON ������������������������������"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "������ API ��� JSON ���������������������������"
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "������������������������������������������������������������������������������������������"
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "������������������������������������������������������������: %(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr ""
+#~ "���������������%(username)s������������������������������������[���������������������: %(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "Kimchi ������������������������������������������������"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "Kimchi ������������������������������%(item)s ������������������"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "%(item)s ������������������������������������������������"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr ""
+#~ "���������������%(cmd)s������������������������������������%(seconds)s ������������������������������"
+#~ "������������������������"
+
+#~ msgid "Help"
+#~ msgstr "���������"
+
+#~ msgid "About"
+#~ msgstr "������������"
+
+#~ msgid "Log out"
+#~ msgstr "���������������"
+
+#~ msgid "Version:"
+#~ msgstr "���������������: "
diff --git a/plugins/gingerbase/po/ko_KR.po b/plugins/gingerbase/po/ko_KR.po
new file mode 100644
index 0000000..7a5233e
--- /dev/null
+++ b/plugins/gingerbase/po/ko_KR.po
@@ -0,0 +1,2197 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: ko_KR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr "������ ��������� ������������ ������ ��������� ������������������. ������������: %(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr "%(device)s��� ������ ������ ������ ��������� ������������ ������ ��������� ������������������."
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "distro ��������� ������ ��� ������: %(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+"distro ������(%(filename)s)��� ������ ��������� ��� ������������. JSON ������������ ���������������"
+"���."
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr "iSCSI ��������� ������ %(portal)s��� ������������ ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "iSCSI host %(host)s ������ %(target)s��� ������������ ��� ������������."
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "ISO ������ %(filename)s���(���) ������ ������������ ������������."
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr "ISO ������ %(filename)s��� ��������� El Torito ������ ������������ ������������."
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr ""
+"ISO %(filename)s��� ������������ ������ El Torito ��������� ������ ��������� ������������."
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "ISO %(filename)s��� ������������ ������ El Torito ������ ������������ ������������."
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr "ISO %(filename)s������ ������ ��������� ��������� ������ ������ ���������������."
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr ""
+"ISO %(filename)s������ ������ ������������������ ������ ������ ��������� ��������� ������������������"
+"���."
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"��������������������� ��� ISO %(filename)s���(���) ��������� ��������� ������������. ������ /var/"
+"lib/libvirt ��������� ������������������, (��������� ������) ������ ��������� '%(user)s' ���������"
+"��� ������ ��������� ������ ��������� ���������������, '%(user)s'���(���) ISO ������ ��������� ������"
+"���������, 'chmod -R o+x 'path_to_iso'(������������ ������)��� ������������������. ������������: "
+"%(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "������ ������ %(name)s���(���) ������ ���������������."
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "������ ������ %(name)s���(���) ������������."
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr "��������� ������ ������ %(name)s��� ������ ��������������� ��������� ��� ������������."
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "������ ISO ������������ ��� ������������ ������������ ������������."
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr "������ ������ ��������� ��������� IPv4 ������ IPv6������ ���������."
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "������ ��������� ������������ ������ ��������������� ������������������."
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s��� ��������� ������ ��� ������������. ������������: %(err)s"
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr "������������ ��������� ������������������ ���������."
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr "������������ ��������� ������������������ ���������."
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "'%(users)s' ������������ ������������."
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "'%(groups)s' ������������ ������������."
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "������ ������ %(name)s��� %(iface)s ������������������ ������������."
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr "������ ������ %(name)s��� ������ ��������� %(network)s ��������������� ������������."
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr "������������ ������ ������ ��������������� ��������� ������������������������."
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr "������ ������ ������������������ ������������ ��������� ������������������ ���������."
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+"������ ������ ������������������ ������ ������������ ������ ������������ ������ ��������� ������������������"
+"���."
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr "��� ������ ������ ������������������ ��������� ������ ��� ��������������� ������������������."
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "������������ %(name)s���(���) ������ ���������������."
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr "������������ %(template)s��� ������ ��������� '%(network)s' ��������������� ������������."
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+"������������ %(template)s��� ������ ��������� ������������ ��� %(pool)s���(���) ������������."
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+"������������ %(template)s��� ������ ��������� ������������ ��� %(pool)s���(���) ��������� ���������"
+"���."
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "CDROM��� ������ ������������ ������ ������������ '%(param)s'���(���) ���������������������."
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr ""
+"������������ %(template)s��� ������ ��������� %(network)s ��������������� ��������� ������������."
+
+msgid "Template name must be a string"
+msgstr "������������ ��������� ������������������ ���������."
+
+msgid "Template icon must be a path to the image"
+msgstr "������������ ������������ ������������ ������������ ���������."
+
+msgid "Template distribution must be a string"
+msgstr "������������ ��������� ������������������ ���������."
+
+msgid "Template distribution version must be a string"
+msgstr "������������ ������ ��������� ������������������ ���������."
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "CPU ������ ������������ ���������."
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "��������� ������(MB)��� 512������ ��� ������������ ���������."
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "������������ CDROM��� ������ ������ ������ ISO ��������������� ���������."
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr ""
+"��������������� ������ ������������ ������ ������������ ��� URI %(value)s���(���) ���������������������."
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr "��������������� ��������������� ISO ������������ CDROM������ ������������������."
+
+msgid "All networks for the template must be specified in a list."
+msgstr "��������������� ������ ��������������� ��������� ��������������� ���������."
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "������ ��������� ��������������� ��������� ��� ������: %(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "������ ��������� ��������������� ��������� ��� ������: %(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr "������������ CDROM��� ������ ������ ������ ISO ��������������� ���������."
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "������������ ��� %(name)s���(���) ������ ���������������."
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "������������ ��� %(name)s���(���) ������������."
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr "������������ ��� %(name)s���(���) ��������������� %(item)s���(���) ������������������."
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "������ ������������ ��� %(name)s���(���) ��������� ��� ������������."
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "������������ ������ ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "������������ ��� %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr ""
+"������������ ��� %(name)s��� ������ ������������ ��������� ������ ��������� ��� ������������. ���������"
+"���: %(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "������������ ��� %(name)s���(���) ������������ ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr "������������ ��� %(name)s���(���) ��������������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr "������������ ��� %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+"������������ ������ %(path)s���(���) ��������� ������ ��������� ��� ������������ NFS ������ ��������� "
+"��� ������������."
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+"������������ ������ %(path)s ������������ ������������������ NFS ������ ��������� ��� ������������."
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "������������ ������ ������������ ��� ������: %(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr "������������ ��� ��������� ������������������ ���������."
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "������������ ��� ������������ IP ������ ��������� ��������������� ���������."
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "������������ ��� ��������� ��������������� ���������."
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "iSCSI ������ ������ IQN��� ������������������ ���������."
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr "������ ������������ ��������� ��������� 1��� 65535 ��������� ������������ ���������."
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr "������������ ������ ��������������� ������ ��� ��������� ������������������."
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr ""
+"%(disk)s���(���) ��������� ���������/������������ ������������. ������ %(pool)s ������ ��������� ��� "
+"������������."
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr "������ ������������ ������ ������������ ������������ ��������������� ��� ������������."
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "SCSI ��������� ��������� ��������� ������������������ ���������."
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "������������ ��� kimchi_isos��� ������ ��������� ���������������������."
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"NFS ������������ ��� %(name)s���(���) ������������ ��� ������������. NFS ������ %(server)s��� ���"
+"������ ��� ������������."
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"NFS ������������ ��� %(name)s���(���) ��������������� ��� ������������. NFS ������ %(server)s��� "
+"��������� ��� ������������."
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+"������ ��������������� ������������ ������������ %(name)s ������ ��������������� ��� ������������."
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr "������ ��������������� ������������ ������������ %(name)s ������ ��������� ��� ������������."
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+"��������� '%(name)s'��� ������ ��������� ������ ���������������. ������ ������ ��������������� ������ ���"
+"������ ������������������."
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+"������ ��������� ��������� ������ ��������� ��������������������� ��������������� ��� ������: %(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "������������ ������ %(name)s���(���) ������ ���������������."
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr "������������ ������ %(name)s���(���) ������������ ��� %(pool)s��� ������������."
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr "������������ ������ %(volume)s���(���) ��������������� %(item)s���(���) ������������������."
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+"������������ ��� %(pool)s���(���) ��������� ������������ ������������ ��������� ��������� ��� ���������"
+"���."
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr ""
+"������������ ������ %(name)s���(���) ������������ ��� %(pool)s��� ��������� ��� ������������. ������"
+"������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+"������������ ��� %(pool)s��� ������������ ��������� ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr "������������ ��� %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr "������������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr "������������ ������ %(name)s��� ��������� ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr "������������ ������ %(type)s���(���) ������ ������ ��� ��������� ������������ ������������."
+
+msgid "Storage volume name must be a string"
+msgstr "������������ ������ ��������� ������������������ ���������."
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "������������ ������ ��������� ������������ ���������."
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr "������������ ��������� ������ ��������� ���������������."
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+"������ ��������� ������������ ������ ��������� ��������������������� ��������������� ��� ������: %(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "��������������� %(name)s���(���) ������������."
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "������������ %(name)s���(���) ������ ���������������."
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "������������ %(name)s���(���) ������������."
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+"������������ %(network)s��� ������ ��������� ��������� %(subnet)s���(���) ������������ ������������."
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr ""
+"������������ ������������ %(name)s���(���) ��������� ������������ ������������������ ������������������."
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "������ ������������ %(name)s���(���) ��������� ��� ������������."
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+"������������ %(network)s��� ������ ��������� ��������������� %(iface)s���(���) ������ ������ ������"
+"������."
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr "������������������ ������ NIC, ������ ������ ��������� ������������ ���������."
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "������������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "������������ '%(name)s'��� ������ ������ IP ��������� ������ ��� ������������."
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr ""
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "������������ ������������ ��������� ������, NAT ��� ������������������."
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+"������������ ������������ IP ������ ��� ��������� ������ ��������������� ������ ������������������ ���������."
+
+msgid "Network interface must be a string"
+msgstr "������������ ������������������ ������������������ ���������."
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "������������ VLAN ID��� 1��� 4094 ��������� ������������ ���������."
+
+msgid "Specify name and type to create a Network"
+msgstr "��������������� ��������������� ������ ��� ��������� ������������������."
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr "��������� ������ %(name)s���(���) VLAN��� ��������� ��������� ��� ��� ������������."
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "%(iface)s ������������������ ��������������� ������: %(err)s."
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+"%(iface)s ������������������ ��������������� ���������������. ��������� ������ ��������� ���������������"
+"���."
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "��������� ��������� %(name)s���(���) ������������."
+
+msgid "Debug report tool not found in system"
+msgstr "��������� ��������� ��������� ������������ ������������."
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr "��������� ��������� %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr "��������� ��������� %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+"��������� '%(name)s'��� ������ ��������� ������ ���������������. ������ ������ ��������������� ������ ���"
+"������ ������������������."
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "������������ ������ %(server)s���(���) Kimchi������ ������������ ���������������."
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "Distro '%(name)s'���(���) ������������."
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "��������� %(name)s���(���) ������������ ������������."
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr "������ ��������� ������ ������ ��������� ��������� ��������� ��� ������������."
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr "������ ��������� ������ ������ ��������� ��������� ������ ��������� ��� ������������."
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "������ ������ '%(name)s'���(���) ������������."
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr "������������ ��������� ������������ ������������."
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "��������� %(name)s���(���) ��������������������� ������������ ���������������."
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr ""
+"��������������������� ��������� ������������ ������������ ������ ��������� ������������������. ������������: "
+"%(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "��� ������������ ������ ������ ��������� ��������� ������������ ������������."
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "������������ ������ URI %(uri)s"
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "������������ ������ ������������ ���������������. ������������ ������: 'cdrom'"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr "��� ������������ ��������� ������������ ������ ������ ������: %(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr "������������ ��������� ������������������ ������ ������ ������: %(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr "������������ ��������� ������������ ������ ������ ������: %(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr "��� ������ ������ ������������ ��������� ������ ��� ��������� ������������������."
+
+msgid "Specify path to update virtual machine disk"
+msgstr "������ ������ ������������ ��������������� ��������� ������������������."
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr "��� ������ ������ ������������ ��������� ������ ��� ��������� ������������������."
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr "YUM ��������� ID��� ������ ��������� ������������������ ���������."
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "��������� URL��� http://, ftp:// ������ file:// URL��������� ���������."
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr "��������� ��������� ��������� ��������� ������ ������ ������ ������ ���������������."
+
+msgid "Distribution to DEB repository must be a string"
+msgstr "DEB ������������ ������ ��������� ������������������ ���������."
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "DEB ������������ ������ ��������������� ��������� ��������������� ���������."
+
+msgid "Components to DEB repository must be a string"
+msgstr "DEB ������������ ������ ��������������� ������������������ ���������."
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "YUM ��������� ��������� ������������������ ���������."
+
+msgid "GPG check must be a boolean value."
+msgstr "GPG ��������� ������ ������������ ���������."
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr "GPG ������ ASCII ������ ��������� ������������ URL��������� ���������."
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "%(repo_id)s ������������ ��������������� ��� ������������."
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "%(repo_id)s ������������ ������������."
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr "������ ������������ ������ ��������� ������ ��������� ������������ ���������������."
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "%(repo_id)s ������������ ������ ������������ ������������ ������������."
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "%(repo_id)s ������������ ������ ������ ������������ ������������ ������������."
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "%(repo_id)s ������������ ��������� ��� ������������."
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr "��������� ������ ������ %(repo_file)s���(���) ��������� ��� ������������."
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr "DEB ������������ ��������������� ��������� ��������� ������������������."
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "%(repo_id)s ������������ ������������ ��������� ��� ������������."
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "%(repo_id)s ������������ ������ ������������ ��������� ��� ������������."
+
+msgid "YUM Repository ID already exists"
+msgstr "YUM ��������� ID��� ������ ���������������."
+
+msgid "YUM Repository name must be a string"
+msgstr "YUM ��������� ��������� ������������������ ���������."
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "������������ ��������� ��� ������������. ������������: '%(err)s'"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr "��������� ��������� ��������� ��� ������������. ������������: '%(err)s'"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "������������ ��������� ��� ������������. ������������: '%(err)s'"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "������������ ��������� ��� ������������. ������������: '%(err)s'"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr "������ ������"
+
+msgid "REASON"
+msgstr "������"
+
+msgid "STACK"
+msgstr "������"
+
+msgid "Go to Homepage"
+msgstr "��� ������������ ������"
+
+msgid "Create a New Virtual Machine"
+msgstr "��� ������ ������ ������"
+
+msgid "Virtual Machine Name"
+msgstr "������ ������ ������"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+"������ ��������� ������������ ��� ������������ ���������������. ������������ ��������� ��������� ������������"
+"��� ������������ ���������������."
+
+msgid "Template"
+msgstr "������������"
+
+msgid "Please create a template first."
+msgstr "��������������� ������ ������������������."
+
+msgid "Create a Template"
+msgstr "������������ ������"
+
+msgid "Please choose a template."
+msgstr "��������������� ������������������."
+
+msgid "OS"
+msgstr "OS"
+
+msgid "OS Version"
+msgstr "OS ������"
+
+msgid "CPUS"
+msgstr "CPUS"
+
+msgid "Memory"
+msgstr "���������"
+
+msgid "Create"
+msgstr "������"
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr "������"
+
+msgid "Edit Guest"
+msgstr "��������� ������"
+
+msgid "General"
+msgstr "������"
+
+msgid "Storage"
+msgstr "������������"
+
+msgid "Interface"
+msgstr "���������������"
+
+msgid "Permission"
+msgstr "������"
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr "������"
+
+msgid "CPUs"
+msgstr "CPU"
+
+msgid "Memory (MB)"
+msgstr "���������"
+
+msgid "Icon"
+msgstr "���������"
+
+msgid "Device"
+msgstr "������ ������"
+
+msgid "Path"
+msgstr "NFS ������"
+
+msgid "Network"
+msgstr "������������"
+
+msgid "Type"
+msgstr "������"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr "������"
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr "������������"
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr "������"
+
+msgid "Replace"
+msgstr "������"
+
+msgid "Detach"
+msgstr "������"
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr "������"
+
+msgid "Reset"
+msgstr "������ ������"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Actions"
+msgstr "������"
+
+msgid "Connect"
+msgstr "������"
+
+msgid "Clone"
+msgstr ""
+
+msgid "Edit"
+msgstr "������"
+
+msgid "Shut Down"
+msgstr "��������� ������"
+
+msgid "Delete"
+msgstr "������"
+
+msgid "CPU"
+msgstr "CPU"
+
+msgid "Disk I/O"
+msgstr "��������� I/O"
+
+msgid "Network I/O"
+msgstr "������������ I/O"
+
+msgid "Livetile"
+msgstr "���������������"
+
+msgid "No guests found."
+msgstr "������������ ������������."
+
+msgid "Add a Storage Device to VM"
+msgstr "������������ ��������� VM��� ������"
+
+msgid "Device Type"
+msgstr "������ ������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "������ ���������������. ������ \"cdrom\"��� ���������������."
+
+msgid "Storage Pool"
+msgstr "������������ ���"
+
+msgid "Storage pool which volume located in"
+msgstr "������������ ��� ��������� ������������������ ���������."
+
+msgid "Storage Volume"
+msgstr "������������ ��� ������"
+
+msgid "Storage volume to be attached"
+msgstr "������������ ������ ��������� ������������������ ���������."
+
+msgid "File Path"
+msgstr "������ ������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "CDROM��� ������ ��������� ISO ������ ���������������."
+
+msgid "Attach"
+msgstr "������"
+
+msgid "Shut down"
+msgstr "��������� ������"
+
+msgid "Restart"
+msgstr "������ ������"
+
+msgid "Basic Information"
+msgstr "������ ������"
+
+msgid "OS Distro"
+msgstr "OS Distro"
+
+msgid "OS Code Name"
+msgstr "OS ������ ������"
+
+msgid "Processor"
+msgstr "������������"
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr "��������� ������"
+
+msgid "Software Updates"
+msgstr "��������������� ������������"
+
+msgid "Update Progress"
+msgstr "������������ ������������"
+
+msgid "Repositories"
+msgstr "���������"
+
+msgid "Debug Reports"
+msgstr "��������� ���������"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr ""
+"��������� ��������� ������ ������ ��������������� ������������ ������������. ������ ������������������."
+
+msgid "This field is required."
+msgstr "��� ��������� ���������������."
+
+msgid "Log in"
+msgstr "���������"
+
+msgid "Logging in..."
+msgstr "��������� ���..."
+
+msgid "Host"
+msgstr "���������"
+
+msgid "Guests"
+msgstr "���������"
+
+msgid "Templates"
+msgstr "������������"
+
+msgid "Failed to get application configuration"
+msgstr "������������������ ��������� ������������ ���������������."
+
+msgid "This is not a valid Linux path"
+msgstr "��������� Linux ��������� ������������."
+
+msgid "This is not a valid URL."
+msgstr "��������� URL��� ������������."
+
+msgid "No such data available."
+msgstr "������ ������������ ������������."
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"��������� ������������ ��������� ��� ������������. ��������� ������������ ��������������� ������ ������ ������"
+"������ ��������� ��������� ������������������. HTTP ������ ������ %1. "
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "������ ������"
+
+msgid "OK"
+msgstr "������"
+
+msgid "Confirm"
+msgstr "������"
+
+msgid "Warning"
+msgstr "������"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "������ ���..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "���������"
+
+msgid "Detailed message:"
+msgstr "������ ���������:"
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr "��������� ISO ��������� ������������."
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "��������� ������ ������������. ������������������������?"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "��������������� ��������������� ���������������. ������������������������?"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr "������ ������ ��������� ������ ������������ ������������ ��������� ��� ������������."
+
+msgid "Max:"
+msgstr "������:"
+
+msgid "Utilization"
+msgstr "���������"
+
+msgid "Available"
+msgstr "������ ������"
+
+msgid "Read Rate"
+msgstr "������ ������"
+
+msgid "Write Rate"
+msgstr "������ ������"
+
+msgid "Received"
+msgstr "������"
+
+msgid "Sent"
+msgstr "������"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+"������������ ��������������� ������ ������������ ������������ ������ ��������� ���������������. ��������� ���"
+"���/������ ��������� ������������������������?"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr "������������ ��������������� ������������ ��������� ��� ������������. ������������������������?"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Base URL"
+msgstr "������ URL"
+
+msgid "Is Mirror"
+msgstr "���������"
+
+msgid "URL Args"
+msgstr "URL ������"
+
+msgid "Enabled"
+msgstr "���������"
+
+msgid "GPG Check"
+msgstr "GPG ������"
+
+msgid "GPG Key"
+msgstr "GPG ���"
+
+msgid "Add"
+msgstr "������"
+
+msgid "Remove"
+msgstr "������"
+
+msgid "Enable"
+msgstr "������"
+
+msgid "Disable"
+msgstr "������ ������"
+
+msgid "Package Name"
+msgstr "��������� ������"
+
+msgid "Version"
+msgstr "������"
+
+msgid "Architecture"
+msgstr "������������"
+
+msgid "Repository"
+msgstr "���������"
+
+msgid "Update All"
+msgstr "������ ������������"
+
+msgid "Updating..."
+msgstr "������������ ���..."
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr "������������ ������������������ ���������������."
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"��������� ������������ ��������������� ������������ ��������� ��� ������������. ������������������������?"
+
+msgid "Generated Time"
+msgstr "������ ������"
+
+msgid "Generate"
+msgstr "������"
+
+msgid "Generating..."
+msgstr "������ ���..."
+
+msgid "Rename"
+msgstr "������ ���������"
+
+msgid "Download"
+msgstr "������������"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr "��������� ������������ ������, ������ ���/������ ���������('-')��� ��������������� ���������."
+
+msgid "Pending..."
+msgstr "������ ���..."
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+"������ ������ ��� ������ ������ ������������ ���������������. ��� ��������� ������ ��������� ��� ���������"
+"���. ������������������������?"
+
+msgid "Power off Confirmation"
+msgstr "������ ������"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr "������ ������"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr "������ ������"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr "��������������� ��������������� ���������������. ������������������������?"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"��� CDROM��� ��������������� ������������ ������ ��������� ��� ������������. ��������� ���������������������"
+"���?"
+
+msgid "Attaching..."
+msgstr "������ ���..."
+
+msgid "Replacing..."
+msgstr "������ ���..."
+
+msgid "Successfully attached!"
+msgstr "���������������������."
+
+msgid "Successfully replaced!"
+msgstr "���������������������."
+
+msgid "Successfully detached!"
+msgstr "���������������������."
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "VLAN ID��� 1��� 4094 ������������ ���������."
+
+msgid "unavailable"
+msgstr "������ ���������"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+"��� ��������� ��� ��������������� ������������ ������ ��������� ������������ ��������� ���������������������."
+
+msgid "Create a network"
+msgstr "������������ ������"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"��� ������������ ������ ��������������� ������������. ��� ��������� ������ ������������������ ������ ���������"
+"������ ���������������. ������������������������?"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr "������������ ������ ��������������� ���������������. ������������������������?"
+
+msgid "This storage pool is empty."
+msgstr "��� ������������ ������ ������ ������������."
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr "������������ ������������ ������������ ���������������. ������������������������? "
+
+msgid "SCSI Fibre Channel"
+msgstr "SCSI ��������� ������"
+
+msgid "No SCSI adapters found."
+msgstr "SCSI ������������ ������������."
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr "������������ ��� ��������� ��������� ��� ������������."
+
+msgid "The storage pool path can not be blank."
+msgstr "������������ ��� ��������� ��������� ��� ������������."
+
+msgid "NFS server mount path can not be blank."
+msgstr "NFS ������ ��������� ��������� ��������� ��� ������������."
+
+msgid "Invalid NFS mount path."
+msgstr "������������ ������ NFS ��������� ���������������."
+
+msgid "No logical device selected."
+msgstr "������ ��������� ������������ ���������������."
+
+msgid "The iSCSI target can not be blank."
+msgstr "iSCSI ��������� ��������� ��� ������������."
+
+msgid "Server name can not be blank."
+msgstr "������ ��������� ��������� ��� ������������."
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr "������ ��������� ������������ ������ ���..."
+
+msgid "No available partitions found."
+msgstr "������ ��������� ������������ ������������."
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"��� ������������ ������ ��������������� ������������. ��� ��������� ������ ������������������ ������ ���������"
+"������ ���������������. ������������������������?"
+
+msgid "Unable to retrieve partitions information."
+msgstr "��������� ��������� ��������� ��� ������������. ������������: '%(err)s'"
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "������������ ��� ��������� ��������� ��� ������������."
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr "������������ ������"
+
+msgid "State"
+msgstr "������"
+
+msgid "Network Type"
+msgstr "������������ ������"
+
+msgid "Address Space"
+msgstr "������ ������"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr "������������ ������ ������������ ��� ���������������. '/'��� ������������ ��������� ���������."
+
+msgid "Isolated: no external network connection"
+msgstr "���������: ��������� ������������ ������ ������"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT: ��������������� ��������� ������������ ���������"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr "������������: ������ ��������� ��������� ��������������� ������ ���������"
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr "������:"
+
+msgid "Enable VLAN"
+msgstr "VLAN ������:"
+
+msgid "VLAN ID"
+msgstr "VLAN ID:"
+
+msgid "Stop"
+msgstr "������"
+
+msgid "Generate a New Debug Report"
+msgstr "��� ��������� ��������� ������"
+
+msgid "Report Name"
+msgstr "��������� ������"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"������������ ������������ ��� ������������ ���������������. ������������ ��������� ������ ��������� ���������"
+"��� ���������������. ��������� ������, ������ ��� ���������(\"-\")��� ��������� ��� ������������."
+
+msgid "Rename a Debug Report"
+msgstr "��� ��������� ��������� ������"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"������������ ������������ ��� ������������ ���������������. ������������ ��������� ������ ��������� ���������"
+"��� ���������������. ��������� ������, ������ ��� ���������(\"-\")��� ��������� ��� ������������."
+
+msgid "Submit"
+msgstr ""
+
+msgid "Add a Repository"
+msgstr "��������� ������"
+
+msgid "Identifier"
+msgstr "ID"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "������������ ������ ������ ��������� ������ ID���������."
+
+msgid "Textual name for the repository."
+msgstr "������������ ������ ��������� ���������������."
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "������ ������"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "������������ ������ URL���������. ������������ ��������������� http, ftp ��� file���������."
+
+msgid "Repository is a mirror"
+msgstr "������������ ���������������."
+
+msgid "Distribution"
+msgstr "������"
+
+msgid "Distribution of the DEB repository."
+msgstr "DEB ������������ ���������������."
+
+msgid "Components"
+msgstr "������������"
+
+msgid "List of components in DEB repository."
+msgstr "DEB ������������ ������������ ���������������."
+
+msgid "Edit Repository"
+msgstr "��������� ������"
+
+msgid "Mirror List URL"
+msgstr "������ ������ URL"
+
+msgid "Yes"
+msgstr "���"
+
+msgid "No"
+msgstr "���������"
+
+msgid "Capacity"
+msgstr "������"
+
+msgid "Allocated"
+msgstr "���������"
+
+msgid "Location"
+msgstr "������"
+
+msgid "Device path"
+msgstr "������ ������"
+
+msgid "active"
+msgstr "������"
+
+msgid "inactive"
+msgstr "���������"
+
+msgid "Deactivate"
+msgstr "������������"
+
+msgid "Activate"
+msgstr "���������"
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr "������ ������"
+
+msgid "Format"
+msgstr "������:"
+
+msgid "Allocation"
+msgstr "������:"
+
+msgid "Define a New Storage Pool"
+msgstr "��� ������������ ��� ������"
+
+msgid "Storage Pool Name"
+msgstr "������������ ��� ������"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr "������������ ������ ������������ ��� ������������ ������������ ������ ������ ��������� ���������."
+
+msgid "Storage Pool Type"
+msgstr "������������ ��� ������"
+
+msgid "Storage Path"
+msgstr "������������ ������"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr "������������ ������ ���������������. ��� ������������ ������ ������ ��������� ��������� ���������."
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr ""
+"��������������� ������������ ������ ������������ ��������� Kimchi��� ������������ ��������� ���������������."
+
+msgid "NFS Server IP"
+msgstr "NFS ������ IP"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+"NFS ������ IP ������ ��������� ���������������. ��������� ��������������� ������������������ ��������� ��� "
+"������������."
+
+msgid "NFS Path"
+msgstr "NFS ������"
+
+msgid "The NFS exported path on NFS server."
+msgstr "NFS ������������ NFS��� ��������� ���������������."
+
+msgid "iSCSI Server"
+msgstr "iSCSI ������"
+
+msgid "Server"
+msgstr "������"
+
+msgid "Port"
+msgstr "������"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "iSCSI ������ IP ������ ��������� ���������������. ������ ������ ��������� ���������."
+
+msgid "Target"
+msgstr "������"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "iSCSI ��������� iSCSI ������"
+
+msgid "Add iSCSI Authentication"
+msgstr "iSCSI ������ ������"
+
+msgid "iSCSI Authentication"
+msgstr "iSCSI ������"
+
+msgid "User Name"
+msgstr "��������� ������"
+
+msgid "Password"
+msgstr "������������"
+
+msgid "SCSI Adapter"
+msgstr "SCSI ���������"
+
+msgid "Please, wait..."
+msgstr "������ ��������� ������������."
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr "������������ ������"
+
+msgid "Where is the source media for this template? "
+msgstr "��� ��������������� ������ ��������� ��������� ������������?"
+
+msgid "Local ISO Image"
+msgstr "������ ISO ���������"
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr "������ ISO ���������"
+
+msgid "Search ISOs"
+msgstr "ISO ������"
+
+msgid "The following ISOs are available:"
+msgstr "������ ISO��� ������ ���������������."
+
+msgid "OS: "
+msgstr "OS: "
+
+msgid "Version: "
+msgstr "������: "
+
+msgid "Size: "
+msgstr "������: "
+
+msgid "Search more ISOs"
+msgstr "������ ISO ������"
+
+msgid "Create Templates from Selected ISO"
+msgstr "��������� ISO��������� ������������ ������"
+
+msgid "I want to use a specific ISO file"
+msgstr "������ ISO ��������� ��������������� ���������."
+
+msgid "Loading default remote ISOs ..."
+msgstr "������ ������ ISO ������ ���..."
+
+msgid "Arch: "
+msgstr "Arch: "
+
+msgid "I want to use a custom URL"
+msgstr "��������� ������ URL��� ��������������� ���������."
+
+msgid "Edit Template"
+msgstr "������������ ������"
+
+msgid "CDROM"
+msgstr "CDROM"
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr "���������"
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "CPU ������"
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr "��������������� ������������."
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "%(resource)s��� ��������� ������������ ������"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s��������� ������������ ������������ ������������ ������"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "%(resource)s��� ��������� ������������ ������"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "JSON ��������� ������ ��������� ��� ������������."
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "��� API��� JSON��� ���������������."
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "��������� ������������ ������ ������������������ ������������ ���������������."
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "������ ��������� ��������� ��������� ��� ������: %(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr "��������� '%(username)s'��� ��������� ������������������. [������ ������: %(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "Kimchi��� ������������ ��������� ������������."
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "Kimchi��� ������������������ %(item)s���(���) ������������������."
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "��������� ��������������� %(item)s���(���) ������ ��� ������������."
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr ""
+#~ "%(seconds)s��� ������ '%(cmd)s' ������ ������ ��� ��������������� ���������������������."
+
+#~ msgid "Help"
+#~ msgstr "���������"
+
+#~ msgid "About"
+#~ msgstr "������"
+
+#~ msgid "Log out"
+#~ msgstr "������������"
+
+#~ msgid "Version:"
+#~ msgstr "������: "
diff --git a/plugins/gingerbase/po/pt_BR.po b/plugins/gingerbase/po/pt_BR.po
new file mode 100644
index 0000000..78a1435
--- /dev/null
+++ b/plugins/gingerbase/po/pt_BR.po
@@ -0,0 +1,2369 @@
+# i18n portable object for gingerbase.
+# Copyright (C) IBM, Corp. 2013-2014
+# ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>, 2013-04-18.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2015-03-23 12:57+0000\n"
+"Last-Translator: Cr��stian Deives dos Santos Viana <cristiandeives@gmail."
+"com>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/"
+"kimchi/language/pt_BR/)\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr "Par��metro desconhecido: %(value)s"
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+"Limite de tempo de %(seconds)s segundos expirado ao executar a tarefa "
+"'%(task)s'."
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr "Usu��rio %(user_id)s n��o encontrado com as configura����es LDAP dadas."
+
+msgid "Unknown \"_cap\" specified"
+msgstr "\"_cap\" desconhecido especificado"
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr "\"_passthrough\" deve ser \"true\" ou \"false\""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr "\"_passthrough_affected_by\" deve ser um texto do nome do dispositivo"
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr "Erro ao consultar block devices. Detalhes %(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr "Erro ao consultar informa����es de block devices para %(device)s."
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "N��o foi poss��vel encontrar o arquivo da distribui����o: %(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+"N��o foi poss��vel ler o arquivo da distribui����o: %(filename)s. Confirme se �� "
+"um arquivo JSON."
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel logar na m��quina alvo do iSCSI %(portal)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "N��o foi poss��vel logar na m��quina %(host)s alvo %(target)s do iSCSI"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr "N��o foi poss��vel encontrar a ISO %(filename)s"
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "A ISO %(filename)s n��o �� boot��vel"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr "A ISO %(filename)s n��o possui uma grava����o v��lida de boot El Torito"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "Valida����o El Torito inv��lida na ISO %(filename)s"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "Indicador de boot El Torito inv��lido na ISO %(filename)s"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr ""
+"Tipo de volume n��o esperado para um volume prim��rio na ISO %(filename)s"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr "Formato errado na leitura do descritor de volume na ISO %(filename)s"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"O servidor n��o tem permiss��o para acessar a ISO %(filename)s. Considere mud��-"
+"la para o diret��rio /var/lib/libvirt, ou mude as permiss��es para que o "
+"usu��rio '%(user)s' tenha acesso, ou, adicione o usu��rio '%(user)s' no grupo "
+"do caminho da ISO, ou (n��o recomendado) 'chmod -R o+x 'caminho_para_iso'. "
+"Detalhes: %(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr "Ocorreu um erro ao identificar o sistema operacional da imagem."
+
+msgid "No OS information found in given image."
+msgstr ""
+"Nenhuma informa����o de sistema operacional encontrada na imagem fornecida."
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr "N��o foi poss��vel ler o arquivo de imagem %(filename)s."
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+"Arquivo de imagem deve ser um arquivo existente no sistema. %(filename)s n��o "
+"�� uma entrada v��lida."
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "M��quina virtual %(name)s j�� existe"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "M��quina virtual %(name)s n��o existe"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+"N��o foi poss��vel renomear a m��quina virtual %(name)s. O nome %(new_name)s j�� "
+"est�� em uso ou a m��quina virtual n��o est�� ligada."
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr ""
+"N��o foi poss��vel tirar uma foto da tela para a m��quina virtual %(name)s que "
+"est�� desligada"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "Imagem de ISO remota n��o �� suportada por esse servidor."
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr "Foto da tela n��o �� suportado na m��quina virtual %(name)s"
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel criar a m��quina virtual %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel atualizar a m��quina virtual %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel encontrar a m��quina virtual %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr "N��o foi poss��vel conectar �� m��quina virtual desligada %(name)s."
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr "URI do Modelo inv��lida %(value)s especificada para m��quina virtual"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+"URI do Storage pool URI inv��lida %(value)s especificada para m��quina virtual"
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr "Gr��ficos suportados para a m��quina virtual s��o Spice ou VNC"
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr "Endere��o para receber eventos gr��ficos deve ser IPv4 ou IPv6"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "Especifique um modelo para ser base da cria����o da m��quina virtual"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel iniciar a m��quina virtual %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel for��ar o desligamento da m��quina virtual %(name)s. "
+"Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel remover a m��quina virtual %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel reiniciar a m��quina virtual %(name)s. Detalhes: %(err)s"
+
+msgid "User name list must be an array"
+msgstr "Lista de nomes de usu��rio deve ser um array"
+
+msgid "User name must be a string"
+msgstr "Nome de usu��rio deve ser um texto"
+
+msgid "Group name list must be an array"
+msgstr "Lista de nomes de grupo deve ser um array"
+
+msgid "Group name must be a string"
+msgstr "Nome de grupo deve ser um texto"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "Usu��rio(s) '%(users)s' n��o existe(m)"
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "Grupo(s) '%(groups)s' n��o existe(m)"
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel desligar a m��quina virtual %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel acessar os metadados da m��quina virtual %(name)s. Detalhes: "
+"%(err)s"
+
+msgid "The guest console password must be a string."
+msgstr "A senha para o console do guest deve ser um texto."
+
+msgid "The life time for the guest console password must be a number."
+msgstr "O tempo de vida da senha do console do guest deve ser um n��mero."
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr "A m��quina virtual '%(name)s' deve estar parada antes de clon��-la."
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr "Espa��o em disco insuficiente para clonar a m��quina virtual '%(name)s'"
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr "N��o foi poss��vel clonar a VM '%(name)s'. Detalhes: %(err)s"
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr "Opera����o inv��lida para m��quina virtual n��o-persistente %(name)s"
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+"A VM %(vmid)s n��o cont��m o dispositivo de host atribu��do diretamente "
+"%(dev_name)s."
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+"N��o �� permitido atribuir diretamente o dispositivo de host %(dev_name)s."
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+"Nenhum grupo IOMMU encontrado. Passthrough de host PCI necessita do grupo "
+"IOMMU para funcionar corretamente. Por favor, habilite o suporte ao Intel VT-"
+"d ou AMD IOMMU. Para uma CPU Intel, adicione \"intel_iommu=on\" nos seus "
+"par��metros de kernel em \"/boot/grub2/grub.conf\". Para uma CPU AMD, "
+"adicione \"iommu=pt iommu=1\"."
+
+msgid "\"name\" should be a device name string"
+msgstr "\"nome\" deve ser um texto do nome do dispositivo."
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "Interface %(iface)s n��o existe na m��quina virtual %(name)s"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+"Rede %(network)s especificada para a m��quina virtual %(name)s n��o existe"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr "Tipo de interface suportado das m��quinas virtuais �� somente rede"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr "Nome da rede para a interface da m��quina virtual deve ser texto"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr "Modelo de placa de rede inv��lido para a interface da m��quina virtual"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr ""
+"Especifique o tipo e a rede para adicionar uma nova interface da m��quina "
+"virtual"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "Modelo %(name)s j�� existe"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr "Rede '%(network)s' especificada para o modelo %(template)s n��o existe"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr ""
+"Storage pool %(pool)s especificado para o modelo %(template)s n��o existe"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr ""
+"Storage pool %(pool)s especificado para o modelo %(template)s n��o est�� ativo"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "Par��metro inv��lido '%(param)s' especificado para CDROM"
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr "Rede %(network)s especificada para modelo %(template)s n��o est�� ativa"
+
+msgid "Template name must be a string"
+msgstr "Nome do modelo deve ser um texto"
+
+msgid "Template icon must be a path to the image"
+msgstr "��cone do modelo deve ser um caminho para uma imagem"
+
+msgid "Template distribution must be a string"
+msgstr "Distribui����o do modelo deve ser um texto"
+
+msgid "Template distribution version must be a string"
+msgstr "Vers��o da distribui����o do modelo deve ser um texto"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "O n��mero de CPUs deve ser um inteiro maior do que 0"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "Quantidade de mem��ria (MB) deve ser um inteiro maior que 512"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "Modelo do CDROM deve ser um arquivo ISO local ou remoto"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr "URI de storage pool inv��lido %(value)s especificado para modelo"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr ""
+"Especifique uma imagem ISO como CD-ROM ou uma imagem base para criar um "
+"modelo"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "Todas redes para o modelo devem ser especificadas em uma lista"
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+"Especifique um volume para o template quando o storage pool for iSCSI or SCSI"
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr "O volume %(volume)s n��o est�� no storage pool %(pool)s"
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "N��o foi poss��vel criar o modelo devido a um erro: %(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "N��o foi poss��vel remover o modelo devido a um erro: %(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr "O tamanho do disco deve ser um n��mero inteiro maior que 1GB."
+
+msgid "Template base image must be a valid local image file"
+msgstr "Imagem base do modelo deve ser um arquivo de imagem local v��lido"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr "N��o foi poss��vel identificar o formato da imagem base %(path)s"
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+"Ao especificar a topologia de CPU, VCPUs deve ser um produto de sockets, "
+"cores e threads."
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+"Ao especificar a topologia de CPU, cada elemento deve ser um n��mero inteiro "
+"maior do que zero."
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+"Formato de imagem de disco inv��lido. Formatos v��lidos: bochs, cloop, cow, "
+"dmg, qcow, qcow2, qed, raw, vmdk, vpc."
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "Storage pool %(name)s j�� existe"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "Storage pool %(name)s n��o existe"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr "Especifique %(item)s para criar o storage pool %(name)s"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "N��o foi poss��vel remover o storage pool ativo %(name)s"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "N��o foi poss��vel listar os storage pools. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel criar o storage pool %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr ""
+"N��o foi poss��vel saber o n��mero de volumes no storage pool %(name)s. "
+"Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "N��o foi possivel ativar o storage pool %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr "N��o foi possivel desativar o storage pool %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr "N��o foi possivel remover o storage pool %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+"N��o foi poss��vel criar Pool NFS uma vez que o caminho de exporta����o %(path)s "
+"pode bloquear durante a montagem"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+"N��o foi poss��vel criar NFS Pool uma vez que a montagem do caminho de "
+"exporta����o %(path)s falhou"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "Tipo de storage pool n��o suportado: %(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr "Erro durante a leitura do XML do storage pool %(pool)s"
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+"Tipos de storage pool supportados s��o dir, netfs, logical, iscsi, scsi e "
+"kimchi-iso"
+
+msgid "Storage pool path must be a string"
+msgstr "Caminho para storage pool deve ser um texto"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "Host do storage pool deve ser um IP ou um hostname"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+"Dispositivo do storage pool deve ser o caminho absoluto para o block device"
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "Par��metro dos dispositivos do storage pool devem ser uma lista"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "Alvo IQN de um pool iSCSI deve ser um texto"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr ""
+"Porta de um servidor remoto de storage deve ser um inteiro entre 1 e 65535"
+
+msgid "iSCSI target username must be a string"
+msgstr "Usu��rio do iSCSI target deve ser um texto"
+
+msgid "iSCSI target password must be a string"
+msgstr "Senha do iSCSI target deve ser um texto"
+
+msgid "Specify name and type to create a storage pool"
+msgstr "Especifique o nome e o tipo para criar um storage pool"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr ""
+"%(disk)s n��o �� um disco/parti����o v��lido. N��o foi poss��vel adicion��-lo ao "
+"pool %(pool)s."
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr "N��o foi poss��vel extender o pool l��gico %(pool)s. Detalhes: %(err)s"
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr ""
+"O par��metro discos somente pode ser atualizado para storage pool l��gicos."
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "O nome do adaptador SCSI host deve ser um texto"
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "O storage pool kimchi_isos �� reservado para uso interno"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"N��o foi poss��vel ativar o storage pool NFS %(name)s. Servidor NFS %(server)s "
+"est�� inacess��vel."
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"N��o foi poss��vel desativar o storage pool NFS %(name)s. Servidor NFS "
+"%(server)s est�� inacess��vel."
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+"N��o foi poss��vel desativar o pool %(name)s uma vez que ele est�� associado "
+"com algum dos modelos"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr ""
+"N��o foi poss��vel remover o pool %(name)s uma vez que ele est�� associado com "
+"algum dos modelos"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+"Um grupo de volume chamado '%(name)s' j�� existe. Por favor, escolha outro "
+"nome para criar o pool l��gico."
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+"N��o foi poss��vel atualizar a base de dados com informa����es de mais ISOs "
+"devido a um erro: %(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "Volume de storage %(name)s j�� existe"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr "Volume de storage %(name)s n��o existe no storage pool %(pool)s"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+"N��o foi poss��vel criar o storaget volume %(volume)s pois o storage pool "
+"%(pool)s n��o est�� ativo"
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr "Especifique %(item)s para poder criar o volume %(volume)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr ""
+"N��o foi poss��vel listar volumes pois o storage pool %(pool)s n��o est�� ativo"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr ""
+"N��o foi poss��vel criar o volume %(name)s no storage pool %(pool)s. Detalhes: "
+"%(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel listar os volumes do storage pool %(pool)s. Detalhes: "
+"%(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel limpar o volume %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel remover o volume %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel redimensionar o volume %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr "Storage do tipo %(type)s n��o suporta cria����o ou remo����o de volume"
+
+msgid "Storage volume name must be a string"
+msgstr "Nome do volume deve ser um texto"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "Aloca����o do volume de storage deve ser um n��mero inteiro"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+"Formato de volume de storage inv��lido. Formatos v��lidos: bochs, cloop, cow, "
+"dmg, qcow, qcow2, qed, raw, vmdk, vpc."
+
+msgid "Storage volume requires a volume name"
+msgstr "Volume de storage requer um nome"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+"N��o foi poss��vel atualizar a base de dados com informa����es de volume de "
+"storage devido a um erro: %(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr "Somente um par��metro %(param)s pode ser especificado"
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr "Criar um volume a partir de %(param)s n��o �� suportado"
+
+msgid "Storage volume capacity must be an integer number."
+msgstr "A capacidade do storage volume deve ser um n��mero inteiro."
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+"URL para o storage volume deve ser http://, https://, ftp:// ou ftps://."
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr "Erro ao acessar arquivo %(url)s. Por favor, verifique isso."
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+"N��o foi poss��vel clonar o volume de storage '%(name)s' no pool '%(pool)s'. "
+"Detalhes: %(err)s"
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "Interface %(name)s n��o existe"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "Rede %(name)s j�� existe"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "Rede %(name)s n��o existe"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr ""
+"A subrede %(subnet)s especificada para a rede %(network)s n��o �� v��lida."
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr "Especifique uma interface de rede para criar a rede de bridge %(name)s"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "N��o foi poss��vel remover a rede ativa %(name)s"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr ""
+"A interface %(iface)s especificada para a rede %(network)s j�� est�� em uso"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr "Interface deve ser 'bare NIC', 'bonding' ou 'dispositivo de bridge'."
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel criar a rede %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "N��o foi poss��vel encontrar um endere��o IP livre para a rede '%(name)s'"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr "A interface %(iface)s j�� existe"
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "Tipos de rede suportados s��o isolada, NAT e bridge"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+"Subrede deve ser um texto com endere��o IP e prefixo, ou m��scara de rede"
+
+msgid "Network interface must be a string"
+msgstr "Interface de rede deve ser um texto"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "ID da rede VLAN deve ser um inteiro entre 1 e 4094"
+
+msgid "Specify name and type to create a Network"
+msgstr "Especifique o nome e o tipo para criar uma rede"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+"N��o foi poss��vel desativar a rede %(name)s. H�� alguma m��quina virtual "
+"%(vms)s e/ou modelo associados a esta rede."
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+"N��o foi poss��vel desativar a rede %(name)s. H�� alguma m��quina virtual "
+"%(vms)s e/ou modelo associados a esta rede."
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr ""
+"Dispositivo da bridge %(name)s n��o pode ser um dispositivo vinculado a uma "
+"VLAN."
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "N��o foi poss��vel ativar a interface %(iface)s: %(err)s."
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+"N��o foi poss��vel ativar a interface %(iface)s. Por favor, verifique o status "
+"da conex��o f��sica."
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr "N��o foi poss��vel iniciar a rede %(name)s. Detalhes: %(err)s"
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "Relat��rio de debug %(name)s n��o existe"
+
+msgid "Debug report tool not found in system"
+msgstr "Ferramenta de relat��rio de debug n��o encontrada no sistema"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr ""
+"N��o foi poss��vel criar o relat��rio de debug %(name)s. Detalhes: %(err)s."
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr "N��o foi poss��vel encontrar nenhum relat��rio com o nome %(name)s"
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel gerar o relat��rio de debug %(name)s. Detalhes: %(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr "Voc�� deve dar um nome para o arquivo do relat��rio de debug."
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+"Nome do relat��rio deve ser um texto. Somente letras, digitos, underscore "
+"('_') e h��fem ('-') s��o permitidos."
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+"O relat��rio de debug com o nome especificado \"%(name)s\" j�� existe. Por "
+"favor, use outro nome."
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "Servidor de storage %(server)s n��o foi usado pelo Kimchi"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "Distribui����o '%(name)s' n��o existe"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "Parti����o %(name)s n��o existe no host"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr ""
+"N��o foi poss��vel desligar o host uma vez que h�� m��quinas virtuais ligadas"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr ""
+"N��o foi poss��vel resetar o host uma vez que h�� m��quinas virtuais ligadas"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "Dispositivo de n�� '%(name)s' n��o encontrado"
+
+msgid "Conflicting flag filters specified."
+msgstr "Foram especificados filtros de flag com conflito."
+
+msgid "No packages marked for update"
+msgstr "Nenhum pacote marcado para atualiza����o"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "Pacote %(name)s n��o est�� marcado para atualiza����o."
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr "Erro ao buscar pacotes marcados para atualiza����o. Detalhes: %(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "N��o h�� gerenciador de pacotes compat��vel para este sistema."
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "URI %(uri)s inv��lida"
+
+msgid "Unable to choose a virtual machine name"
+msgstr "N��o foi poss��vel escolher um nome para a m��quina virtual"
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "Tipo de storage inv��lido. Tipos suportados: 'cdrom', 'disco'"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+"O caminho '%(value)s' n��o �� um caminho local/remoto v��lido para este "
+"dispositivo"
+
+msgid "Only CDROM path can be update."
+msgstr "Apenas o caminho do CD-ROM pode ser atualizado."
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr "O disco %(dev_name)s n��o existe na m��quina virtual %(vm_name)s"
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr "Erro ao criar novo dispositivo de storage: %(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr "Erro ao atualizar dispositivo de storage: %(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr "Erro ao remover dispositivo de storage: %(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr "Dispositivo IDE hot plug n��o �� suportado"
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr ""
+"Especifique o tipo e o caminho, ou o tipo e o pool/volume, para adicionar um "
+"novo disco da m��quina virtual"
+
+msgid "Specify path to update virtual machine disk"
+msgstr "Especifique o caminho para atualizar o disco da m��quina virtual"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+"Limita����o do tipo do controlador %(type)s de %(limit)s dispositivos foi "
+"alcan��ada"
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+"N��o foi poss��vel buscar informa����es do caminho do disco para o pool/volume "
+"dado: %(error)s"
+
+msgid "Volume already in use by other virtual machine."
+msgstr "Volume j�� em uso por outra m��quina virtual."
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr ""
+"Somente um caminho ou pool/volume pode ser especificado para adicionar um "
+"novo disco da m��quina virtual."
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+"Volume escolhido com formato %(format)s n��o se enquadra no tipo de storage "
+"%(type)s"
+
+msgid "YUM Repository ID must be one word only string."
+msgstr "ID do reposit��rio YUM deve ser apenas uma palavra."
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "URL do reposit��rio deve ser uma URL http://, ftp:// ou file://."
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+"Configura����o do reposit��rio �� um dicion��rio com valores espec��ficos de "
+"acordo com o tipo do reposit��rio."
+
+msgid "Distribution to DEB repository must be a string"
+msgstr "Distribui����o para o reposit��rio DEB deve ser um texto"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "Componentes para o reposit��rio DEB deve ser um array"
+
+msgid "Components to DEB repository must be a string"
+msgstr "Componentes para o reposit��rio DEB deve ser um texto"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "Nome do reposit��rio YUM deve ser um texto."
+
+msgid "GPG check must be a boolean value."
+msgstr "Verifica����o de GPG deve ser um valor booleano."
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr ""
+"Chave GPG deve ser uma URL apontando para o arquivo no formato ASCII-armor."
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "N��o foi poss��vel atualizar o reposit��rio %(repo_id)s."
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "Reposit��rio %(repo_id)s n��o existe."
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr ""
+"Ferramenta de gerenciamento de reposit��rio n��o foi reconhecida no seu "
+"sistema."
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "Reposit��rio %(repo_id)s j�� est�� habilitado."
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "Reposit��rio %(repo_id)s j�� est�� desabilitado."
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "N��o foi poss��vel remover o reposit��rio %(repo_id)s."
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr ""
+"N��o foi poss��vel gravar o arquivo de configura����o do reposit��rio "
+"%(repo_file)s"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr ""
+"Especificar o reposit��rio de distribui����o para poder criar o reposit��rio DEB."
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "N��o foi poss��vel habilitar o reposit��rio %(repo_id)s."
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "N��o foi poss��vel desabilitar o reposit��rio %(repo_id)s."
+
+msgid "YUM Repository ID already exists"
+msgstr "ID do reposit��rio YUM j�� existe"
+
+msgid "YUM Repository name must be a string"
+msgstr "Nome do reposit��rio YUM deve ser um texto"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "N��o �� poss��vel listar os reposit��rios. Detalhes: '%(err)s'"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr ""
+"N��o foi poss��vel carregar as informa����es do reposit��rio. Detalhes: '%(err)s'"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "N��o foi poss��vel adicionar o reposit��rio. Detalhes: '%(err)s'"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "N��o foi poss��vel remover o reposit��rio. Detalhes: '%(err)s'"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+"Itens de configura����o '%(items)s' n��o s��o suportados pelo gerenciador de "
+"reposit��rios."
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+"A m��quina virtual '%(vm)s' deve estar parada antes de criar um snapshot dela"
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+"N��o foi poss��vel criar o snapshot '%(name)s' na m��quina virtual '%(vm)s'. "
+"Detalhes: %(err)s"
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr "O snapshot '%(name)s' n��o existe na m��quina virtual '%(vm)s'."
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+"N��o foi poss��vel recuperar o snapshot '%(name)s' da m��quina virtual "
+"'%(vm)s'. Detalhes: %(err)s"
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+"N��o foi poss��vel listar os snapshots da m��quina virtual '%(vm)s'. Detalhes: "
+"%(err)s"
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+"N��o foi poss��vel remover o snapshot '%(name)s' da m��quina virtual '%(vm)s'. "
+"Detalhes: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+"N��o foi poss��vel recuperar o snapshot atual da m��quina virtual '%(vm)s'. "
+"Detalhes: %(err)s."
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+"N��o foi poss��vel reverter a m��quina virtual '%(vm)s' para o snapshot "
+"'%(name)s'. Detalhes: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+"N��o foi poss��vel criar o snapshot para a m��quina virtual '%(vm)s' porque ela "
+"cont��m discos no formato '%(format)s'; somente 'qcow2' �� suportado."
+
+msgid "The number of vCPUs is too large for this system."
+msgstr "O n��mero de VCPUs �� grande demais para esse sistema."
+
+msgid "Invalid vCPU/topology combination."
+msgstr "Combina����o inv��lida de VCPU/topologia."
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr "Este host (ou configura����o atual) n��o permite topologia de CPU."
+
+msgid "ERROR CODE"
+msgstr "C��DIGO DE ERRO"
+
+msgid "REASON"
+msgstr "MOTIVO"
+
+msgid "STACK"
+msgstr "PILHA"
+
+msgid "Go to Homepage"
+msgstr "Ir para a P��gina Inicial"
+
+msgid "Create a New Virtual Machine"
+msgstr "Criar nova M��quina Virtual"
+
+msgid "Virtual Machine Name"
+msgstr "Nome da M��quina Virtual"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+"O nome usado para identificar a m��quina virtual. Se ele for omitido, a "
+"escolha ser�� baseada no modelo selecionado."
+
+msgid "Template"
+msgstr "Modelo"
+
+msgid "Please create a template first."
+msgstr "Por favor, crie um modelo primeiro."
+
+msgid "Create a Template"
+msgstr "Criar um Modelo"
+
+msgid "Please choose a template."
+msgstr "Por favor, escolha um modelo."
+
+msgid "OS"
+msgstr "Sistema Operacional"
+
+msgid "OS Version"
+msgstr "Vers��o do Sistema Speracional"
+
+msgid "CPUS"
+msgstr "CPUS"
+
+msgid "Memory"
+msgstr "Mem��ria"
+
+msgid "Create"
+msgstr "Criar"
+
+msgid "Creating..."
+msgstr "Criando..."
+
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgid "Edit Guest"
+msgstr "Editar Guest"
+
+msgid "General"
+msgstr "Geral"
+
+msgid "Storage"
+msgstr "Storage"
+
+msgid "Interface"
+msgstr "Interface"
+
+msgid "Permission"
+msgstr "Permiss��o"
+
+msgid "Host PCI Device"
+msgstr "Dispositivo de host PCI"
+
+msgid "Snapshot"
+msgstr "Snapshot"
+
+msgid "Name"
+msgstr "Nome"
+
+msgid "CPUs"
+msgstr "CPUs"
+
+msgid "Memory (MB)"
+msgstr "Mem��ria (MB)"
+
+msgid "Icon"
+msgstr "��cone"
+
+msgid "Device"
+msgstr "Dispositivo"
+
+msgid "Path"
+msgstr "Caminho"
+
+msgid "Network"
+msgstr "Rede"
+
+msgid "Type"
+msgstr "Tipo"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr "Usu��rios e grupos de sistema dispon��veis"
+
+msgid "Selected system users and groups"
+msgstr "Usu��rios e grupos de sistema selecionados"
+
+msgid "User"
+msgstr "Usu��rio"
+
+msgid "All"
+msgstr "Todos"
+
+msgid "To Add"
+msgstr "Para adicionar"
+
+msgid "Added"
+msgstr "Adicionado"
+
+msgid "filter"
+msgstr "filtro"
+
+msgid "Product"
+msgstr "Produto"
+
+msgid "Vendor"
+msgstr "Vendor"
+
+msgid "Created"
+msgstr "Criado"
+
+msgid "Save"
+msgstr "Salvar"
+
+msgid "Replace"
+msgstr "Substituir"
+
+msgid "Detach"
+msgstr "Remover"
+
+msgid "revert"
+msgstr "Reverter"
+
+msgid "Start"
+msgstr "Iniciar"
+
+msgid "Reset"
+msgstr "Reiniciar"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr "For��ar desligamento"
+
+msgid "Actions"
+msgstr "A����es"
+
+msgid "Connect"
+msgstr "Conectar"
+
+msgid "Clone"
+msgstr "Clonar"
+
+msgid "Edit"
+msgstr "Editar"
+
+msgid "Shut Down"
+msgstr "Desligar"
+
+msgid "Delete"
+msgstr "Remover"
+
+msgid "CPU"
+msgstr "CPU"
+
+msgid "Disk I/O"
+msgstr "Disco E/S"
+
+msgid "Network I/O"
+msgstr "Rede E/S"
+
+msgid "Livetile"
+msgstr "Tela ao vivo"
+
+msgid "No guests found."
+msgstr "Nenhum guest encontrado."
+
+msgid "Add a Storage Device to VM"
+msgstr "Adicionar um dispositivo de storage �� VM"
+
+msgid "Device Type"
+msgstr "Tipo do Dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"O tipo do dispositivo. Atualmente, \"cdrom\" e \"disco\" s��o suportados."
+
+msgid "Storage Pool"
+msgstr "Storage Pool"
+
+msgid "Storage pool which volume located in"
+msgstr "Storage pool no qual o volume est�� localizado"
+
+msgid "Storage Volume"
+msgstr "Volume de storage"
+
+msgid "Storage volume to be attached"
+msgstr "Volume de storage a ser adicionado"
+
+msgid "File Path"
+msgstr "Caminho do Arquivo"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "O caminho do arquivo ISO para o CDROM no servidor."
+
+msgid "Attach"
+msgstr "Adicionar"
+
+msgid "Shut down"
+msgstr "Desligar"
+
+msgid "Restart"
+msgstr "Reiniciar"
+
+msgid "Basic Information"
+msgstr "Informa����es b��sicas"
+
+msgid "OS Distro"
+msgstr "Distribui����o"
+
+msgid "OS Code Name"
+msgstr "Nome-c��digo do sistema operacional"
+
+msgid "Processor"
+msgstr "Processador"
+
+msgid "CPU(s)"
+msgstr "CPU(s)"
+
+msgid "System Statistics"
+msgstr "Estat��sticas do sistema"
+
+msgid "Software Updates"
+msgstr "Atualiza����es de software"
+
+msgid "Update Progress"
+msgstr "Progresso da atualiza����o"
+
+msgid "Repositories"
+msgstr "Reposit��rios"
+
+msgid "Debug Reports"
+msgstr "Relat��rios de Debug"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr ""
+"O usu��rio ou senha inseridos est��o incorretos. Por favor, tente novamente."
+
+msgid "This field is required."
+msgstr "Esse campo �� obrigat��rio."
+
+msgid "Log in"
+msgstr "Entrar"
+
+msgid "Logging in..."
+msgstr "Entrando..."
+
+msgid "Host"
+msgstr "Host"
+
+msgid "Guests"
+msgstr "Guests"
+
+msgid "Templates"
+msgstr "Modelos"
+
+msgid "Failed to get application configuration"
+msgstr "N��o foi poss��vel carregar as configura����es da aplica����o"
+
+msgid "This is not a valid Linux path"
+msgstr "Este n��o �� um caminho v��lido no Linux"
+
+msgid "This is not a valid URL."
+msgstr "Essa n��o �� uma URL v��lida."
+
+msgid "No such data available."
+msgstr "N��o h�� dados dispon��veis."
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"N��o foi poss��vel contactar o sistema host. Verique se o sistema do host est�� "
+"ligado e se voc�� possui conectividade de rede com ele. Resposta da "
+"requisi����o HTTP %1. "
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "Confirma����o de remo����o"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Confirm"
+msgstr "Confirmar"
+
+msgid "Warning"
+msgstr "Aviso"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "Carregando..."
+
+msgid "An error occurred while retrieving system information."
+msgstr "Ocorreu um erro ao recuperar informa����es do sistema."
+
+msgid "Retry"
+msgstr "Tentar novamente"
+
+msgid "Detailed message:"
+msgstr "Mensagem detalhada:"
+
+msgid "No ISO found"
+msgstr "Nenhuma ISO encontrada"
+
+msgid "This is not a valid ISO file."
+msgstr "Esse n��o �� um arquivo ISO v��lido."
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "Isso vai levar um longo tempo. Deseja continuar?"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "O modelo vai ser permanentemente removido. Deseja continuar?"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+"N��o foi poss��vel desligar o sistema porque algumas m��quinas virtuais est��o "
+"ligadas!"
+
+msgid "Max:"
+msgstr "M��ximo:"
+
+msgid "Utilization"
+msgstr "Utiliza����o"
+
+msgid "Available"
+msgstr "Dispon��vel"
+
+msgid "Read Rate"
+msgstr "Taxa de leitura"
+
+msgid "Write Rate"
+msgstr "Taxa de escrita"
+
+msgid "Received"
+msgstr "Recebido"
+
+msgid "Sent"
+msgstr "Enviado"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+"Desligar ou reiniciar o host causar�� perda de trabalho que n��o foi salvo. "
+"Continuar o processo de desligar/reiniciar?"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"Reposit��rio ser�� removido permanentemente e n��o poder�� ser recuperado. "
+"Deseja continuar?"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Base URL"
+msgstr "URL Base"
+
+msgid "Is Mirror"
+msgstr "�� mirror"
+
+msgid "URL Args"
+msgstr "Argumentos da URL"
+
+msgid "Enabled"
+msgstr "Ativado"
+
+msgid "GPG Check"
+msgstr "Verifica����o GPG"
+
+msgid "GPG Key"
+msgstr "Chave GPG"
+
+msgid "Add"
+msgstr "Adicionar"
+
+msgid "Remove"
+msgstr "Remover"
+
+msgid "Enable"
+msgstr "Ativar"
+
+msgid "Disable"
+msgstr "Desativar"
+
+msgid "Package Name"
+msgstr "Nome do pacote"
+
+msgid "Version"
+msgstr "Vers��o"
+
+msgid "Architecture"
+msgstr "Arquitetura"
+
+msgid "Repository"
+msgstr "Reposit��rio"
+
+msgid "Update All"
+msgstr "Atualizar todos"
+
+msgid "Updating..."
+msgstr "Atualizando..."
+
+msgid "Failed to retrieve packages update information."
+msgstr "N��o foi poss��vel recuperar as informa����es de atualiza����o de pacoates."
+
+msgid "Failed to update package(s)."
+msgstr "Erro ao atualizar pacote(s)."
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"Relat��rio de debug ser�� permanentemente removido e n��o poder�� ser "
+"recuperado. Deseja continuar?"
+
+msgid "Generated Time"
+msgstr "Tempo gerado"
+
+msgid "Generate"
+msgstr "Gerar"
+
+msgid "Generating..."
+msgstr "Gerando..."
+
+msgid "Rename"
+msgstr "Renomear"
+
+msgid "Download"
+msgstr "Baixar"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr ""
+"Nome do relat��rio deve apenas conter letras, n��meros, underscore ('_') e/ou "
+"h��fen ('-')."
+
+msgid "Pending..."
+msgstr "Pendente..."
+
+msgid "Report name is the same as the original one."
+msgstr "Nome do relat��rio �� o mesmo que o original."
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+"A m��quina virtual vai ser removida com todos seus discos. Essa opera����o �� "
+"irrevers��vel. Deseja continuar?"
+
+msgid "Power off Confirmation"
+msgstr "Confirma����o de desligamento for��ado"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+"Essa a����o pode produzir resultados n��o desej��veis, como por exemplo cache de "
+"disco n��o-atualizado no guest. Deseja continuar?"
+
+msgid "Reset Confirmation"
+msgstr "Confirma����o de reinicializa����o"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+"Existe um risco de perda de dados causado pela reinicializa����o sem o "
+"desligamento do sistema operacional do guest. Deseja continuar?"
+
+msgid "Shut Down Confirmation"
+msgstr "Confirma����o de desligamento"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr ""
+"O sistema operacional do guest pode ignorar essa requisi����o. Deseja "
+"continuar?"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr "Confirma����o de Remo����o da M��quina Virtual"
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+"Essa m��quina virtual n��o �� persistente. O desligamento ir�� remov��-la. Deseja "
+"continuar?"
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+"Quando o guest de destino tiver volumes SCSI ou iSCSI, eles ser��o clonados "
+"no storage pool padr��o. O mesmo vai acontecer quando o pool de destino n��o "
+"tiver espa��o suficiente para clonar os volumes. Voc�� deseja continuar?"
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"Esse CDROM ser�� desconectado permanentemente e voc�� pode reconect��-lo. "
+"Deseja continuar a remo����o? "
+
+msgid "Attaching..."
+msgstr "Adicionando..."
+
+msgid "Replacing..."
+msgstr "Substituindo..."
+
+msgid "Successfully attached!"
+msgstr "Adicionado com sucesso!"
+
+msgid "Successfully replaced!"
+msgstr "Substitu��do com sucesso!"
+
+msgid "Successfully detached!"
+msgstr "Removido com sucesso!"
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+"Esse disco ser�� desconectado permanentemente e voc�� pode reconect��-lo. "
+"Deseja continuar a remo����o? "
+
+msgid "interface:"
+msgstr "interface:"
+
+msgid "address:"
+msgstr "endere��o:"
+
+msgid "link_type:"
+msgstr "tipo do link:"
+
+msgid "block:"
+msgstr "bloco:"
+
+msgid "drive_type:"
+msgstr "tipo do drive:"
+
+msgid "model:"
+msgstr "modelo:"
+
+msgid "Affected devices:"
+msgstr "Dispositivos afetados:"
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "ID da VLAN deve ser um n��mero entre 1 e 4094."
+
+msgid "unavailable"
+msgstr "indispon��vel"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+"Esta a����o ir�� interromper a conectividade da rede para qualquer m��quina "
+"virtual que depende dessa rede."
+
+msgid "Create a network"
+msgstr "Criar uma rede"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"Essa rede n��o �� persistente. Ao inv��s de parar, essa a����o ir�� remov��-la "
+"permantemente. Deseja continuar?"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr "O storage pool vai ser permanentemente removido. Deseja continuar?"
+
+msgid "This storage pool is empty."
+msgstr "Esse storage pool est�� vazio."
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+"Isso formatar�� seu disco e voc�� perder�� toda informa����o, voc�� tem certeza "
+"que quer continuar?"
+
+msgid "SCSI Fibre Channel"
+msgstr "SCSI Fibre Channel"
+
+msgid "No SCSI adapters found."
+msgstr "Nenhum adaptador SCSI encontrado."
+
+msgid "Loading iSCSI targets..."
+msgstr "Carregando iSCSI targets..."
+
+msgid "No iSCSI found. Please input one."
+msgstr "Nenhum iSCSI encontrado. Por favor, forne��a um."
+
+msgid "Failed to load iSCSI targets."
+msgstr "Erro ao carregar iSCSI targets."
+
+msgid "The storage pool name can not be blank."
+msgstr "O nome do storage pool n��o pode ser vazio."
+
+msgid "The storage pool path can not be blank."
+msgstr "O caminho do storage pool n��o pode ser vazio."
+
+msgid "NFS server mount path can not be blank."
+msgstr "Caminho de montagem do servidor de NFS n��o pode ser vazio."
+
+msgid "Invalid NFS mount path."
+msgstr "Caminho de montagem do NFS inv��lido."
+
+msgid "No logical device selected."
+msgstr "Nenhum dispositivo l��gico selecionado."
+
+msgid "The iSCSI target can not be blank."
+msgstr "O alvo iSCSI n��o pode ser vazio."
+
+msgid "Server name can not be blank."
+msgstr "Nome do servidor n��o pode ser vazio."
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr "Este n��o �� um nome ou IP de servidor v��lido. Por favor, modifique-o."
+
+msgid "Looking for available partitions ..."
+msgstr "Procurando por parti����es dispon��veis ..."
+
+msgid "No available partitions found."
+msgstr "Nenhuma parti����o dispon��vel encontrada."
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"O storage pool n��o �� persistente. Ao inv��s de desativar, essa a����o vai "
+"remov��-lo permanentemente. Deseja continuar?"
+
+msgid "Unable to retrieve partitions information."
+msgstr "N��o foi poss��vel recuperar as informa����es das parti����es."
+
+msgid "In progress..."
+msgstr "Em progresso..."
+
+msgid "Failed!"
+msgstr "Falhou!"
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+"Caminho do CDROM precisa ser um caminho local v��lido e n��o pode ser vazio."
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "Pool ou volume do disco n��o pode ser vazio."
+
+#, fuzzy
+msgid "Filter"
+msgstr "filtro"
+
+msgid "Network Name"
+msgstr "Nome da rede"
+
+msgid "State"
+msgstr "Estado"
+
+msgid "Network Type"
+msgstr "Tipo da rede"
+
+msgid "Address Space"
+msgstr "Espa��o de endere��o"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr "O nome n��o deve conter '/' and '\"'."
+
+msgid "Isolated: no external network connection"
+msgstr "Isolada: nenhuma conex��o externa"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT: somente conex��o de rede f��sica de sa��da"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr ""
+"Bridged: M��quinas virtuais est��o conectadas diretamente com a rede f��sica"
+
+msgid "(No interfaces found)"
+msgstr "(Nenhuma interface encontrada)"
+
+msgid "Destination"
+msgstr "Destino"
+
+msgid "Enable VLAN"
+msgstr "Habilitar VLAN"
+
+msgid "VLAN ID"
+msgstr "ID da VLAN"
+
+msgid "Stop"
+msgstr "Parar"
+
+msgid "Generate a New Debug Report"
+msgstr "Gerar um novo Relat��rio de Debug"
+
+msgid "Report Name"
+msgstr "Nome do Relat��rio"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"O nome usado para identificar o relat��rio. Se omitido, um nome ser�� "
+"escolhido baseado no hor��rio atual. O nome pode conter: letras, n��meros, "
+"underscore ('_') e h��fen ('-')."
+
+msgid "Rename a Debug Report"
+msgstr "Renomear um Relat��rio de Debug"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"O nome usado para identificar o relat��rio. O nome pode conter: letras, "
+"d��gitos e h��fen (\"-\")."
+
+msgid "Submit"
+msgstr "Enviar"
+
+msgid "Add a Repository"
+msgstr "Adicionar um Reposit��rio"
+
+msgid "Identifier"
+msgstr "Identificador"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "Uma ��nica palavra, identificador ��nico para o reposit��rio."
+
+msgid "Textual name for the repository."
+msgstr "Nome textual para o reposit��rio."
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "Campo Obrigat��rio"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "URL para o reposit��rio. Protocolos suportados s��o http, ftp e file."
+
+msgid "Repository is a mirror"
+msgstr "Reposit��rio �� um mirror"
+
+msgid "Distribution"
+msgstr "Distribui����o"
+
+msgid "Distribution of the DEB repository."
+msgstr "Distribui����o para o reposit��rio DEB."
+
+msgid "Components"
+msgstr "Componentes"
+
+msgid "List of components in DEB repository."
+msgstr "Lista de componentes para o reposit��rio DEB."
+
+msgid "Edit Repository"
+msgstr "Editar Reposit��rio"
+
+msgid "Mirror List URL"
+msgstr "URL para a lista de mirror"
+
+msgid "Yes"
+msgstr "Sim"
+
+msgid "No"
+msgstr "N��o"
+
+msgid "Capacity"
+msgstr "Capacidade"
+
+msgid "Allocated"
+msgstr "Alocado"
+
+msgid "Location"
+msgstr "Localiza����o"
+
+msgid "Device path"
+msgstr "Caminho do dispositivo"
+
+msgid "active"
+msgstr "ativo"
+
+msgid "inactive"
+msgstr "inativo"
+
+msgid "Deactivate"
+msgstr "Desativar"
+
+msgid "Activate"
+msgstr "Ativar"
+
+msgid "Add Volume"
+msgstr "Adicionar volume"
+
+msgid "Extend"
+msgstr "Aumentar"
+
+msgid "Undefine"
+msgstr "Indefinir"
+
+msgid "Format"
+msgstr "Formato"
+
+msgid "Allocation"
+msgstr "Aloca����o"
+
+msgid "Define a New Storage Pool"
+msgstr "Definir novo Storage Pool"
+
+msgid "Storage Pool Name"
+msgstr "Nome do Storage Pool"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr "O nome usado para identificar o storage pool e n��o deve ser vazio."
+
+msgid "Storage Pool Type"
+msgstr "Tipo do Storage Pool"
+
+msgid "Storage Path"
+msgstr "Caminho do storage"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr ""
+"O caminho do Storage Pool. Cada Storage Pool deve ter um caminho ��nico."
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr ""
+"O Kimchi vai tentar criar o diret��rio se ainda n��o existir no seu sistema."
+
+msgid "NFS Server IP"
+msgstr "IP do servidor NFS"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+"IP ou hostname do servidor NFS. Pode ser inserido ou escolhido do hist��rico."
+
+msgid "NFS Path"
+msgstr "Caminho do NFS"
+
+msgid "The NFS exported path on NFS server."
+msgstr "O caminho exportado do servidor NFS."
+
+msgid "iSCSI Server"
+msgstr "Servidor iSCSI"
+
+msgid "Server"
+msgstr "Servidor"
+
+msgid "Port"
+msgstr "Porta"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "IP ou hostname do servidor iSCSI. N��o deve ser vazio."
+
+msgid "Target"
+msgstr "Alvo"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "O alvo iSCSI no servidor iSCSI"
+
+msgid "Add iSCSI Authentication"
+msgstr "Adicionar as credenciais do iSCSI"
+
+msgid "iSCSI Authentication"
+msgstr "Credenciais do iSCSI"
+
+msgid "User Name"
+msgstr "Usu��rio"
+
+msgid "Password"
+msgstr "Senha"
+
+msgid "SCSI Adapter"
+msgstr "Adaptador SCSI"
+
+msgid "Please, wait..."
+msgstr "Por favor, aguarde..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr "Adicionar um volume ao Storage Pool"
+
+msgid "Fetch from remote URL"
+msgstr "Fazer download de uma URL remota"
+
+msgid "Enter the remote URL here."
+msgstr "Digite a URL remota aqui."
+
+msgid "Upload a file"
+msgstr "Fazer upload de um arquivo"
+
+msgid "Choose the file you want to upload."
+msgstr "Escolha o arquivo que voc�� quer fazer upload."
+
+msgid "Add Template"
+msgstr "Adicionar Modelo"
+
+msgid "Where is the source media for this template? "
+msgstr "Onde est�� a m��dia de origem desse modelo? "
+
+msgid "Local ISO Image"
+msgstr "Imagem ISO Local"
+
+msgid "Local Image File"
+msgstr "Arquivo de Imagem Local"
+
+msgid "Remote ISO Image"
+msgstr "Imagem ISO Remota"
+
+msgid "Search ISOs"
+msgstr "Procurar ISOs"
+
+msgid "The following ISOs are available:"
+msgstr "As seguintes ISOs est��o dispon��veis:"
+
+msgid "OS: "
+msgstr "Sistema Operacional: "
+
+msgid "Version: "
+msgstr "Vers��o: "
+
+msgid "Size: "
+msgstr "Tamanho: "
+
+msgid "Search more ISOs"
+msgstr "Procurar por mais ISOs"
+
+msgid "Create Templates from Selected ISO"
+msgstr "Criar Modelos a partir das ISOs selecionadas"
+
+msgid "I want to use a specific ISO file"
+msgstr "Eu quero usar um arquivo ISO espec��fico"
+
+msgid "Loading default remote ISOs ..."
+msgstr "Carregando ISOs remotas ..."
+
+msgid "Arch: "
+msgstr "Arquitetura: "
+
+msgid "I want to use a custom URL"
+msgstr "Eu quero usar uma URL personalizada"
+
+msgid "Edit Template"
+msgstr "Editar Modelo"
+
+msgid "CDROM"
+msgstr "CD-ROM"
+
+msgid "Image File"
+msgstr "Arquivo de imagem"
+
+msgid "Graphics"
+msgstr "Gr��ficos"
+
+msgid "Disk(GB)"
+msgstr "Disco (GB)"
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "Quantidade de CPUs"
+
+msgid "Manually set CPU topology"
+msgstr "Configurar manualmente a topologia de CPU"
+
+msgid "Cores"
+msgstr "Cores"
+
+msgid "Threads"
+msgstr "Threads"
+
+msgid "No templates found."
+msgstr "Nenhum modelo encontrado."
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "M��todo de remo����o n��o �� permitido em %(resource)s"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s n��o implementa m��todo de atualiza����o"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "M��todo de cria����o n��o �� permitido em %(resource)s"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "N��o �� poss��vel realizar a leitura da requisi����o do JSON"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "Essa API suporta apenas JSON"
+
+#~ msgid "Parameters does not match requirement in schema: %(err)s"
+#~ msgstr "Par��metros n��o correspondem �� especifica����o do esquema: %(err)s"
+
+#~ msgid "You don't have permission to perform this operation."
+#~ msgstr "Voc�� n��o tem permiss��o para executar esta opera����o."
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "Datastore n��o est�� inicializado no objeto modelo."
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "N��o foi poss��vel iniciar a tarefa devido a um erro: %(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr ""
+#~ "Autentica����o falhou para o usu��rio '%(username)s'. [C��digo de erro: "
+#~ "%(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "Voc�� n��o est�� autorizado para acessar o Kimchi"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "Especifique %(item)s para autenticar no Kimchi"
+
+#~ msgid "Invalid LDAP configuration: %(item)s : %(value)s"
+#~ msgstr "Configura����es LDAP inv��lidas: %(item)s : %(value)s"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "N��o foi poss��vel encontrar %(item)s no datastore"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr ""
+#~ "Fim do limite de tempo ao rodar comando '%(cmd)s' ap��s %(seconds)s "
+#~ "segundos"
+
+#~ msgid "Invalid data value '%(value)s'"
+#~ msgstr "Valor inv��lido '%(value)s'"
+
+#~ msgid "Invalid data unit '%(unit)s'"
+#~ msgstr "Unidade inv��lida '%(unit)s'"
+
+#~ msgid "Peers"
+#~ msgstr "Peers"
+
+#~ msgid "Searching"
+#~ msgstr "Procurando"
+
+#~ msgid "No peers found."
+#~ msgstr "Nenhum peer encontrado."
+
+#~ msgid "Help"
+#~ msgstr "Ajuda"
+
+#~ msgid "About"
+#~ msgstr "Sobre"
+
+#~ msgid "Log out"
+#~ msgstr "Sair"
+
+#~ msgid "Version:"
+#~ msgstr "Vers��o:"
+
+#~ msgid "Session timeout, please re-login."
+#~ msgstr ""
+#~ "Fim do limite do tempo da sess��o, por favor se autentique novamente."
diff --git a/plugins/gingerbase/po/ru_RU.po b/plugins/gingerbase/po/ru_RU.po
new file mode 100644
index 0000000..f466a2b
--- /dev/null
+++ b/plugins/gingerbase/po/ru_RU.po
@@ -0,0 +1,2199 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2014-08-28 17:32+0000\n"
+"Last-Translator: Aline Manera <aline.manera(a)gmail.com>\n"
+"Language-Team: Russian (http://www.transifex.com/projects/p/kimchi/language/"
+"ru/)\n"
+"Language: ru_RU\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr "������������ ������������������ �������������� ������������������. ����������������: %(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr "������������ ������������������ �������������������� �� �������������� ���������������������� ������ %(device)s."
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "���� ������������ �������� ���������������� ����: %(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr ""
+"������������ �������������� ���������� ���������������� ���� %(filename)s. ������������������, ������ ������ �������� JSON."
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr "���� �������������� ���������� �� �������������� %(portal)s ���������� iSCSI. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "���� �������������� ���������� �� �������������� %(target)s ���������� iSCSI %(host)s"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "�������� ISO %(filename)s ���� ����������������������"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr ""
+"�������� ISO %(filename)s ���� ���������������� �������������������� ���������������������� ������������ El Torito"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "������������������������ ������������ ���������������� El Torito �� ������������ ISO %(filename)s"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "������������������������ ������������������ ���������������� El Torito �� ������������ ISO %(filename)s"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr "���������������������� ������ �������� ������ ���������������� �������� �� ������������ ISO %(filename)s"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr "���������������� ������������ ���������������������� �������� �� ������������ ISO %(filename)s"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"�� ���������������������� ������ �������� �������������� ������ �������������������������� ���������� ������������ ISO "
+"%(filename)s. ���������������������� ������ �� �������������� /var/lib/libvirt, ���������������� "
+"�������������������� ���� ���������� �� ������������ ���������������� �������������� ������ ������������������������ %(user)s, "
+"�������� ������ ����������������, ���������������� %(user)s �� ������������ �������� �� ������������ ISO ������ (���� "
+"��������������������������) ������������������ �������������� 'chmod -R o+x 'path_to_iso'. ����������������: "
+"%(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "���������������������� ������������ %(name)s ������ ��������������������"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "���������������������� ������������ %(name)s ���� ��������������������"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr ""
+"���� �������������� ���������������� ������������ ������������ ������ �������������������������� ���������������������� ������������ "
+"%(name)s"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "������������������ ���������� ISO ���� ���������������������������� �������� ����������������."
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr "���� �������������� ���������������� ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr ""
+"���������� ������������ ���������������� ������ ���������������������� �������������������� ������������ �������� IPv4 ������ IPv6"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "�������������� ������������ ������ ���������������� ���������������������� ������������"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "���� �������������� ������������������ ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������������� ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr ""
+"���� �������������� �������������������������� ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr "������ �������� ������������ �������� ��������������"
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr "������ �������� ������������ �������� ��������������"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "������������������������ %(users)s ���� ��������������������."
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "������������������������ %(groups)s ���� ��������������������."
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������������� ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr "���� �������������� ������������������ ���������������������� ������������ %(name)s. ����������������: %(err)s"
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "������������������ %(iface)s ���� �������������������� �� ���������������������� ������������ %(name)s"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr ""
+"�������� %(network)s, ������������������ ������ ���������������������� ������������ %(name)s, ���� ��������������������"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr "���������������������������� ������������ �������� ������ ���������������������� ���������������������� ������������ - ��������"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr "������ �������� ������ �������������������� ���������������������� ������������ ������������ �������� ��������������"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr ""
+"�������������� ������������������������ ���������� ������������ �������� ������ �������������������� ���������������������� ������������"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr "�������������� ������ �� �������� ������ �������������������� ������������ �������������������� ���������������������� ������������"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "������������ %(name)s ������ ��������������������"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr "�������� %(network)s, ������������������ ������ �������������� %(template)s, ���� ��������������������"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr "������ ������������ %(pool)s, ������������������ ������ �������������� %(template)s, ���� ��������������������"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr "������ ������������ %(pool)s, ������������������ ������ �������������� %(template)s, ���� ��������������"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "������������ ������������������������ ���������������� %(param)s ������ CDROM."
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr "�������� %(network)s, ������������������ ������ �������������� %(template)s, ���� ��������������"
+
+msgid "Template name must be a string"
+msgstr "������ �������������� ������������ �������� ��������������"
+
+msgid "Template icon must be a path to the image"
+msgstr "������������ �������������� ������������ �������� ���������� �� ������������"
+
+msgid "Template distribution must be a string"
+msgstr "�������������� �������������� ������������ �������� ��������������"
+
+msgid "Template distribution version must be a string"
+msgstr "������������ ���������������� �������������� ������������ �������� ��������������"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "���������� ���������������������� ������������ �������� ���������� ������������"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "���������� ������������ (����) ������������ �������� ���������� ������������ ������������ 512"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "CDROM �������������� ������������ �������� ������������������ ������ ������������������ ������������ ISO"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr "������ �������������� ������������ ������������������������ URI �������� ������������ %(value)s"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr "�������������� ���������� ISO �� ���������������� CDROM ������ ���������������� ��������������"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "������ �������� ������ �������������� ������������ �������� �������������� �� ������������."
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "���� �������������� �������������� ������������ ����-���� ������������ %(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "���� �������������� �������������� ������������ ����-���� ������������ %(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr "CDROM �������������� ������������ �������� ������������������ ������ ������������������ ������������ ISO"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "������ ������������ %(name)s ������ ��������������������"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "������ ������������ %(name)s ���� ��������������������"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr "�������������� %(item)s ������ ���������������� �������� ������������ %(name)s"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "���� �������������� �������������� ���������������� ������ ������������ %(name)s"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "���� �������������� �������������� ������������ ���������� ������������. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� ������ ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr ""
+"���� �������������� ���������������� ���������� ���������� �� �������� ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "���� �������������� ������������������������ ������ ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr "���� �������������� ���������������������������� ������ ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� ������ ������������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr ""
+"���� �������������� �������������� ������ NFS: �������������������������������� �������� %(path)s ������ �������� "
+"������������������������ ���� ���������� ������������������������"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr ""
+"���� �������������� �������������� ������ NFS: ���� �������������� ������������������������ �������������������������������� �������� "
+"%(path)s"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "�������������������������������� ������ �������� ������������: %(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr "�������� �� �������� ������������ ������������ �������� ��������������"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "�������� �������� ������������ ������������ �������� IP-�������������� ������ ������������ ����������"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "���������������� ������������������ �������� ������������ ������������ �������� ��������������"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "�������������� IQN �������� iSCSI ������������ �������� ��������������"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr "�������� �������������������� �������������� ������������ ������������ �������� ���������� ������������ ���� 1 ���� 65535"
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr "�������������� ������ �� ������ ������ ���������������� �������� ������������"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr ""
+"%(disk)s ���� ���������������� �������������������� ������������/����������������. ���� �������������� ���������������� ������ �� "
+"������ %(pool)s."
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr "���������� �������������������� ���������� ������������������ ������������ ������ ���������������������� �������� ������������."
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "������ ���������������� ���������� SCSI ������������ �������� ��������������."
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "kimchi_isos �������� ������������ ���������������������������� ������ ���������������������� ��������������������������"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"���� �������������� ������������������������ ������ ������������ NFS %(name)s. ������������ NFS %(server)s "
+"��������������������."
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr ""
+"���� �������������� ���������������������������� ������ ������������ NFS %(name)s. ������������ NFS %(server)s "
+"��������������������."
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr ""
+"���� �������������� ���������������������������� ������ %(name)s: ������ ������������ �� �������������������� ������������������"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr "���� �������������� �������������� ������ %(name)s: ������ ������������ �� �������������������� ������������������"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+"������������ ���������� �� ������������ %(name)s ������ ��������������������. ���������������� ������������ ������ ������ "
+"���������������� ���������������������� ��������."
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr ""
+"���� �������������� ���������������� �������� ������������ �� ���������������������� ������������������ ������������������������ ����-���� "
+"������������ %(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "������ %(name)s ������ ��������������������"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr "������ %(name)s ���� �������������������� �� �������� ������������ %(pool)s"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr "�������������� %(item)s ������ ���������������� �������� %(volume)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr "���� �������������� �������������� ������������ ����������: ������ ������������ %(pool)s ���� ��������������"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr ""
+"���� �������������� �������������� ������ %(name)s �� �������� ������������ %(pool)s. ����������������: %(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr ""
+"���� �������������� �������������� ������������ ���������� �� �������� ������������ %(pool)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� �������� %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� ������ %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr "���� �������������� ���������������� ������������ �������� %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr "������ ������������ %(type)s ���� ������������������������ ���������������� �� ���������������� ����������"
+
+msgid "Storage volume name must be a string"
+msgstr "������ �������� ������������ �������� ��������������"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "������������������ �������� ������������ �������� ���������� ������������"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr "�������� ������������������ ������"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr ""
+"���� �������������� ���������������� �������� ������������ �� ���������������������� �� ���������� ����-���� ������������ %(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "������������������ %(name)s ���� ��������������������"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "�������� %(name)s ������ ��������������������"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "�������� %(name)s ���� ��������������������"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr "�������������� %(subnet)s, ������������������ ������ �������� %(network)s, ����������������������."
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr ""
+"�������������� �������������� ������������������ ������ ���������������� �������� %(name)s �� ���������������� ���������� ��������"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "���� �������������� �������������� ���������������� �������� %(name)s"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr "������������������ %(iface)s, ������������������ ������ �������� %(network)s, ������ ������������������������"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr ""
+"������������������ ������������ �������� �������������� ������������, ���������������������� ���������� ������ ������������������ "
+"����������������������."
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� �������� %(name)s. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "���� ������������ ������������������ IP-���������� ������ �������� %(name)s"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr ""
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "���������������������������� �������� ����������: isolated, NAT �� bridge"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr ""
+"�������������� �������� ������������ �������� ��������������, �������������������� IP-����������, �������������� ������ ���������� ��������"
+
+msgid "Network interface must be a string"
+msgstr "�������������� ������������������ ������������ �������� ��������������"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "�������������� ���� VLAN ������������ �������� ���������� ������������ ���� 1 ���� 4094"
+
+msgid "Specify name and type to create a Network"
+msgstr "�������������� ������ �� ������ ������ ���������������� ��������"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr ""
+"�������������������� ���������� %(name)s ���� ���������� �������� �������������������������� ���������������������� VLAN."
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "���� �������������� ������������������������ ������������������ %(iface)s: %(err)s."
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr ""
+"���� ������������ ������������������������ ������������������ %(iface)s. ������������������ ������������������ �������������������� "
+"���������� ����������. "
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "�������������������� ���������� %(name)s ���� ��������������������"
+
+msgid "Debug report tool not found in system"
+msgstr "�������������������� ���������������������� ������������ ���� ������������ �� ��������������"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr "���� �������������� �������������� �������������������� ���������� %(name)s. ����������������: %(err)s."
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr "���� �������������� �������������� �������������������� ���������� %(name)s. ����������������: %(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr ""
+"������������ ���������� �� ������������ %(name)s ������ ��������������������. ���������������� ������������ ������ ������ "
+"���������������� ���������������������� ��������."
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "������������ ������������ %(server)s ���� �������������������������� Kimchi"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "�������������� ���� %(name)s ���� ��������������������"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "������������ %(name)s ���� �������������������� ���� ����������"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr ""
+"���� �������������� ������������������ ������������ �������������� ����������: ���������������������� ���������������������� ������������"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr "���� �������������� �������������������������� �������������� ����������: ���������������������� ���������������������� ������������"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "�������������������� %(name)s �������� ���� ��������������"
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr "������ ��������������, �������������������� ������ ��������������������"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "���������� %(name)s ���� �������������� ������ ��������������������."
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr "������������ ������������������ ��������������, �������������������� ������ ��������������������. ����������������: %(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "������ ������������������������ ���������������������������� �������������� ������ �������� ��������������."
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "������������������������ URI %(uri)s"
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "������������������������ ������ ������������. ���������������������������� ��������: cdrom"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr "������������ ���������������� �������������������� ����������������: %(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr "������������ �������������������� �������������������� ����������������: %(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr "������������ ���������������� �������������������� ����������������: %(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr "�������������� ������ �� �������� ������ �������������������� ������������ ���������� ���������������������� ������������"
+
+msgid "Specify path to update virtual machine disk"
+msgstr "�������������� �������� ������ �������������������� ���������� ���������������������� ������������"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr "�������������� ������ �� �������� ������ �������������������� ������������ ���������� ���������������������� ������������"
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr ""
+"���� ������������������ YUM ������������ �������� ��������������, ������������������ ������������ ���� ������������ ����������."
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "URL ������������������ ������������ �������� http://, ftp:// ������ file:// ."
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr ""
+"������������������������ ������������������ ������������������������ ���������� �������������� ����������������, ������������������������ "
+"���������� ������������������."
+
+msgid "Distribution to DEB repository must be a string"
+msgstr "�������������� ������ ������������������ DEB ������������ �������� ��������������"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "�������������������� ������ ������������������ DEB ������������ �������� ���������������������� �� ��������������"
+
+msgid "Components to DEB repository must be a string"
+msgstr "�������������������� ������ ������������������ DEB ������������ �������� ��������������"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "������ ������������������ YUM ������������ �������� ��������������."
+
+msgid "GPG check must be a boolean value."
+msgstr "���������������� GPG ������������ �������� ������������������ ������������������."
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr ""
+"�������� GPG ������������ �������� URL, ���������������������� ���� �������������������� �������� �� ������������������������ "
+"ASCII."
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "���� �������������� ���������������� ������������������ %(repo_id)s."
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "������������������ %(repo_id)s ���� ��������������������."
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr "���� ������������������ �������������������� �������������������� �������������������� ������ ��������������."
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "������������������ %(repo_id)s ������ ����������������."
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "������������������ %(repo_id)s ������ ������������������."
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "���� �������������� �������������� ������������������ %(repo_id)s."
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr "���� �������������� ���������������� �� �������� ������������������������ ������������������ %(repo_file)s"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr "�������������� �������������� ������������������ ������ ���������������� ������������������ DEB."
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "���� �������������� ���������������� ������������������ %(repo_id)s."
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "���� �������������� ������������������ ������������������ %(repo_id)s."
+
+msgid "YUM Repository ID already exists"
+msgstr "���� ������������������ YUM ������ ��������������������"
+
+msgid "YUM Repository name must be a string"
+msgstr "������ ������������������ YUM ������������ �������� ��������������"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "���� �������������� �������������� ������������ ����������������. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr "���� �������������� ���������������� �������������������� �� ������������������. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "���� �������������� ���������������� ������������������. ����������������: %(err)s"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "���� �������������� �������������� ������������������. ����������������: %(err)s"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr "������ ������������"
+
+msgid "REASON"
+msgstr "��������������"
+
+msgid "STACK"
+msgstr "��������"
+
+msgid "Go to Homepage"
+msgstr "�������������� ���� �������������� ����������������"
+
+msgid "Create a New Virtual Machine"
+msgstr "�������������� ���������� ���������������������� ������������"
+
+msgid "Virtual Machine Name"
+msgstr "������ ���������������������� ������������"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr ""
+"������ ������ �������������������������� ���������������������� ������������. �������� ���� ��������������, ������ ���������� �������������� "
+"�� ���������������������� ���� �������������������������� ��������������."
+
+msgid "Template"
+msgstr "������������"
+
+msgid "Please create a template first."
+msgstr "��������������������, ���������������� ������������ �� ������������ ��������������."
+
+msgid "Create a Template"
+msgstr "�������������� ������������"
+
+msgid "Please choose a template."
+msgstr "��������������������, ���������������� ������������."
+
+msgid "OS"
+msgstr "����"
+
+msgid "OS Version"
+msgstr "������������ ����"
+
+msgid "CPUS"
+msgstr "��������������������"
+
+msgid "Memory"
+msgstr "������������"
+
+msgid "Create"
+msgstr "��������������"
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr "������������"
+
+msgid "Edit Guest"
+msgstr "���������������� ���������������� ��������������"
+
+msgid "General"
+msgstr "����������"
+
+msgid "Storage"
+msgstr "������������������"
+
+msgid "Interface"
+msgstr "������������������"
+
+msgid "Permission"
+msgstr "������������"
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr "������"
+
+msgid "CPUs"
+msgstr "��������������������"
+
+msgid "Memory (MB)"
+msgstr "������������ (����)"
+
+msgid "Icon"
+msgstr "������������"
+
+msgid "Device"
+msgstr "������ ��������������������"
+
+msgid "Path"
+msgstr "�������� NFS"
+
+msgid "Network"
+msgstr "��������"
+
+msgid "Type"
+msgstr "������"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr "������"
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr "������������"
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr "������������������"
+
+msgid "Replace"
+msgstr "����������������"
+
+msgid "Detach"
+msgstr "������������������"
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr "������������������"
+
+msgid "Reset"
+msgstr "����������������"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr "������������������"
+
+msgid "Actions"
+msgstr "����������������"
+
+msgid "Connect"
+msgstr "��������������������"
+
+msgid "Clone"
+msgstr "����������������������"
+
+msgid "Edit"
+msgstr "��������������������������"
+
+msgid "Shut Down"
+msgstr "������������������ ������������"
+
+msgid "Delete"
+msgstr "��������������"
+
+msgid "CPU"
+msgstr "������������������"
+
+msgid "Disk I/O"
+msgstr "���������������� ��������-����������"
+
+msgid "Network I/O"
+msgstr "�������������� ��������-����������"
+
+msgid "Livetile"
+msgstr "Livetile"
+
+msgid "No guests found."
+msgstr "���� �������������� ���������������� ��������������."
+
+msgid "Add a Storage Device to VM"
+msgstr "���������������� �������������������� ���������������� �� VM"
+
+msgid "Device Type"
+msgstr "������ ��������������������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "������ ��������������������. �� ������������ ������������ ���������������������������� ������������ \"cdrom\"."
+
+msgid "Storage Pool"
+msgstr "������ ������������"
+
+msgid "Storage pool which volume located in"
+msgstr "�������� �� �������� ������������ ������������ �������� ��������������"
+
+msgid "Storage Volume"
+msgstr "������ �������� ������������"
+
+msgid "Storage volume to be attached"
+msgstr "������ �������� ������������ �������� ��������������"
+
+msgid "File Path"
+msgstr "�������� �� ����������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "�������� �� ���������� ISO ������ CDROM ���� ��������������."
+
+msgid "Attach"
+msgstr "��������������������"
+
+msgid "Shut down"
+msgstr "����������������"
+
+msgid "Restart"
+msgstr "��������������������"
+
+msgid "Basic Information"
+msgstr "�������������� ��������������������"
+
+msgid "OS Distro"
+msgstr "�������������� ����"
+
+msgid "OS Code Name"
+msgstr "�������������� ������ ����"
+
+msgid "Processor"
+msgstr "������������������"
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr "������������������ ��������������������"
+
+msgid "Software Updates"
+msgstr "�������������������� ������������������������ ����������������������"
+
+msgid "Update Progress"
+msgstr "������ ��������������������"
+
+msgid "Repositories"
+msgstr "������������������"
+
+msgid "Debug Reports"
+msgstr "�������������������� ������������"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr "�������������� ���������������� ������ ������������������������ ������ ������������. �������������� ������ ������."
+
+msgid "This field is required."
+msgstr "������ ������������������������ ��������."
+
+msgid "Log in"
+msgstr "����������"
+
+msgid "Logging in..."
+msgstr "��������..."
+
+msgid "Host"
+msgstr "��������"
+
+msgid "Guests"
+msgstr "���������������� ��������������"
+
+msgid "Templates"
+msgstr "��������������"
+
+msgid "Failed to get application configuration"
+msgstr "���� �������������� ���������������� ������������������������ ��������������������"
+
+msgid "This is not a valid Linux path"
+msgstr "�������� ������������������������ �������� �� Linux"
+
+msgid "This is not a valid URL."
+msgstr "������ ������������������������ URL."
+
+msgid "No such data available."
+msgstr "������ ���������� ������������."
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"������ ���������� �� ���������������� ����������. ������������������, ������ �������������� ���������� ���������������� �� ���������������� "
+"������ ����������������������. ���������� ���� ������������ HTTP: %1. "
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "�������������������������� ����������������"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Confirm"
+msgstr "����������������������"
+
+msgid "Warning"
+msgstr "����������������������������"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "����������������������..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "������������������"
+
+msgid "Detailed message:"
+msgstr "������������������ ������������������:"
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr "�������� �������� ���� ���������������� �������������������� �������������� ISO."
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "������ ������������ ���������� ��������������. ��������������������?"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "������������ ���������� ������������������������ ������������. ��������������������?"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr ""
+"�������������������� ������������������ ������������ ��������������, ������������������ �� ������ ���������������� ���������������������� "
+"������������!"
+
+msgid "Max:"
+msgstr "��������.:"
+
+msgid "Utilization"
+msgstr "��������������������������"
+
+msgid "Available"
+msgstr "����������������"
+
+msgid "Read Rate"
+msgstr "���������������� ������������"
+
+msgid "Write Rate"
+msgstr "���������������� ������������"
+
+msgid "Received"
+msgstr "����������������"
+
+msgid "Sent"
+msgstr "��������������������"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr ""
+"�������������������� ������������ �� �������������������� ���������� ���������������� �� ������������ �������������������������� ������������. "
+"�������������������� �������������������� ������������/��������������������?"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr "������������������ ���������� �������������� ������ ���������������������� ����������������������������. ��������������������?"
+
+msgid "ID"
+msgstr "����"
+
+msgid "Base URL"
+msgstr "�������������� URL"
+
+msgid "Is Mirror"
+msgstr "�������������������� ����������"
+
+msgid "URL Args"
+msgstr "������������������ URL"
+
+msgid "Enabled"
+msgstr "����������������"
+
+msgid "GPG Check"
+msgstr "���������������� GPG"
+
+msgid "GPG Key"
+msgstr "�������� GPG"
+
+msgid "Add"
+msgstr "����������������"
+
+msgid "Remove"
+msgstr "��������������"
+
+msgid "Enable"
+msgstr "����������������"
+
+msgid "Disable"
+msgstr "������������������"
+
+msgid "Package Name"
+msgstr "������ ������������"
+
+msgid "Version"
+msgstr "������������"
+
+msgid "Architecture"
+msgstr "����������������������"
+
+msgid "Repository"
+msgstr "������������������"
+
+msgid "Update All"
+msgstr "���������������� ������"
+
+msgid "Updating..."
+msgstr "��������������������..."
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr "���� �������������� ���������������� ������������."
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr ""
+"�������������������� ���������� ���������� ������������ ������ ���������������������� ����������������������������. ��������������������?"
+
+msgid "Generated Time"
+msgstr "���������� ����������������"
+
+msgid "Generate"
+msgstr "��������������"
+
+msgid "Generating..."
+msgstr "����������������..."
+
+msgid "Rename"
+msgstr "��������������������������"
+
+msgid "Download"
+msgstr "������������������"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr "������ ������������ ������������ ������������������ ������������ ����������, ���������� �� ������������ ('-')."
+
+msgid "Pending..."
+msgstr "����������������������..."
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr ""
+"���������� �������������� ���������������������� ������������ ������������ ���� ������������ ������������������������ ��������������. ������ "
+"���������������������� ����������������. ��������������������?"
+
+msgid "Power off Confirmation"
+msgstr "�������������������������� ����������������"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr "�������������������������� ����������������"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr "�������������������������� ����������������"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr "������������ ���������� ������������������������ ������������. ��������������������?"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"�������� CDROM ���������� ����������������. ������ ���������� ���������� ���������� ��������������������. ������������������?"
+
+msgid "Attaching..."
+msgstr "����������������������..."
+
+msgid "Replacing..."
+msgstr "������������..."
+
+msgid "Successfully attached!"
+msgstr "�������������� ������������������!"
+
+msgid "Successfully replaced!"
+msgstr "�������������� ��������������!"
+
+msgid "Successfully detached!"
+msgstr "�������������� ����������������!"
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "���� VLAN ������������ �������� ���� 1 ���� 4094."
+
+msgid "unavailable"
+msgstr "��������������������"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr ""
+"������ ���������������� �������������� �������������� �������������������� �� �������� ���������������������� ����������, �������������� "
+"�������������� ���� �������� ��������."
+
+msgid "Create a network"
+msgstr "�������������� ��������"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"�������� ������ ������������ ���� ��������������������. ������������ ����������������������, ������ ���������������� ������������������������ "
+"������ ������������. ��������������������?"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr "������ ������������ ���������� ������������������������ ������������. ��������������������?"
+
+msgid "This storage pool is empty."
+msgstr "�������� ������ ������������ ������������."
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr ""
+"�������� ���������� ����������������������������, �� ������ ������������ ���� ������ ���������� ����������������. ���� "
+"�������������������������� ������������ ��������������������? "
+
+msgid "SCSI Fibre Channel"
+msgstr "SCSI Fibre Channel"
+
+msgid "No SCSI adapters found."
+msgstr "���� �������������� ���������������� SCSI."
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr "���� �������������� ������ �������� ������������."
+
+msgid "The storage pool path can not be blank."
+msgstr "���� ������������ �������� �� �������� ������������."
+
+msgid "NFS server mount path can not be blank."
+msgstr "���� ������������ �������� ������������������������ �������������� NFS."
+
+msgid "Invalid NFS mount path."
+msgstr "������������������������ �������� ������������������������ NFS."
+
+msgid "No logical device selected."
+msgstr "���� �������������� �������������������� ��������������������."
+
+msgid "The iSCSI target can not be blank."
+msgstr "���� ������������ �������������� ������������ iSCSI."
+
+msgid "Server name can not be blank."
+msgstr "���� �������������� ������ ��������������."
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr "���������� ������������������ ����������������..."
+
+msgid "No available partitions found."
+msgstr "���� �������������� ������������������ ��������������."
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"�������� ������ ������������ ���� ��������������������. ������������ ����������������������, ������ ���������������� ������������������������ "
+"������ ������������. ��������������������?"
+
+msgid "Unable to retrieve partitions information."
+msgstr "���� �������������� ���������������� �������������������� �� ������������������. ����������������: %(err)s"
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "���� �������������� ������ �������� ������������."
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr "������ ��������"
+
+msgid "State"
+msgstr "������������������"
+
+msgid "Network Type"
+msgstr "������ ��������"
+
+msgid "Address Space"
+msgstr "���������������� ������������������������"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr "������������������������ ������ �������� ������������. �� ���������� ���� ������������ �������� ���������������� '/'."
+
+msgid "Isolated: no external network connection"
+msgstr "�������������������������� (������ �������������������� �������������� ��������������������)"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT (������������ ������������������ �������������������� �������������� ��������������������)"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr "���������� �������� (������������ ���������������������� ���������������������� ���������� �� �������������������� ��������)"
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr "�������������� ������������������������:"
+
+msgid "Enable VLAN"
+msgstr "���������������� VLAN:"
+
+msgid "VLAN ID"
+msgstr ""
+
+msgid "Stop"
+msgstr "������������������"
+
+msgid "Generate a New Debug Report"
+msgstr "�������������� ���������� �������������������� ����������"
+
+msgid "Report Name"
+msgstr "������ ������������"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"������ ������ �������������������������� ������������. �������� ���� ��������������, ������ ���������� ������������������������ ���� "
+"������������ ���������������� ��������������. ������ ���������� ������������������: ����������, ���������� �� ������������ (\"-\")."
+
+msgid "Rename a Debug Report"
+msgstr "�������������� ���������� �������������������� ����������"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"������ ������ �������������������������� ������������. �������� ���� ��������������, ������ ���������� ������������������������ ���� "
+"������������ ���������������� ��������������. ������ ���������� ������������������: ����������, ���������� �� ������������ (\"-\")."
+
+msgid "Submit"
+msgstr "����������������������"
+
+msgid "Add a Repository"
+msgstr "���������������� ������������������"
+
+msgid "Identifier"
+msgstr "��������������������������"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "������������������ ���������� - �������������������� �������������������������� ������������������."
+
+msgid "Textual name for the repository."
+msgstr "������������������ ������ ������������������."
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "������������������������ ��������"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "URL ������������������. ���������������������������� ������������������: http, ftp, file."
+
+msgid "Repository is a mirror"
+msgstr "������������������ ���������������� �������������������� ������������."
+
+msgid "Distribution"
+msgstr "��������������"
+
+msgid "Distribution of the DEB repository."
+msgstr "�������������� ������������������ DEB."
+
+msgid "Components"
+msgstr "��������������������"
+
+msgid "List of components in DEB repository."
+msgstr "������������ ���������������������� �� ������������������ DEB."
+
+msgid "Edit Repository"
+msgstr "���������������� ������������������"
+
+msgid "Mirror List URL"
+msgstr "URL ������������ �������������������� ����������"
+
+msgid "Yes"
+msgstr "����"
+
+msgid "No"
+msgstr "������"
+
+msgid "Capacity"
+msgstr "��������������"
+
+msgid "Allocated"
+msgstr "����������������"
+
+msgid "Location"
+msgstr "������������������������"
+
+msgid "Device path"
+msgstr "�������� �� ��������������������"
+
+msgid "active"
+msgstr "��������������"
+
+msgid "inactive"
+msgstr "������������������"
+
+msgid "Deactivate"
+msgstr "������������������"
+
+msgid "Activate"
+msgstr "������������������������"
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr "��������������"
+
+msgid "Format"
+msgstr "������������:"
+
+msgid "Allocation"
+msgstr "������������������ ����������������:"
+
+msgid "Define a New Storage Pool"
+msgstr "�������������� ������ ������������"
+
+msgid "Storage Pool Name"
+msgstr "������ �������� ������������"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr "������ ������ �������������������������� ���������� ������������. ���� ���������� �������� ������������."
+
+msgid "Storage Pool Type"
+msgstr "������ �������� ������������"
+
+msgid "Storage Path"
+msgstr "�������� �� ����������"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr "�������� �� �������� ������������. ������������ ������ ������������ ������������ ���������� �������������������� ��������."
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr "Kimchi �������������������� �������������� ��������������, �������� ���� ���� �������������������� �� ��������������."
+
+msgid "NFS Server IP"
+msgstr "IP-���������� �������������� NFS"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr ""
+"IP-���������� ������ ������ ���������� �������������� NFS. ������ ���������� ������������ ������ �������������� �� "
+"��������������������."
+
+msgid "NFS Path"
+msgstr "�������� NFS"
+
+msgid "The NFS exported path on NFS server."
+msgstr "�������������������������������� �������� NFS ���� �������������� NFS."
+
+msgid "iSCSI Server"
+msgstr "������������ iSCSI"
+
+msgid "Server"
+msgstr "������������"
+
+msgid "Port"
+msgstr "��������"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "IP-���������� ������ ������ ���������� �������������� iSCSI. ���� ���������� �������� ������������."
+
+msgid "Target"
+msgstr "�������������� ������������"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "�������������� ������������ iSCSI ���� �������������� iSCSI"
+
+msgid "Add iSCSI Authentication"
+msgstr "���������������� �������������������������� iSCSI"
+
+msgid "iSCSI Authentication"
+msgstr "�������������������������� iSCSI"
+
+msgid "User Name"
+msgstr "������ ������������������������"
+
+msgid "Password"
+msgstr "������������"
+
+msgid "SCSI Adapter"
+msgstr "�������������� SCSI"
+
+msgid "Please, wait..."
+msgstr "������������������..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr "���������������� ������������"
+
+msgid "Where is the source media for this template? "
+msgstr "������ ������������������ ���������������� ���������������� ������ ���������� ��������������?"
+
+msgid "Local ISO Image"
+msgstr "������������������ ���������� ISO"
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr "������������������ ���������� ISO"
+
+msgid "Search ISOs"
+msgstr "���������� �������������� ISO"
+
+msgid "The following ISOs are available:"
+msgstr "������������������ ������������ ISO:"
+
+msgid "OS: "
+msgstr "����: "
+
+msgid "Version: "
+msgstr "������������: "
+
+msgid "Size: "
+msgstr "������������: "
+
+msgid "Search more ISOs"
+msgstr "���������� ���������������������������� �������������� ISO"
+
+msgid "Create Templates from Selected ISO"
+msgstr "�������������� �������������� ���� ������������������ �������������� ISO"
+
+msgid "I want to use a specific ISO file"
+msgstr "������������������������ �������������������� �������� ISO"
+
+msgid "Loading default remote ISOs ..."
+msgstr "���������������� ������������������ ISO ���� ������������������..."
+
+msgid "Arch: "
+msgstr "����������������������: "
+
+msgid "I want to use a custom URL"
+msgstr "������������������������ ������������ URL"
+
+msgid "Edit Template"
+msgstr "���������������� ������������"
+
+msgid "CDROM"
+msgstr "CDROM"
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr "��������������"
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "�������������������� ����������������������"
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr "���� �������������� ��������������."
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "���������������� ������������������ ������ %(resource)s"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s ���� ������������������ ���������� ��������������������"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "���������������� ������������������ ������ %(resource)s"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "������������ �������������� �������������� JSON"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "������ �������������� API ������������������������ ������������ JSON"
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "������������������ ������������ �� �������������� ������������ ���� ��������������������������������."
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "���� �������������� ������������������ ������������ ����-���� ������������ %(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr ""
+#~ "�������� �������������������������� ������������������������ %(username)s. [������ ������������: %(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "������ �������� �������������� �� Kimchi"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "�������������� %(item)s ������ ���������� �� Kimchi"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "���� ������������ %(item)s �� ������������������ ������������"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr "���������� ��������-������ �������������������� �������������� %(cmd)s (%(seconds)s ��)"
+
+#~ msgid "Help"
+#~ msgstr "������������"
+
+#~ msgid "About"
+#~ msgstr "�� ������������������"
+
+#~ msgid "Log out"
+#~ msgstr "����������"
+
+#~ msgid "Version:"
+#~ msgstr "������������:"
diff --git a/plugins/gingerbase/po/zh_CN.po b/plugins/gingerbase/po/zh_CN.po
new file mode 100644
index 0000000..f1bebff
--- /dev/null
+++ b/plugins/gingerbase/po/zh_CN.po
@@ -0,0 +1,2186 @@
+# i18n portable object for gingerbase.
+# Copyright (C) IBM, Corp. 2013-2014
+# ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>, 2013-04-18.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2013-06-27 10:48+0000\n"
+"Last-Translator: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>\n"
+"Language-Team: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"X-Poedit-Country: CHINA\n"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr "������������ %(value)s"
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr "������'%(task)s������%(seconds)s������"
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr "���������������LDAP���������������%(user_id)s������"
+
+msgid "Unknown \"_cap\" specified"
+msgstr "������������\"_cap\""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr "\"_passthrough\"���������\"true\"������\"false\""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr "\"_passthrough_affected_by\"���������������������������������"
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr "������������������������������������%(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr "��������������� %(device)s ������������������"
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "���������������������������%(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr "������������������������������%(filename)s������������������������JSON������������������"
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr "������������ %(portal)s ������iSCSI���������������������������%(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "������������iSCSI������%(host)s������������%(target)s���"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr "������������ISO������ %(filename)s"
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "ISO������%(filename)s���������������"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr "ISO������%(filename)s���������������El Torito���������������"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "���ISO������%(filename)s������������������El Torito������������������"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "ISO������%(filename)s���El Torito������������������������"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr "������������ISO������%(filename)s���������������"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr "ISO������%(filename)s���������������������������"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"hypervisor������������ISO������%(filename)s���������������������ISO������/var/lib/libvirt���"
+"���������������'%(user)s'���������������������������������'%(user)s'���������������ISO������������������"
+"������������������������������������������ 'chmod -R o+x '���������������������������%(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr "������������������������������������������������"
+
+msgid "No OS information found in given image."
+msgstr "���������������������������������������������������������"
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr "������������������������ %(filename)s"
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr "���������������������������������������%(filename)s���������������������"
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "���������%(name)s������������"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "���������%(name)s���������"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+"��������������������� %(name)s ������������������ %(new_name)s ������������������������������������"
+"������"
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr "������������������������������������%(name)s���������"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "���������������������������ISO���������"
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr "��������� %(name)s ���������������"
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr "���������%(name)s���������������������������"
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr "������������������������URI %(value)s"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr "���������������������������URI %(value)s"
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr "������������������������������Spice������VNC"
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr "������������������������������������������IPv4���IPv6���������"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "������������������������������������"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������������� %(name)s. ���������%(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������������� %(name)s������������%(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������%(err)s"
+
+msgid "User name list must be an array"
+msgstr "������������������������������������"
+
+msgid "User name must be a string"
+msgstr "���������������������������������"
+
+msgid "Group name list must be an array"
+msgstr "������������������������������������"
+
+msgid "Group name must be a string"
+msgstr "���������������������������������������"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "������'%(users)s'���������"
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "���������'%(groups)s'���������"
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr "��������������������� %(name)s������������������������%(err)s"
+
+msgid "The guest console password must be a string."
+msgstr "���������������������������������������������������"
+
+msgid "The life time for the guest console password must be a number."
+msgstr "������������������������������������������������������������"
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr "���������'%(name)s'���������������������������������"
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr "���������������'%(name)s'���������������������������������"
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr "���������������������������'%(name)s'������������������%(err)s"
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr "���������%(vmid)s���������������������������������%(dev_name)s���"
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr "������������%(dev_name)s������������������������������������"
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+"���������IOMMU groups���������PCI pass through������IOMMU group������������������������������"
+"BIOS������������Intel VT-d ������ AMD IOMMU ���������������������������������������IOMMU���������"
+"Intel CPU������������/boot/grub2/grub.conf���������������������intel_iommu=on���������AMD "
+"CPU������������iommu=pt iommu=1���"
+
+msgid "\"name\" should be a device name string"
+msgstr "\"name\"���������������������������������������"
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "��������� %(name)s ��������������� %(iface)s"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr "������������%(name)s���������������%(network)s���������"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr "���������������������������������������"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr "������������������������������������������������"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr "���������������������������������������������"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr "���������������������������������������������"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "������ %(name)s ������������"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr "��������� %(template)s ��������������� '%(network)s' ���������"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr "��������� %(template)s ������������������ '%(pool)s' ���������"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr "��������� %(template)s ������������������ '%(pool)s' ������������"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "���CDROM��������������� '%(param)s' ������"
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr "��������� %(template)s ��������������� '%(network)s' ������������"
+
+msgid "Template name must be a string"
+msgstr "���������������������������������������"
+
+msgid "Template icon must be a path to the image"
+msgstr "���������������������������������������������������"
+
+msgid "Template distribution must be a string"
+msgstr "������������������������������������������"
+
+msgid "Template distribution version must be a string"
+msgstr "���������������������������������������������������"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "CPU���������������������������0���������"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "���������������MB���������������������������������512���������"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "���������CDROM������������������������������������ISO������"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr "������������������������������������URI %(value)s"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr "������������ISO���������������������������CDROM������������������"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "������������������������������������������������"
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr "���������������������iSCSI������SCSI������������������������������������"
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr "���%(volume)s���������������%(pool)s���"
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "������������������������������%(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "���������������%(err)s���������������������"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr "������������������������1GB���"
+
+msgid "Template base image must be a valid local image file"
+msgstr "������������������������������������������������������������"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr "������������������������%(path)s������"
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr "CPU������������VCPUs������������sockets, cores ������threads���"
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr "CPU���������������������������������������������������������"
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+"���������������������������������������������������bochs, cloop, cow, dmg, qcow, qcow2, qed, "
+"raw, vmdk, vpc���"
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "���������%(name)s������������"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "���������%(name)s���������"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr "���������������%(name)s������%(item)s"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "������������������������������ %(name)s"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "������������������������ ��������� %(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������� %(name)s������������ %(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr "���������������������%(name)s��������������������������� %(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������ %(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������ %(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������ %(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr "������������NFS������������������������������%(path)s������������������������"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr "������������NFS������������������������������%(path)s������"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "������������������������������%(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr "���������������XML���%(pool)s���������������"
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr "������������������������dir���netfs���logical���iscsi���isci������kimchi-iso"
+
+msgid "Storage pool path must be a string"
+msgstr "���������������������������������"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "������������������������������IP���������������"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr "������������������������������������������������������"
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "������������������������������������������"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "iSCSI������������������IQN������������������"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr "���������������������������������������1���65535���������������"
+
+msgid "iSCSI target username must be a string"
+msgstr "iSCSI���������������������������������������"
+
+msgid "iSCSI target password must be a string"
+msgstr "iSCSI������������������������������������"
+
+msgid "Specify name and type to create a storage pool"
+msgstr "������������������������������������"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr "%(disk)s ���������������������/������������������������������������%(pool)s���"
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr "���������������������%(pool)s���������������������%(err)s"
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr "������������������������������������������������"
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "SCSI���������������������������������������"
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "���������kimchi_isos������������������"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr "������������NFS���������%(name)s���NFS���������%(server)s���������������"
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr "������������NFS���������%(name)s���NFS���������%(server)s���������������"
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr "���������������������%(name)s������������������������������������"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr "���������������������%(name)s������������������������������������"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr "������'%(name)s'������������������������������������������������������������������"
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr "������������������������������������������%(err)s���"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "���������%(name)s������������"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr "���������%(pool)s������������������%(name)s"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr "���������������������%(volume)s������������������%(pool)s ������������"
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr "���������������%(volume)s������������%(item)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr "���������������������������������������%(pool)s������������"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr "������������������%(pool)s������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr "������������������%(pool)s������������������������������%(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr "���������������������%(name)s���������������������%(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr "������������%(type)s������������������������������"
+
+msgid "Storage volume name must be a string"
+msgstr "������������������������������������"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "���������������������������������"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+"������������������������������������������������bochs, cloop, cow, dmg, qcow, qcow2, qed, "
+"raw, vmdk, vpc���"
+
+msgid "Storage volume requires a volume name"
+msgstr "���������������������"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr "���������������������������������������%(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr "���������������%(param)s������������������������"
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr "������������%(param)s���������������"
+
+msgid "Storage volume capacity must be an integer number."
+msgstr "������������������������������������"
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr "���������URL���������http://���https://���ftp://���ftps://"
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr "������������������%(url)s������������������������������������"
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr "������������������'%(pool)s'���������������'%(name)s'���������������������%(err)s"
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "������%(name)s���������"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "������%(name)s������������"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "������%(name)s���������"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr "���������%(network)s���������������%(subnet)s������"
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr "������������������������������������������������������%(name)s"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "���������������������������%(name)s"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr "���������%(network)s���������������%(iface)s������������"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr "���������������������������������������������bonding���������������������"
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "���������������'%(name)s'������������������������IP���������������"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr ""
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "���������������������������������NAT���������"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr "���������������������������IP������������������������������������������������"
+
+msgid "Network interface must be a string"
+msgstr "������������������������������������"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "������VLAN������������1���4094���������������"
+
+msgid "Specify name and type to create a Network"
+msgstr "���������������������������������"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr "������������������%(name)s������VLAN���trunk���������"
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "������������������������ %(iface)s���%(err)s���"
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr "������������%(iface)s���������������������������������������������"
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr "������������%(name)s������������������%(err)s"
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "������������%(name)s���������"
+
+msgid "Debug report tool not found in system"
+msgstr "���������������������������������"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr "������������������������%(name)s������������%(err)s"
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr "������������������������%(name)s���������������"
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr "������������������������%(name)s������������%(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr "������������������������%(name)s������������%(err)s"
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+"������������������������������������������������������������������������������������('_')���������������('-')"
+"������������������"
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr "���������\"'%(name)s\"���������������������������������������������������������"
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "���������������%(server)s������Kimchi������"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "������������'%(name)s'���������"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "������������������������%(name)s"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr "������������������������������������������"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr "������������������������������������������"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "������������������������'%(name)s'"
+
+msgid "Conflicting flag filters specified."
+msgstr "flag filters���������"
+
+msgid "No packages marked for update"
+msgstr "������������������������������"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "���������%(name)s������������������������"
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr "���������������������������������������������������������%(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "������������������������������������������"
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "���������URI %(uri)s"
+
+msgid "Unable to choose a virtual machine name"
+msgstr "���������������������������������"
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "������������������������������������������'cdrom'���'disk'"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr "������'%(value)s'���������������������������/������������"
+
+msgid "Only CDROM path can be update."
+msgstr "���������CDROM���������������"
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr "������������%(dev_name)s������������%(vm_name)s������������"
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr "������������������������������������%(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr "������������������������������%(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr "������������������������������%(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr "���������IDE������������������"
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr "���������������������������������������������������������������������������/���������"
+
+msgid "Specify path to update virtual machine disk"
+msgstr "������������������������������������"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr "������������������%(type)s���������������������%(limit)s"
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr "���������������������������/������������������������������������������%(error)s"
+
+msgid "Volume already in use by other virtual machine."
+msgstr "���������������������������������������"
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr "���������������������������������������������������������/���������������������"
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr "���������%(format)s���������������������������%(type)s"
+
+msgid "YUM Repository ID must be one word only string."
+msgstr "YUM������������ID������������������������������������������"
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "������������URL���������http://��� ftp:// ��� file://"
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr "������������������������������������������������������������������"
+
+msgid "Distribution to DEB repository must be a string"
+msgstr "DEB���������������������������������������������"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "DEB������������������������������������������"
+
+msgid "Components to DEB repository must be a string"
+msgstr "DEB���������������������������������������"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "YUM���������������������������������������"
+
+msgid "GPG check must be a boolean value."
+msgstr "GPG������������������������������"
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr "GPG������������������������ASCII���������������.asc������������URL"
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "������������������������%(repo_id)s"
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "������������%(repo_id)s������������"
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr "������������������������������������������"
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "������������%(repo_id)s���������������"
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "������������%(repo_id)s���������������"
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "������������������������%(repo_id)s"
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr "������������������������������������%(repo_file)s"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr "���������������������������������������������DEB���������"
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "������������������������%(repo_id)s"
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "������������������������%(repo_id)s"
+
+msgid "YUM Repository ID already exists"
+msgstr "YUM������ID������������"
+
+msgid "YUM Repository name must be a string"
+msgstr "YUM������������������������������������"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "������������������������������������'%(err)s'"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr "���������������������������������������������'%(err)s'"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "������������������������������������'%(err)s'"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "������������������������������������'%(err)s'"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr "���������������������������������: %(items)s"
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr "���������'%(vm)s'���������������������������������"
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr "������������������'%(vm)s'������������'%(name)s'������������%(err)s"
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr "������'%(name)s'������������������'%(vm)s'������"
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr "������������������'%(vm)s'������������'%(name)s'������������%(err)s"
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr "���������������������'%(vm)s'���������������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr "���������������������'%(vm)s'������'%(name)s'������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr "���������������������'%(vm)s'������������������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr "���������������������'%(vm)s'���������'%(name)s'������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+"������������������'%(vm)s'���������������������������������������'%(format)s'������������������������"
+"���'qcow2'���������"
+
+msgid "The number of vCPUs is too large for this system."
+msgstr "vCPUs������������������������������������"
+
+msgid "Invalid vCPU/topology combination."
+msgstr "���������vCPU/topology���������"
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr "������������������������������������������CPU���������"
+
+msgid "ERROR CODE"
+msgstr "���������"
+
+msgid "REASON"
+msgstr "������"
+
+msgid "STACK"
+msgstr "���������"
+
+msgid "Go to Homepage"
+msgstr "������������"
+
+msgid "Create a New Virtual Machine"
+msgstr "���������������������������"
+
+msgid "Virtual Machine Name"
+msgstr "���������������"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr "���������������������������������������������������������������������������������������������"
+
+msgid "Template"
+msgstr "������"
+
+msgid "Please create a template first."
+msgstr "������������������������"
+
+msgid "Create a Template"
+msgstr "������������������"
+
+msgid "Please choose a template."
+msgstr "������������������"
+
+msgid "OS"
+msgstr "������������"
+
+msgid "OS Version"
+msgstr "������������������"
+
+msgid "CPUS"
+msgstr "���������������"
+
+msgid "Memory"
+msgstr "������"
+
+msgid "Create"
+msgstr "������"
+
+msgid "Creating..."
+msgstr "������������..."
+
+msgid "Cancel"
+msgstr "������"
+
+msgid "Edit Guest"
+msgstr "���������������"
+
+msgid "General"
+msgstr "������"
+
+msgid "Storage"
+msgstr "������"
+
+msgid "Interface"
+msgstr "������������"
+
+msgid "Permission"
+msgstr "������"
+
+msgid "Host PCI Device"
+msgstr "������PCI������"
+
+msgid "Snapshot"
+msgstr "������"
+
+msgid "Name"
+msgstr "������"
+
+msgid "CPUs"
+msgstr "���������������"
+
+msgid "Memory (MB)"
+msgstr "������(MB)"
+
+msgid "Icon"
+msgstr "������"
+
+msgid "Device"
+msgstr "������������"
+
+msgid "Path"
+msgstr "������"
+
+msgid "Network"
+msgstr "������"
+
+msgid "Type"
+msgstr "������"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr "���������������������������������"
+
+msgid "Selected system users and groups"
+msgstr "���������������������������������"
+
+msgid "User"
+msgstr "������"
+
+msgid "All"
+msgstr "������"
+
+msgid "To Add"
+msgstr "���������"
+
+msgid "Added"
+msgstr "���������"
+
+msgid "filter"
+msgstr "���������"
+
+msgid "Product"
+msgstr "������"
+
+msgid "Vendor"
+msgstr "������"
+
+msgid "Created"
+msgstr "���������"
+
+msgid "Save"
+msgstr "������"
+
+msgid "Replace"
+msgstr "������"
+
+msgid "Detach"
+msgstr "������"
+
+msgid "revert"
+msgstr "������"
+
+msgid "Start"
+msgstr "������"
+
+msgid "Reset"
+msgstr "������"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr "������������"
+
+msgid "Actions"
+msgstr "������"
+
+msgid "Connect"
+msgstr "���������"
+
+msgid "Clone"
+msgstr "������������"
+
+msgid "Edit"
+msgstr "������"
+
+msgid "Shut Down"
+msgstr "������"
+
+msgid "Delete"
+msgstr "������"
+
+msgid "CPU"
+msgstr "���������"
+
+msgid "Disk I/O"
+msgstr "������I/O"
+
+msgid "Network I/O"
+msgstr "������I/O"
+
+msgid "Livetile"
+msgstr "������"
+
+msgid "No guests found."
+msgstr "���������������������"
+
+msgid "Add a Storage Device to VM"
+msgstr "������������������������������������"
+
+msgid "Device Type"
+msgstr "������������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "������������������������������������������\"cdrom\"���\"disk\"��� "
+
+msgid "Storage Pool"
+msgstr "���������"
+
+msgid "Storage pool which volume located in"
+msgstr "���������������������������"
+
+msgid "Storage Volume"
+msgstr "���������"
+
+msgid "Storage volume to be attached"
+msgstr "���������������������"
+
+msgid "File Path"
+msgstr "������������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "������������CDROM������������ISO������������"
+
+msgid "Attach"
+msgstr "������"
+
+msgid "Shut down"
+msgstr "������"
+
+msgid "Restart"
+msgstr "������"
+
+msgid "Basic Information"
+msgstr "������������"
+
+msgid "OS Distro"
+msgstr "���������������������"
+
+msgid "OS Code Name"
+msgstr "������������������"
+
+msgid "Processor"
+msgstr "���������"
+
+msgid "CPU(s)"
+msgstr "CPU(s)"
+
+msgid "System Statistics"
+msgstr "������������������"
+
+msgid "Software Updates"
+msgstr "������������"
+
+msgid "Update Progress"
+msgstr "������������"
+
+msgid "Repositories"
+msgstr "������������"
+
+msgid "Debug Reports"
+msgstr "������������������"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr "���������������������������������������������"
+
+msgid "This field is required."
+msgstr "������������������"
+
+msgid "Log in"
+msgstr "������"
+
+msgid "Logging in..."
+msgstr "���������..."
+
+msgid "Host"
+msgstr "������"
+
+msgid "Guests"
+msgstr "���������"
+
+msgid "Templates"
+msgstr "������"
+
+msgid "Failed to get application configuration"
+msgstr "������������������������"
+
+msgid "This is not a valid Linux path"
+msgstr "������������������������Linux������"
+
+msgid "This is not a valid URL."
+msgstr "������������������������URL"
+
+msgid "No such data available."
+msgstr "���������������������"
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"������������������������������������������������������������������������������������������HTTP���������������%1"
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "������������"
+
+msgid "OK"
+msgstr "������"
+
+msgid "Confirm"
+msgstr "������"
+
+msgid "Warning"
+msgstr "������"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "������������..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "������"
+
+msgid "Detailed message:"
+msgstr "���������������"
+
+msgid "No ISO found"
+msgstr "������������ISO������"
+
+msgid "This is not a valid ISO file."
+msgstr "������������������������ISO������"
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "���������������������������������������"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "������������������������������������������"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr "���������������������������������������������"
+
+msgid "Max:"
+msgstr "���������"
+
+msgid "Utilization"
+msgstr "���������"
+
+msgid "Available"
+msgstr "������������"
+
+msgid "Read Rate"
+msgstr "���������"
+
+msgid "Write Rate"
+msgstr "���������"
+
+msgid "Received"
+msgstr "������"
+
+msgid "Sent"
+msgstr "������"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr "���������������������������������������������������������������������������/���������"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr "���������������������������������������������������������������"
+
+msgid "ID"
+msgstr "���������"
+
+msgid "Base URL"
+msgstr "������URL"
+
+msgid "Is Mirror"
+msgstr "���������������"
+
+msgid "URL Args"
+msgstr "URL������"
+
+msgid "Enabled"
+msgstr "���������"
+
+msgid "GPG Check"
+msgstr "GPG������"
+
+msgid "GPG Key"
+msgstr "GPG���"
+
+msgid "Add"
+msgstr "������"
+
+msgid "Remove"
+msgstr "������"
+
+msgid "Enable"
+msgstr "������"
+
+msgid "Disable"
+msgstr "������"
+
+msgid "Package Name"
+msgstr "���������������"
+
+msgid "Version"
+msgstr "������"
+
+msgid "Architecture"
+msgstr "������������"
+
+msgid "Repository"
+msgstr "������������"
+
+msgid "Update All"
+msgstr "������������"
+
+msgid "Updating..."
+msgstr "������������..."
+
+msgid "Failed to retrieve packages update information."
+msgstr "������������������������������������"
+
+msgid "Failed to update package(s)."
+msgstr "���������������������"
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr "���������������������������������������������������������������������"
+
+msgid "Generated Time"
+msgstr "������������"
+
+msgid "Generate"
+msgstr "������"
+
+msgid "Generating..."
+msgstr "������������..."
+
+msgid "Rename"
+msgstr "���������"
+
+msgid "Download"
+msgstr "������"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr "������������������������������������������������������('_')������������('-')"
+
+msgid "Pending..."
+msgstr "������������..."
+
+msgid "Report name is the same as the original one."
+msgstr "������������������������������������"
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr "���������������������������������������������������������������������������������"
+
+msgid "Power off Confirmation"
+msgstr "������������������"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr "������������������������������������������������������������������������������������������������"
+
+msgid "Reset Confirmation"
+msgstr "������������"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr "������������������������������������������������������������������������������������������������������"
+
+msgid "Shut Down Confirmation"
+msgstr "������������"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr "���������������������������������������������������������������������������������"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr "���������������������"
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr "������������������������������������������������������������������������������������"
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+"������������������������SCSI������iSCSI���������������������������������������������������������������������"
+"������������������������������������������������������������������������������������������������������"
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr "CDROM���������������������������������������������������������������"
+
+msgid "Attaching..."
+msgstr "������������"
+
+msgid "Replacing..."
+msgstr "������������..."
+
+msgid "Successfully attached!"
+msgstr "������������"
+
+msgid "Successfully replaced!"
+msgstr "������������"
+
+msgid "Successfully detached!"
+msgstr "������������"
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr "���������������������������������������������������������������������������������������?"
+
+msgid "interface:"
+msgstr "���������"
+
+msgid "address:"
+msgstr "���������"
+
+msgid "link_type:"
+msgstr "���������������"
+
+msgid "block:"
+msgstr "������"
+
+msgid "drive_type:"
+msgstr "���������������"
+
+msgid "model:"
+msgstr "���������"
+
+msgid "Affected devices:"
+msgstr "���������������������"
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "VLAN ������������������1���4094������"
+
+msgid "unavailable"
+msgstr "������������"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr "������������������������������������������������������������������"
+
+msgid "Create a network"
+msgstr "������������������"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"���������"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr "���������������������������������������������"
+
+msgid "This storage pool is empty."
+msgstr "���������������������"
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr "������������������������������������������������������������������������������������"
+
+msgid "SCSI Fibre Channel"
+msgstr "SCSI������������"
+
+msgid "No SCSI adapters found."
+msgstr "������������SCSI���������"
+
+msgid "Loading iSCSI targets..."
+msgstr "������iSCSI������..."
+
+msgid "No iSCSI found. Please input one."
+msgstr "������������iSCSI,������������������"
+
+msgid "Failed to load iSCSI targets."
+msgstr "������iSCSI���������������"
+
+msgid "The storage pool name can not be blank."
+msgstr "���������������������������������"
+
+msgid "The storage pool path can not be blank."
+msgstr "���������������������������������"
+
+msgid "NFS server mount path can not be blank."
+msgstr "NFS������������������������������������"
+
+msgid "Invalid NFS mount path."
+msgstr "���������NFS���������������"
+
+msgid "No logical device selected."
+msgstr "���������������������������"
+
+msgid "The iSCSI target can not be blank."
+msgstr "iSCSI���������������������"
+
+msgid "Server name can not be blank."
+msgstr "������������������������"
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr "������������������������������������������IP���������������������������������"
+
+msgid "Looking for available partitions ..."
+msgstr "��������������������� ..."
+
+msgid "No available partitions found."
+msgstr "���������������������"
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr "���������������������������������������������������������������������������������������������������"
+
+msgid "Unable to retrieve partitions information."
+msgstr "���������������������������"
+
+msgid "In progress..."
+msgstr "������������..."
+
+msgid "Failed!"
+msgstr "���������"
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr "CDROM���������������������������������/������������������������������"
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "���������������������������"
+
+#, fuzzy
+msgid "Filter"
+msgstr "���������"
+
+msgid "Network Name"
+msgstr "������������"
+
+msgid "State"
+msgstr "������"
+
+msgid "Network Type"
+msgstr "������������"
+
+msgid "Address Space"
+msgstr "������������"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr "������������������������/������'\"'���"
+
+msgid "Isolated: no external network connection"
+msgstr "������: ������������������������"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT: ���������������������������������������"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr "���������������������������������������������������������"
+
+msgid "(No interfaces found)"
+msgstr "(������������������������)"
+
+msgid "Destination"
+msgstr "������������"
+
+msgid "Enable VLAN"
+msgstr "������VLAN"
+
+msgid "VLAN ID"
+msgstr "VLAN���"
+
+msgid "Stop"
+msgstr "������"
+
+msgid "Generate a New Debug Report"
+msgstr "������������������������������"
+
+msgid "Report Name"
+msgstr "���������������"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������������������������ ('_') ���������������'-'���"
+
+msgid "Rename a Debug Report"
+msgstr "���������������������������"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr "������������������������������������������������������������������������������������(\"-\")���"
+
+msgid "Submit"
+msgstr "������"
+
+msgid "Add a Repository"
+msgstr "������������������������"
+
+msgid "Identifier"
+msgstr "���������"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "���������������������������������������"
+
+msgid "Textual name for the repository."
+msgstr "���������������������������"
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "���������������"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "���������������URL���������������������http���ftp������file"
+
+msgid "Repository is a mirror"
+msgstr "���������������������������"
+
+msgid "Distribution"
+msgstr "���������"
+
+msgid "Distribution of the DEB repository."
+msgstr "DEB������������������"
+
+msgid "Components"
+msgstr "������"
+
+msgid "List of components in DEB repository."
+msgstr "DEB������������������������"
+
+msgid "Edit Repository"
+msgstr "������������������"
+
+msgid "Mirror List URL"
+msgstr "������������URL"
+
+msgid "Yes"
+msgstr "���"
+
+msgid "No"
+msgstr "���"
+
+msgid "Capacity"
+msgstr "������"
+
+msgid "Allocated"
+msgstr "���������"
+
+msgid "Location"
+msgstr "������"
+
+msgid "Device path"
+msgstr "������������"
+
+msgid "active"
+msgstr "���������"
+
+msgid "inactive"
+msgstr "���������"
+
+msgid "Deactivate"
+msgstr "������"
+
+msgid "Activate"
+msgstr "������"
+
+msgid "Add Volume"
+msgstr "���������"
+
+msgid "Extend"
+msgstr "������"
+
+msgid "Undefine"
+msgstr "������������"
+
+msgid "Format"
+msgstr "������"
+
+msgid "Allocation"
+msgstr "������"
+
+msgid "Define a New Storage Pool"
+msgstr "���������������������������"
+
+msgid "Storage Pool Name"
+msgstr "���������������"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr "���������������������������������������������������������������"
+
+msgid "Storage Pool Type"
+msgstr "���������������"
+
+msgid "Storage Path"
+msgstr "������������"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr "������������������.���������������������������������������"
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr "������������������������KIMCHI���������������������������������������������"
+
+msgid "NFS Server IP"
+msgstr "NFS���������IP"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr "NFS���������IP���������������������������������������������������������������������"
+
+msgid "NFS Path"
+msgstr "NFS ������"
+
+msgid "The NFS exported path on NFS server."
+msgstr "NFS���������������������NFS������"
+
+msgid "iSCSI Server"
+msgstr "iSCSI���������"
+
+msgid "Server"
+msgstr "���������"
+
+msgid "Port"
+msgstr "������"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "iSCSI���������IP������������������ ���������������"
+
+msgid "Target"
+msgstr "������"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "iSCSI������"
+
+msgid "Add iSCSI Authentication"
+msgstr "������ISCSI������"
+
+msgid "iSCSI Authentication"
+msgstr "iSCSI������"
+
+msgid "User Name"
+msgstr "���������"
+
+msgid "Password"
+msgstr "������"
+
+msgid "SCSI Adapter"
+msgstr "SCSI���������"
+
+msgid "Please, wait..."
+msgstr "���������..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr "���������������������������"
+
+msgid "Fetch from remote URL"
+msgstr "���������URL������"
+
+msgid "Enter the remote URL here."
+msgstr "���������������������URL���"
+
+msgid "Upload a file"
+msgstr "������������������"
+
+msgid "Choose the file you want to upload."
+msgstr "������������������������������"
+
+msgid "Add Template"
+msgstr "������������"
+
+msgid "Where is the source media for this template? "
+msgstr "������������������������������"
+
+msgid "Local ISO Image"
+msgstr "������ISO������"
+
+msgid "Local Image File"
+msgstr "������������������"
+
+msgid "Remote ISO Image"
+msgstr "������ISO������"
+
+msgid "Search ISOs"
+msgstr "������ISO"
+
+msgid "The following ISOs are available:"
+msgstr "������ISO������������"
+
+msgid "OS: "
+msgstr "��������������� "
+
+msgid "Version: "
+msgstr "��������� "
+
+msgid "Size: "
+msgstr "���������"
+
+msgid "Search more ISOs"
+msgstr "������������ISO"
+
+msgid "Create Templates from Selected ISO"
+msgstr "������������ISO���������������"
+
+msgid "I want to use a specific ISO file"
+msgstr "������������ISO������"
+
+msgid "Loading default remote ISOs ..."
+msgstr "���������������������ISOs ..."
+
+msgid "Arch: "
+msgstr "���������������"
+
+msgid "I want to use a custom URL"
+msgstr "���������������������������URL"
+
+msgid "Edit Template"
+msgstr "������������"
+
+msgid "CDROM"
+msgstr "������"
+
+msgid "Image File"
+msgstr "������������"
+
+msgid "Graphics"
+msgstr "������"
+
+msgid "Disk(GB)"
+msgstr "������(GB)"
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "CPU������"
+
+msgid "Manually set CPU topology"
+msgstr "������������CPU������"
+
+msgid "Cores"
+msgstr "���������"
+
+msgid "Threads"
+msgstr "������"
+
+msgid "No templates found."
+msgstr "������������������"
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "���������������%(resource)s"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "���������������%(resource)s"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "���������������%(resource)s"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "������������JSON������"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "������API���������JSON"
+
+#~ msgid "Parameters does not match requirement in schema: %(err)s"
+#~ msgstr "���������������������������������%(err)s"
+
+#~ msgid "You don't have permission to perform this operation."
+#~ msgstr "������������������������������������"
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "���������model������������������������������"
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "������������%(err)s������������������"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr "������'%(username)s'������������������.[���������������%(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "������������������������Kimchi"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "������������Kimchi���%(item)s"
+
+#~ msgid "Invalid LDAP configuration: %(item)s : %(value)s"
+#~ msgstr "���������LDAP���������%(item)s : %(value)s"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "���������������������������%(item)s"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr "������'%(cmd)s'������%(seconds)s���������������"
+
+#~ msgid "Peers"
+#~ msgstr "���������"
+
+#~ msgid "Searching"
+#~ msgstr "������������"
+
+#~ msgid "No peers found."
+#~ msgstr "������������������������"
+
+#~ msgid "Help"
+#~ msgstr "������"
+
+#~ msgid "About"
+#~ msgstr "������"
+
+#~ msgid "Log out"
+#~ msgstr "������"
+
+#~ msgid "Version:"
+#~ msgstr "���������"
+
+#~ msgid "Session timeout, please re-login."
+#~ msgstr "���������������������������������"
diff --git a/plugins/gingerbase/po/zh_TW.po b/plugins/gingerbase/po/zh_TW.po
new file mode 100644
index 0000000..635e81c
--- /dev/null
+++ b/plugins/gingerbase/po/zh_TW.po
@@ -0,0 +1,2138 @@
+# English translations for gingerbase package.
+# Copyright (C) 2013 ORGANIZATION
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gingerbase 0.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-07-01 16:11-0300\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid "Unknown parameter %(value)s"
+msgstr ""
+
+#, python-format
+msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
+msgstr ""
+
+#, python-format
+msgid "User %(user_id)s not found with given LDAP settings."
+msgstr ""
+
+msgid "Unknown \"_cap\" specified"
+msgstr ""
+
+msgid "\"_passthrough\" should be \"true\" or \"false\""
+msgstr ""
+
+msgid "\"_passthrough_affected_by\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid "Error while getting block devices. Details: %(err)s"
+msgstr "���������������������������������������������������%(err)s"
+
+#, python-format
+msgid "Error while getting block device information for %(device)s."
+msgstr "������ %(device)s ���������������������������������������"
+
+#, python-format
+msgid "Unable to find distro file: %(filename)s"
+msgstr "��������� distro ���������%(filename)s"
+
+#, python-format
+msgid ""
+"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
+msgstr "������������ distro ���������%(filename)s������������������ JSON ���������"
+
+#, python-format
+msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
+msgstr "������������ iSCSI ������������ %(portal)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to login to iSCSI host %(host)s target %(target)s"
+msgstr "������������ iSCSI ������ %(host)s ������ %(target)s"
+
+#, python-format
+msgid "Unable to find ISO file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid "The ISO file %(filename)s is not bootable"
+msgstr "ISO ������ %(filename)s ������������"
+
+#, python-format
+msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
+msgstr "ISO ������ %(filename)s ��������������� El Torito ������������"
+
+#, python-format
+msgid "Invalid El Torito validation entry in ISO %(filename)s"
+msgstr "ISO %(filename)s ��������������� El Torito ������������"
+
+#, python-format
+msgid "Invalid El Torito boot indicator in ISO %(filename)s"
+msgstr "ISO %(filename)s ��������������� El Torito ���������������"
+
+#, python-format
+msgid "Unexpected volume type for primary volume in ISO %(filename)s"
+msgstr "ISO %(filename)s ���������������������������������������������"
+
+#, python-format
+msgid "Bad format while reading volume descriptor in ISO %(filename)s"
+msgstr "������ ISO %(filename)s ���������������������������������������������"
+
+#, python-format
+msgid ""
+"The hypervisor doesn't have permission to use this ISO %(filename)s. "
+"Consider moving it under /var/lib/libvirt, or set the search permission to "
+"file access control lists for '%(user)s' user if possible, or add the "
+"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
+"'path_to_iso'.Details: %(err)s"
+msgstr ""
+"Hypervisor ��������������� ISO %(filename)s ��������������������������������������� /var/lib/"
+"libvirt ������������������������������'%(user)s' ���������������������������������������������������������"
+"��� '%(user)s' ��������� ISO ������������������������������������������������������ 'chmod -R o+x "
+"'path_to_iso'������������������%(err)s"
+
+msgid "An error occurred when probing image OS information."
+msgstr ""
+
+msgid "No OS information found in given image."
+msgstr ""
+
+#, python-format
+msgid "Unable to read image file %(filename)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Image file must be an existing file on system. %(filename)s is not a valid "
+"input."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine %(name)s already exists"
+msgstr "������������ %(name)s ���������"
+
+#, python-format
+msgid "Virtual machine %(name)s does not exist"
+msgstr "������������ %(name)s ���������"
+
+#, python-format
+msgid ""
+"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
+"in use or the virtual machine is not powered off."
+msgstr ""
+
+#, python-format
+msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
+msgstr "��������������������������������� %(name)s ���������"
+
+msgid "Remote ISO image is not supported by this server."
+msgstr "��������������������������� ISO ������������"
+
+#, python-format
+msgid "Screenshot is not supported on virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to connect to powered off virtual machine %(name)s."
+msgstr ""
+
+msgid "Virtual machine name must be a string without slashes (/)"
+msgstr ""
+
+#, python-format
+msgid "Invalid template URI %(value)s specified for virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for virtual machine"
+msgstr ""
+
+msgid "Supported virtual machine graphics are Spice or VNC"
+msgstr ""
+
+msgid "Graphics address to listen on must be IPv4 or IPv6"
+msgstr "������������������������������������ IPv4 ��� IPv6"
+
+msgid "Specify a template to create a virtual machine from"
+msgstr "���������������������������������������"
+
+#, python-format
+msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������������ %(name)s������������������%(err)s"
+
+msgid "User name list must be an array"
+msgstr ""
+
+msgid "User name must be a string"
+msgstr "���������������������������"
+
+msgid "Group name list must be an array"
+msgstr ""
+
+msgid "Group name must be a string"
+msgstr "���������������������������"
+
+#, python-format
+msgid "User(s) '%(users)s' do not exist"
+msgstr "��������� '%(users)s' ������������"
+
+#, python-format
+msgid "Group(s) '%(groups)s' do not exist"
+msgstr "��������� '%(groups)s' ������������"
+
+#, python-format
+msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+msgid "The guest console password must be a string."
+msgstr ""
+
+msgid "The life time for the guest console password must be a number."
+msgstr ""
+
+#, python-format
+msgid "Virtual machine '%(name)s' must be stopped before cloning it."
+msgstr ""
+
+#, python-format
+msgid "Insufficient disk space to clone virtual machine '%(name)s'"
+msgstr ""
+
+#, python-format
+msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Invalid operation for non-persistent virtual machine %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot suspend VM '%(name)s' because it is not running."
+msgstr ""
+
+#, python-format
+msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Cannot resume VM '%(name)s' because it is not paused."
+msgstr ""
+
+#, python-format
+msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
+msgstr ""
+
+msgid "Memory assigned is higher then the maximum allowed in the host."
+msgstr ""
+
+#, python-format
+msgid ""
+"VM '%(name)s' does not support live memory update. Update the memory with "
+"the machine offline to enable this feature."
+msgstr ""
+
+msgid "Only increase memory is allowed in active VMs"
+msgstr ""
+
+msgid ""
+"For live memory update, new memory value must be equal old memory value plus "
+"multiples of 1024 Mib"
+msgstr ""
+
+msgid "There are not enough free slots of 1024 Mib in the guest."
+msgstr ""
+
+msgid ""
+"Host's libvirt version does not support memory devices. Libvirt must be >= "
+"1.2.14"
+msgstr ""
+
+#, python-format
+msgid "Error attaching memory device. Details: %(error)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
+msgstr ""
+
+#, python-format
+msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
+msgstr ""
+
+msgid ""
+"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
+"correctly. Please enable Intel VT-d or AMD IOMMU in your BIOS, then verify "
+"the Kernel is compiled with IOMMU support. For Intel CPU, add intel_iommu=on "
+"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
+"iommu=1."
+msgstr ""
+
+msgid "\"name\" should be a device name string"
+msgstr ""
+
+#, python-format
+msgid ""
+"The device %(name)s is probably in use by the host. Unable to attach it to "
+"the guest."
+msgstr ""
+
+#, python-format
+msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
+msgstr "������ %(iface)s ������������������������ %(name)s ���"
+
+#, python-format
+msgid ""
+"Network %(network)s specified for virtual machine %(name)s does not exist"
+msgstr "��������������� %(name)s ��������������� %(network)s ���������"
+
+msgid "Supported virtual machine interfaces type is only network"
+msgstr "���������������������������������������������������"
+
+msgid "Network name for virtual machine interface must be a string"
+msgstr "������������������������������������������������"
+
+msgid "Invalid network model card specified for virtual machine interface"
+msgstr "���������������������������������������������������"
+
+msgid "Specify type and network to add a new virtual machine interface"
+msgstr "������������������������������������������������"
+
+msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
+msgstr ""
+
+#, python-format
+msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
+msgstr ""
+
+msgid "Invalid MAC Address"
+msgstr ""
+
+msgid "Cannot change MAC address of a running virtual machine"
+msgstr ""
+
+#, python-format
+msgid "Template %(name)s already exists"
+msgstr "������ %(name)s ���������"
+
+#, python-format
+msgid ""
+"Network '%(network)s' specified for template %(template)s does not exist"
+msgstr "��������� %(template)s ��������������� '%(network)s' ���������"
+
+#, python-format
+msgid ""
+"Storage pool %(pool)s specified for template %(template)s does not exist"
+msgstr "��������� %(template)s ������������������ '%(pool)s' ���������"
+
+#, python-format
+msgid "Storage pool %(pool)s specified for template %(template)s is not active"
+msgstr "��������� %(template)s ������������������ '%(pool)s' ������������������������"
+
+#, python-format
+msgid "Invalid parameter '%(param)s' specified for CDROM."
+msgstr "��� CDROM ��������������� '%(param)s' ���������"
+
+#, python-format
+msgid "Network %(network)s specified for template %(template)s is not active"
+msgstr "��������� %(template)s ��������������� %(network)s ������������������������"
+
+msgid "Template name must be a string"
+msgstr "���������������������������"
+
+msgid "Template icon must be a path to the image"
+msgstr "������������������������������������"
+
+msgid "Template distribution must be a string"
+msgstr "���������������������������������"
+
+msgid "Template distribution version must be a string"
+msgstr "���������������������������������"
+
+msgid "The number of CPUs must be an integer greater than 0"
+msgstr "CPU ���������������������"
+
+msgid "Amount of memory (MB) must be an integer greater than 512"
+msgstr "��������������� (MB) ��������������� 512 ���������"
+
+msgid "Template CDROM must be a local or remote ISO file"
+msgstr "������ CDROM ������������������������ ISO ������"
+
+#, python-format
+msgid "Invalid storage pool URI %(value)s specified for template"
+msgstr "��������������������������� URI %(value)s ������"
+
+msgid "Specify an ISO image as CDROM or a base image to create a template"
+msgstr "������ ISO ��������������� CDROM ���������������"
+
+msgid "All networks for the template must be specified in a list."
+msgstr "���������������������������������������������������"
+
+msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
+msgstr ""
+
+#, python-format
+msgid "The volume %(volume)s is not in storage pool %(pool)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to create template due error: %(err)s"
+msgstr "������������������������������������������%(err)s"
+
+#, python-format
+msgid "Unable to delete template due error: %(err)s"
+msgstr "������������������������������������������%(err)s"
+
+msgid "Disk size must be an integer greater than 1GB."
+msgstr ""
+
+msgid "Template base image must be a valid local image file"
+msgstr "������ CDROM ������������������������ ISO ������"
+
+#, python-format
+msgid "Cannot identify base image %(path)s format"
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
+"threads."
+msgstr ""
+
+msgid ""
+"When specifying CPU topology, each element must be an integer greater than "
+"zero."
+msgstr ""
+
+msgid ""
+"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+#, python-format
+msgid "Storage pool %(name)s already exists"
+msgstr "��������� %(name)s ���������"
+
+#, python-format
+msgid "Storage pool %(name)s does not exist"
+msgstr "��������� %(name)s ���������"
+
+#, python-format
+msgid "Specify %(item)s in order to create the storage pool %(name)s"
+msgstr "������ %(item)s ������������������ %(name)s"
+
+#, python-format
+msgid "Unable to delete active storage pool %(name)s"
+msgstr "��������������������������������� %(name)s"
+
+#, python-format
+msgid "Unable to list storage pools. Details: %(err)s"
+msgstr "���������������������������������������%(err)s"
+
+#, python-format
+msgid "Unable to create storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������� %(name)s������������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to get number of storage volumes in storage pool %(name)s. Details: "
+"%(err)s"
+msgstr "��������������������� %(name)s ������������������������������������������%(err)s"
+
+#, python-format
+msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������� %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������������� %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
+msgstr "��������������������� %(name)s������������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to create NFS Pool as export path %(path)s may block during mount"
+msgstr "������������ NFS ������������������������������������������������ %(path)s ���������������"
+
+#, python-format
+msgid "Unable to create NFS Pool as export path %(path)s mount failed"
+msgstr "������������ NFS ������������������������������ %(path)s ������������"
+
+#, python-format
+msgid "Unsupported storage pool type: %(type)s"
+msgstr "���������������������������������%(type)s"
+
+#, python-format
+msgid "Error while retrieving storage pool XML to %(pool)s"
+msgstr ""
+
+msgid "Storage pool name must be a string without slashes (/)"
+msgstr ""
+
+msgid ""
+"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
+"iso"
+msgstr ""
+
+msgid "Storage pool path must be a string"
+msgstr "������������������������������"
+
+msgid "Storage pool host must be a IP or hostname"
+msgstr "������������������������ IP ���������������"
+
+msgid "Storage pool device must be the absolute path to the block device"
+msgstr ""
+
+msgid "Storage pool devices parameter must be a list"
+msgstr "������������������������������������"
+
+msgid "Target IQN of an iSCSI pool must be a string"
+msgstr "iSCSI ������������������ IQN ���������������"
+
+msgid "Port of a remote storage server must be an integer between 1 and 65535"
+msgstr "��������������������������������������������� 1 ��� 65535 ���������������"
+
+msgid "iSCSI target username must be a string"
+msgstr ""
+
+msgid "iSCSI target password must be a string"
+msgstr ""
+
+msgid "Specify name and type to create a storage pool"
+msgstr "���������������������������������������"
+
+#, python-format
+msgid ""
+"%(disk)s is not a valid disk/partition. Could not add it to the pool "
+"%(pool)s."
+msgstr "%(disk)s ���������������������/������������������������������������������%(pool)s���"
+
+#, python-format
+msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
+msgstr ""
+
+msgid "The parameter disks only can be updated for logical storage pool."
+msgstr "������������������������������������������������������������"
+
+msgid "The SCSI host adapter name must be a string."
+msgstr "SCSI ���������������������������������������"
+
+msgid "The storage pool kimchi_isos is reserved for internal use"
+msgstr "��������� kimchi_isos ���������������������"
+
+#, python-format
+msgid ""
+"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr "������������ NFS ��������� %(name)s���NFS ��������� %(server)s���������������"
+
+#, python-format
+msgid ""
+"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
+"unreachable."
+msgstr "������������������ NFS ��������� %(name)s���NFS ��������� %(server)s���������������"
+
+#, python-format
+msgid ""
+"Unable to deactivate pool %(name)s as it is associated with some templates"
+msgstr "��������������������������� %(name)s������������������������������������"
+
+#, python-format
+msgid "Unable to delete pool %(name)s as it is associated with some templates"
+msgstr "��������������������� %(name)s������������������������������������"
+
+#, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr "������ '%(name)s' ������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Unable to update database with deep scan information due error: %(err)s"
+msgstr "������������������������������������������������������������������������%(err)s"
+
+#, python-format
+msgid "Storage volume %(name)s already exists"
+msgstr "������������ %(name)s ���������"
+
+#, python-format
+msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
+msgstr "������������ %(name)s ��������������������� %(pool)s ���"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
+"not active"
+msgstr ""
+
+#, python-format
+msgid "Specify %(item)s in order to create storage volume %(volume)s"
+msgstr "������ %(item)s ��������������������� %(volume)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes because storage pool %(pool)s is not active"
+msgstr "������������������������������������������ %(pool)s ������������������������"
+
+#, python-format
+msgid ""
+"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
+"%(err)s"
+msgstr "������������������ %(pool)s ��������������������� %(name)s������������������%(err)s"
+
+#, python-format
+msgid ""
+"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
+msgstr "��������������������� %(pool)s ������������������������������������%(err)s"
+
+#, python-format
+msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s ���������������������������%(err)s"
+
+#, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr "��������������� %(type)s ������������������������������"
+
+msgid "Storage volume name must be a string"
+msgstr "���������������������������������"
+
+msgid "Storage volume allocation must be an integer number"
+msgstr "���������������������������������"
+
+msgid ""
+"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
+msgstr ""
+
+msgid "Storage volume requires a volume name"
+msgstr "������������������������������"
+
+#, python-format
+msgid ""
+"Unable to update database with storage volume information due error: %(err)s"
+msgstr "������������������������������������������������������������������������%(err)s"
+
+#, python-format
+msgid "Only one of parameter %(param)s can be specified"
+msgstr ""
+
+#, python-format
+msgid "Create volume from %(param)s is not supported"
+msgstr ""
+
+msgid "Storage volume capacity must be an integer number."
+msgstr ""
+
+msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
+msgstr ""
+
+#, python-format
+msgid "Unable to access file %(url)s. Please, check it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
+"%(err)s"
+msgstr ""
+
+msgid "Specify chunk data and its size to upload a file."
+msgstr ""
+
+msgid "In order to upload a storage volume, specify the 'upload' parameter."
+msgstr ""
+
+msgid ""
+"Unable to upload chunk data as it does not match with requested chunk size."
+msgstr ""
+
+#, python-format
+msgid "The storage volume %(vol)s is not under an upload process."
+msgstr ""
+
+msgid "The upload chunk data will exceed the storage volume size."
+msgstr ""
+
+#, python-format
+msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
+msgstr ""
+
+#, python-format
+msgid "Interface %(name)s does not exist"
+msgstr "������ %(name)s ���������"
+
+#, python-format
+msgid "Network %(name)s already exists"
+msgstr "������ %(name)s ���������"
+
+#, python-format
+msgid "Network %(name)s does not exist"
+msgstr "������ %(name)s ���������"
+
+#, python-format
+msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
+msgstr "��������� %(network)s ������������������ %(subnet)s ���������"
+
+#, python-format
+msgid "Specify a network interface to create bridged network %(name)s"
+msgstr "������������������������������������������ %(name)s"
+
+#, python-format
+msgid "Unable to delete active network %(name)s"
+msgstr "������������������������������ %(name)s"
+
+#, python-format
+msgid "Interface %(iface)s specified for network %(network)s is already in use"
+msgstr "��������� %(network)s ��������������� %(iface)s ���������������"
+
+msgid "Interface should be bare NIC, bonding or bridge device."
+msgstr "��������������������� NIC������������������������������������"
+
+#, python-format
+msgid "Unable to create network %(name)s. Details: %(err)s"
+msgstr "������������������ %(name)s������������������%(err)s"
+
+#, python-format
+msgid "Unable to find a free IP address for network '%(name)s'"
+msgstr "��������������� '%(name)s' ��������� IP ������"
+
+#, python-format
+msgid "The interface %(iface)s already exists."
+msgstr ""
+
+msgid "Network name must be a string without slashes (/) or quotes (\")"
+msgstr ""
+
+msgid "Supported network types are isolated, NAT and bridge"
+msgstr "���������������������������������������NAT ������������"
+
+msgid "Network subnet must be a string with IP address and prefix or netmask"
+msgstr "��������������������������������� IP ���������������������������������������"
+
+msgid "Network interface must be a string"
+msgstr "���������������������������"
+
+msgid "Network VLAN ID must be an integer between 1 and 4094"
+msgstr "������ VLAN ID ��������������� 1 ��� 4094 ���������������"
+
+msgid "Specify name and type to create a Network"
+msgstr "������������������������������������"
+
+#, python-format
+msgid ""
+"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
+"and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to deactivate network %(name)s. There are some virtual machines "
+"%(vms)s and/or templates linked to this network."
+msgstr ""
+
+#, python-format
+msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
+msgstr "��������������� %(name)s ��������� VLAN ������������������"
+
+#, python-format
+msgid "Failed to activate interface %(iface)s: %(err)s."
+msgstr "������������������ %(iface)s���%(err)s���"
+
+#, python-format
+msgid ""
+"Failed to activate interface %(iface)s. Please check the physical link "
+"status."
+msgstr "������������������ %(iface)s���������������������������������"
+
+#, python-format
+msgid "Failed to start network %(name)s. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid "Debug report %(name)s does not exist"
+msgstr "������������ %(name)s ���������"
+
+msgid "Debug report tool not found in system"
+msgstr "���������������������������������������"
+
+#, python-format
+msgid "Unable to create debug report %(name)s. Details: %(err)s."
+msgstr "������������������������ %(name)s������������������%(err)s���"
+
+#, python-format
+msgid "Can not find any debug report with the given name %(name)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to generate debug report %(name)s. Details: %(err)s"
+msgstr "������������������������ %(name)s������������������%(err)s"
+
+msgid "You should give a name for the debug report file."
+msgstr ""
+
+msgid ""
+"Debug report name must be a string. Only letters, digits, underscore ('_') "
+"and hyphen ('-') are allowed."
+msgstr ""
+
+#, python-format
+msgid ""
+"The debug report with specified name \"%(name)s\" already exists. Please use "
+"another one."
+msgstr "������ '%(name)s' ������������������������������������������������������������������������������"
+
+#, python-format
+msgid "Storage server %(server)s was not used by Kimchi"
+msgstr "Kimchi ��������������������������� %(server)s"
+
+#, python-format
+msgid "Distro '%(name)s' does not exist"
+msgstr "Distro '%(name)s' ���������"
+
+#, python-format
+msgid "Partition %(name)s does not exist in the host"
+msgstr "��������� %(name)s ���������������������"
+
+msgid "Unable to shutdown host machine as there are running virtual machines"
+msgstr "���������������������������������������������������������������"
+
+msgid "Unable to reboot host machine as there are running virtual machines"
+msgstr "������������������������������������������������������������������������"
+
+#, python-format
+msgid "Node device '%(name)s' not found"
+msgstr "��������������������� '%(name)s'"
+
+msgid "Conflicting flag filters specified."
+msgstr ""
+
+msgid "No packages marked for update"
+msgstr "������������������������������������"
+
+#, python-format
+msgid "Package %(name)s is not marked to be updated."
+msgstr "������ %(name)s ������������������������������"
+
+#, python-format
+msgid "Error while getting packages marked to be updated. Details: %(err)s"
+msgstr "������������������������������������������������������������������������%(err)s"
+
+msgid "There is no compatible package manager for this system."
+msgstr "���������������������������������������������"
+
+#, python-format
+msgid "Invalid URI %(uri)s"
+msgstr "URI %(uri)s ������"
+
+msgid "Unable to choose a virtual machine name"
+msgstr ""
+
+msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
+msgstr "���������������������������������������������'cdrom'"
+
+#, python-format
+msgid "The path '%(value)s' is not a valid local/remote path for the device"
+msgstr ""
+
+msgid "Only CDROM path can be update."
+msgstr ""
+
+#, python-format
+msgid ""
+"The storage device %(dev_name)s does not exist in the virtual machine "
+"%(vm_name)s"
+msgstr ""
+
+#, python-format
+msgid "Error while creating new storage device: %(error)s"
+msgstr "������������������������������������������%(error)s"
+
+#, python-format
+msgid "Error while updating storage device: %(error)s"
+msgstr "������������������������������������%(error)s"
+
+#, python-format
+msgid "Error while removing storage device: %(error)s"
+msgstr "������������������������������������%(error)s"
+
+msgid "Do not support IDE device hot plug"
+msgstr ""
+
+msgid ""
+"Specify type and path or type and pool/volume to add a new virtual machine "
+"disk"
+msgstr "������������������������������������������������"
+
+msgid "Specify path to update virtual machine disk"
+msgstr "���������������������������������������"
+
+#, python-format
+msgid "Controller type %(type)s limitation of %(limit)s devices reached"
+msgstr ""
+
+#, python-format
+msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
+msgstr ""
+
+msgid "Volume already in use by other virtual machine."
+msgstr ""
+
+msgid ""
+"Only one of path or pool/volume can be specified to add a new virtual "
+"machine disk"
+msgstr "������������������������������������������������"
+
+#, python-format
+msgid ""
+"Volume chosen with format %(format)s does not fit in the storage type "
+"%(type)s"
+msgstr ""
+
+msgid "YUM Repository ID must be one word only string."
+msgstr "YUM ��������� ID ���������������������������������������"
+
+msgid "Repository URL must be an http://, ftp:// or file:// URL."
+msgstr "��������� URL ��������� http://���ftp:// ��� file:// URL���"
+
+msgid ""
+"Repository configuration is a dictionary with specific values according to "
+"repository type."
+msgstr "������������������������������������������������������������������������������"
+
+msgid "Distribution to DEB repository must be a string"
+msgstr "DEB ���������������������������������������"
+
+msgid "Components to DEB repository must be listed in a array"
+msgstr "DEB ������������������������������������������������"
+
+msgid "Components to DEB repository must be a string"
+msgstr "DEB ���������������������������������"
+
+msgid "Mirror list to repository must be a string"
+msgstr ""
+
+msgid "YUM Repository name must be string."
+msgstr "YUM ���������������������������������"
+
+msgid "GPG check must be a boolean value."
+msgstr "GPG ���������������������������"
+
+msgid "GPG key must be a URL pointing to the ASCII-armored file."
+msgstr "GPG ��������������������� ASCII ��������������� URL���"
+
+#, python-format
+msgid "Could not update repository %(repo_id)s."
+msgstr "��������������������� %(repo_id)s���"
+
+#, python-format
+msgid "Repository %(repo_id)s does not exist."
+msgstr "��������� %(repo_id)s ������������"
+
+msgid ""
+"Specify repository base URL, mirror list or metalink in order to create or "
+"update a YUM repository."
+msgstr ""
+
+msgid "Repository management tool was not recognized for your system."
+msgstr "���������������������������������������������"
+
+#, python-format
+msgid "Repository %(repo_id)s is already enabled."
+msgstr "������������������ %(repo_id)s���"
+
+#, python-format
+msgid "Repository %(repo_id)s is already disabled."
+msgstr "������������������ %(repo_id)s���"
+
+#, python-format
+msgid "Could not remove repository %(repo_id)s."
+msgstr "��������������������� %(repo_id)s���"
+
+#, python-format
+msgid "Could not write repository configuration file %(repo_file)s"
+msgstr "������������������������������ %(repo_file)s"
+
+msgid "Specify repository distribution in order to create a DEB repository."
+msgstr "������������������������������������ DEB ������������"
+
+#, python-format
+msgid "Could not enable repository %(repo_id)s."
+msgstr "��������������������� %(repo_id)s���"
+
+#, python-format
+msgid "Could not disable repository %(repo_id)s."
+msgstr "��������������������� %(repo_id)s���"
+
+msgid "YUM Repository ID already exists"
+msgstr "YUM ��������� ID ���������"
+
+msgid "YUM Repository name must be a string"
+msgstr "YUM ������������������������������"
+
+#, python-format
+msgid "Unable to list repositories. Details: '%(err)s'"
+msgstr "���������������������������������������'%(err)s'"
+
+#, python-format
+msgid "Unable to retrieve repository information. Details: '%(err)s'"
+msgstr "���������������������������������������������'%(err)s'"
+
+#, python-format
+msgid "Unable to add repository. Details: '%(err)s'"
+msgstr "���������������������������������������'%(err)s'"
+
+#, python-format
+msgid "Unable to remove repository. Details: '%(err)s'"
+msgstr "���������������������������������������'%(err)s'"
+
+#, python-format
+msgid ""
+"Configuration items: '%(items)s' are not supported by repository manager"
+msgstr ""
+
+msgid "Repository metalink must be an http://, ftp:// or file:// URL."
+msgstr ""
+
+msgid "Cannot specify mirrorlist and metalink at the same time."
+msgstr ""
+
+#, python-format
+msgid ""
+"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
+"%(err)s"
+msgstr ""
+
+#, python-format
+msgid ""
+"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
+"disk with format '%(format)s'; only 'qcow2' is supported."
+msgstr ""
+
+msgid "The number of vCPUs is too large for this system."
+msgstr ""
+
+msgid "Invalid vCPU/topology combination."
+msgstr ""
+
+msgid "This host (or current configuration) does not allow CPU topology."
+msgstr ""
+
+msgid "ERROR CODE"
+msgstr "���������"
+
+msgid "REASON"
+msgstr "������"
+
+msgid "STACK"
+msgstr "������"
+
+msgid "Go to Homepage"
+msgstr "������������"
+
+msgid "Create a New Virtual Machine"
+msgstr "������������������������"
+
+msgid "Virtual Machine Name"
+msgstr "������������������"
+
+msgid ""
+"The name used to identify the virtual machine. If omitted, a name will be "
+"chosen based on the template used."
+msgstr "���������������������������������������������������������������������������������������������"
+
+msgid "Template"
+msgstr "������"
+
+msgid "Please create a template first."
+msgstr "���������������������"
+
+msgid "Create a Template"
+msgstr "������������"
+
+msgid "Please choose a template."
+msgstr "������������������"
+
+msgid "OS"
+msgstr "OS"
+
+msgid "OS Version"
+msgstr "OS ������"
+
+msgid "CPUS"
+msgstr "CPUS"
+
+msgid "Memory"
+msgstr "���������"
+
+msgid "Create"
+msgstr "������"
+
+msgid "Creating..."
+msgstr ""
+
+msgid "Cancel"
+msgstr "������ "
+
+msgid "Edit Guest"
+msgstr "������������"
+
+msgid "General"
+msgstr "������"
+
+msgid "Storage"
+msgstr "���������"
+
+msgid "Interface"
+msgstr "������"
+
+msgid "Permission"
+msgstr "������"
+
+msgid "Host PCI Device"
+msgstr ""
+
+msgid "Snapshot"
+msgstr ""
+
+msgid "Name"
+msgstr "������"
+
+msgid "CPUs"
+msgstr "CPU"
+
+msgid "Memory (MB)"
+msgstr "���������"
+
+msgid "Icon"
+msgstr "������"
+
+msgid "Device"
+msgstr "������������"
+
+msgid "Path"
+msgstr "NFS ������"
+
+msgid "Network"
+msgstr "������"
+
+msgid "Type"
+msgstr "������"
+
+msgid "MAC Address"
+msgstr ""
+
+msgid "Available system users and groups"
+msgstr ""
+
+msgid "Selected system users and groups"
+msgstr ""
+
+msgid "User"
+msgstr ""
+
+msgid "All"
+msgstr "������"
+
+msgid "To Add"
+msgstr ""
+
+msgid "Added"
+msgstr ""
+
+msgid "filter"
+msgstr ""
+
+msgid "Product"
+msgstr ""
+
+msgid "Vendor"
+msgstr "���������"
+
+msgid "Created"
+msgstr ""
+
+msgid "Save"
+msgstr "������"
+
+msgid "Replace"
+msgstr "������"
+
+msgid "Detach"
+msgstr "������"
+
+msgid "revert"
+msgstr ""
+
+msgid "Start"
+msgstr "������"
+
+msgid "Reset"
+msgstr "������"
+
+msgid "Pause"
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Power Off"
+msgstr ""
+
+msgid "Actions"
+msgstr "������"
+
+msgid "Connect"
+msgstr "������"
+
+msgid "Clone"
+msgstr ""
+
+msgid "Edit"
+msgstr "������"
+
+msgid "Shut Down"
+msgstr "������"
+
+msgid "Delete"
+msgstr "������"
+
+msgid "CPU"
+msgstr "CPU"
+
+msgid "Disk I/O"
+msgstr "������ I/O"
+
+msgid "Network I/O"
+msgstr "������ I/O"
+
+msgid "Livetile"
+msgstr "Livetile"
+
+msgid "No guests found."
+msgstr "������������������"
+
+msgid "Add a Storage Device to VM"
+msgstr "������������������������ VM"
+
+msgid "Device Type"
+msgstr "������������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "������������������������������ \"cdrom\"���"
+
+msgid "Storage Pool"
+msgstr "���������"
+
+msgid "Storage pool which volume located in"
+msgstr "������������������������������"
+
+msgid "Storage Volume"
+msgstr "���������������"
+
+msgid "Storage volume to be attached"
+msgstr "���������������������������������"
+
+msgid "File Path"
+msgstr "������������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "CDROM ��� ISO ������������������������������"
+
+msgid "Attach"
+msgstr "������"
+
+msgid "Shut down"
+msgstr "������"
+
+msgid "Restart"
+msgstr "������������"
+
+msgid "Basic Information"
+msgstr "������������"
+
+msgid "OS Distro"
+msgstr "OS Distro"
+
+msgid "OS Code Name"
+msgstr "OS ���������������"
+
+msgid "Processor"
+msgstr "���������"
+
+msgid "CPU(s)"
+msgstr ""
+
+msgid "System Statistics"
+msgstr "������������������"
+
+msgid "Software Updates"
+msgstr "������������"
+
+msgid "Update Progress"
+msgstr "������������"
+
+msgid "Repositories"
+msgstr "���������"
+
+msgid "Debug Reports"
+msgstr "������������"
+
+msgid "The username or password you entered is incorrect. Please try again."
+msgstr "������������������������������������������������������������"
+
+msgid "This field is required."
+msgstr "������������������������"
+
+msgid "Log in"
+msgstr "������"
+
+msgid "Logging in..."
+msgstr "������������..."
+
+msgid "Host"
+msgstr "������"
+
+msgid "Guests"
+msgstr "������"
+
+msgid "Templates"
+msgstr "������"
+
+msgid "Failed to get application configuration"
+msgstr "������������������������������"
+
+msgid "This is not a valid Linux path"
+msgstr "��������������� Linux ������"
+
+msgid "This is not a valid URL."
+msgstr "��������������� URL���"
+
+msgid "No such data available."
+msgstr "���������������������������"
+
+msgid ""
+"Can not contact the host system. Verify the host system is up and that you "
+"have network connectivity to it. HTTP request response %1. "
+msgstr ""
+"������������������������������������������������������������������������������������������������������������HTTP "
+"��������������� %1���"
+
+msgid "Unable to read file."
+msgstr ""
+
+msgid "Error while uploading file."
+msgstr ""
+
+msgid "Delete Confirmation"
+msgstr "������������"
+
+msgid "OK"
+msgstr "������"
+
+msgid "Confirm"
+msgstr "������"
+
+msgid "Warning"
+msgstr "������"
+
+msgid "Cloning..."
+msgstr ""
+
+msgid "Loading..."
+msgstr "������������..."
+
+msgid "An error occurred while retrieving system information."
+msgstr ""
+
+msgid "Retry"
+msgstr "������"
+
+msgid "Detailed message:"
+msgstr "������������������"
+
+msgid "No ISO found"
+msgstr ""
+
+msgid "This is not a valid ISO file."
+msgstr "��������������� ISO ���������"
+
+msgid "This may take a long time. Do you want to continue?"
+msgstr "������������������������������������������"
+
+msgid "This will permanently delete the template. Would you like to continue?"
+msgstr "���������������������������������������������������"
+
+msgid "Unable to shut down system as there are some virtual machines running!"
+msgstr "������������������������������������������������������������������"
+
+msgid "Max:"
+msgstr "���������"
+
+msgid "Utilization"
+msgstr "���������"
+
+msgid "Available"
+msgstr "������"
+
+msgid "Read Rate"
+msgstr "������������"
+
+msgid "Write Rate"
+msgstr "������������"
+
+msgid "Received"
+msgstr "���������"
+
+msgid "Sent"
+msgstr "���������"
+
+msgid ""
+"Shutting down or restarting host will cause unsaved work lost. Continue to "
+"shut down/restarting?"
+msgstr "������������������������������������������������������������������������������/������������������"
+
+msgid ""
+"Repository will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr "������������������������������������������������������������������"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Base URL"
+msgstr "������ URL"
+
+msgid "Is Mirror"
+msgstr "���������"
+
+msgid "URL Args"
+msgstr "URL ������"
+
+msgid "Enabled"
+msgstr "���������"
+
+msgid "GPG Check"
+msgstr "GPG ������"
+
+msgid "GPG Key"
+msgstr "GPG ������"
+
+msgid "Add"
+msgstr "������"
+
+msgid "Remove"
+msgstr "������"
+
+msgid "Enable"
+msgstr "������"
+
+msgid "Disable"
+msgstr "������"
+
+msgid "Package Name"
+msgstr "������������"
+
+msgid "Version"
+msgstr "������"
+
+msgid "Architecture"
+msgstr "������"
+
+msgid "Repository"
+msgstr "���������"
+
+msgid "Update All"
+msgstr "������������"
+
+msgid "Updating..."
+msgstr "������������..."
+
+msgid "Failed to retrieve packages update information."
+msgstr ""
+
+msgid "Failed to update package(s)."
+msgstr "���������������������"
+
+msgid ""
+"Debug report will be removed permanently and can't be recovered. Do you want "
+"to continue?"
+msgstr "���������������������������������������������������������������������"
+
+msgid "Generated Time"
+msgstr "������������"
+
+msgid "Generate"
+msgstr "������"
+
+msgid "Generating..."
+msgstr "������������..."
+
+msgid "Rename"
+msgstr "������������"
+
+msgid "Download"
+msgstr "������"
+
+msgid ""
+"Report name should contain only letters, digits, underscore ('_') and/or "
+"hyphen ('-')."
+msgstr "���������������������������������������������/������������ ('-')���"
+
+msgid "Pending..."
+msgstr "������������..."
+
+msgid "Report name is the same as the original one."
+msgstr ""
+
+msgid ""
+"This will delete the virtual machine and its virtual disks. This operation "
+"cannot be undone. Would you like to continue?"
+msgstr "���������������������������������������������������������������������������������������������"
+
+msgid "Power off Confirmation"
+msgstr "������������"
+
+msgid ""
+"This action may produce undesirable results, for example unflushed disk "
+"cache in the guest. Would you like to continue?"
+msgstr ""
+
+msgid "Reset Confirmation"
+msgstr "������������"
+
+msgid ""
+"There is a risk of data loss caused by reset without the guest OS shutdown. "
+"Would you like to continue?"
+msgstr ""
+
+msgid "Shut Down Confirmation"
+msgstr "������������"
+
+msgid "Note the guest OS may ignore this request. Would you like to continue?"
+msgstr "���������������������������������������������������"
+
+msgid "Virtual Machine delete Confirmation"
+msgstr ""
+
+msgid ""
+"This virtual machine is not persistent. Power Off will delete it. Continue?"
+msgstr ""
+
+msgid ""
+"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
+"default storage pool. The same will happen when the target pool does not "
+"have enough space to clone the volumes. Do you want to continue?"
+msgstr ""
+
+msgid ""
+"This CDROM will be detached permanently and you can re-attach it. Continue "
+"to detach it?"
+msgstr ""
+"������������������������ CDROM��������������������������������������������������������� CDROM ������"
+
+msgid "Attaching..."
+msgstr "������������..."
+
+msgid "Replacing..."
+msgstr "������������..."
+
+msgid "Successfully attached!"
+msgstr "������������������"
+
+msgid "Successfully replaced!"
+msgstr "������������������"
+
+msgid "Successfully detached!"
+msgstr "������������������"
+
+msgid ""
+"This disk will be detached permanently and you can re-attach it. Continue to "
+"detach it?"
+msgstr ""
+
+msgid "interface:"
+msgstr ""
+
+msgid "address:"
+msgstr ""
+
+msgid "link_type:"
+msgstr ""
+
+msgid "block:"
+msgstr ""
+
+msgid "drive_type:"
+msgstr ""
+
+msgid "model:"
+msgstr ""
+
+msgid "Affected devices:"
+msgstr ""
+
+msgid "The VLAN id must be between 1 and 4094."
+msgstr "VLAN ID ������������ 1 ��� 4094 ���������"
+
+msgid "unavailable"
+msgstr "������������"
+
+msgid ""
+"This action will interrupt network connectivity for any virtual machine that "
+"depend on this network."
+msgstr "������������������������������������������������������������������������������������"
+
+msgid "Create a network"
+msgstr "������������"
+
+msgid ""
+"This network is not persistent. Instead of stop, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������"
+
+msgid ""
+"The bridged VLAN tag may not work well with NetworkManager enabled. You "
+"should consider disabling it."
+msgstr ""
+
+msgid ""
+"This will permanently delete the storage pool. Would you like to continue?"
+msgstr "������������������������������������������������������"
+
+msgid "This storage pool is empty."
+msgstr "������������������������"
+
+msgid ""
+"It will format your disk and you will loose any data in there, are you sure "
+"to continue? "
+msgstr "������������������������������������������������������������������������������������������������������"
+
+msgid "SCSI Fibre Channel"
+msgstr "SCSI ������������"
+
+msgid "No SCSI adapters found."
+msgstr "��������� SCSI ������������"
+
+msgid "Loading iSCSI targets..."
+msgstr ""
+
+msgid "No iSCSI found. Please input one."
+msgstr ""
+
+msgid "Failed to load iSCSI targets."
+msgstr ""
+
+msgid "The storage pool name can not be blank."
+msgstr "������������������������������"
+
+msgid "The storage pool path can not be blank."
+msgstr "������������������������������"
+
+msgid "NFS server mount path can not be blank."
+msgstr "NFS ������������������������������������"
+
+msgid "Invalid NFS mount path."
+msgstr "NFS ���������������������"
+
+msgid "No logical device selected."
+msgstr "������������������������"
+
+msgid "The iSCSI target can not be blank."
+msgstr "iSCSI ���������������������"
+
+msgid "Server name can not be blank."
+msgstr "������������������������������"
+
+msgid "This is not a valid Server Name or IP. Please, modify it."
+msgstr ""
+
+msgid "Looking for available partitions ..."
+msgstr "������������������������������ ..."
+
+msgid "No available partitions found."
+msgstr "������������������������������"
+
+msgid ""
+"This storage pool is not persistent. Instead of deactivate, this action will "
+"permanently delete it. Would you like to continue?"
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������"
+
+msgid "Unable to retrieve partitions information."
+msgstr "���������������������������������������������'%(err)s'"
+
+msgid "In progress..."
+msgstr ""
+
+msgid "Failed!"
+msgstr ""
+
+msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
+msgstr ""
+
+msgid "Disk pool or volume cannot be blank."
+msgstr "������������������������������"
+
+msgid "Filter"
+msgstr ""
+
+msgid "Network Name"
+msgstr "������������"
+
+msgid "State"
+msgstr "������"
+
+msgid "Network Type"
+msgstr "������������"
+
+msgid "Address Space"
+msgstr "������������"
+
+msgid "Name should not contain '/' and '\"'."
+msgstr "������������������������������������������ '/'���"
+
+msgid "Isolated: no external network connection"
+msgstr "������������������������������������"
+
+msgid "NAT: outbound physical network connection only"
+msgstr "NAT���������������������������������"
+
+msgid "Bridged: Virtual machines are connected to physical network directly"
+msgstr "������������������������������������������������������"
+
+msgid "(No interfaces found)"
+msgstr ""
+
+msgid "Destination"
+msgstr "������������"
+
+msgid "Enable VLAN"
+msgstr "������ VLAN���"
+
+msgid "VLAN ID"
+msgstr "VLAN ID���"
+
+msgid "Stop"
+msgstr "������"
+
+msgid "Generate a New Debug Report"
+msgstr "������������������������"
+
+msgid "Report Name"
+msgstr "������������"
+
+msgid ""
+"The name used to identify the report. If omitted, a name will be chosen "
+"based on current time. Name can contain: letters, digits, underscore (\"_\") "
+"and hyphen (\"-\")."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������������ (\"-\")���"
+
+msgid "Rename a Debug Report"
+msgstr "������������������������"
+
+msgid ""
+"The name used to identify the report. Name can contain: letters, digits and "
+"hyphen (\"-\")."
+msgstr ""
+"������������������������������������������������������������������������������������������������������������������"
+"������������������ (\"-\")���"
+
+msgid "Submit"
+msgstr ""
+
+msgid "Add a Repository"
+msgstr "���������������"
+
+msgid "Identifier"
+msgstr "ID"
+
+msgid "Single word, unique identifier for the repository."
+msgstr "��������������������������� ID���"
+
+msgid "Textual name for the repository."
+msgstr "���������������������������"
+
+msgid "URL"
+msgstr "URL"
+
+msgid "Required Field"
+msgstr "������������"
+
+msgid "URL to the repository. Supported protocols are http, ftp, and file."
+msgstr "������������ URL��������������������������������� http���ftp ��� file���"
+
+msgid "Repository is a mirror"
+msgstr "���������������������"
+
+msgid "Distribution"
+msgstr "������������"
+
+msgid "Distribution of the DEB repository."
+msgstr "DEB ���������������������������"
+
+msgid "Components"
+msgstr "������"
+
+msgid "List of components in DEB repository."
+msgstr "DEB ������������������������������"
+
+msgid "Edit Repository"
+msgstr "���������������"
+
+msgid "Mirror List URL"
+msgstr "������������ URL"
+
+msgid "Yes"
+msgstr "���"
+
+msgid "No"
+msgstr "���"
+
+msgid "Capacity"
+msgstr "������"
+
+msgid "Allocated"
+msgstr "���������"
+
+msgid "Location"
+msgstr "������"
+
+msgid "Device path"
+msgstr "������������"
+
+msgid "active"
+msgstr "���������"
+
+msgid "inactive"
+msgstr "������������"
+
+msgid "Deactivate"
+msgstr "������������"
+
+msgid "Activate"
+msgstr "������"
+
+msgid "Add Volume"
+msgstr ""
+
+msgid "Extend"
+msgstr ""
+
+msgid "Undefine"
+msgstr "������������"
+
+msgid "Format"
+msgstr "���������"
+
+msgid "Allocation"
+msgstr "���������"
+
+msgid "Define a New Storage Pool"
+msgstr "���������������������"
+
+msgid "Storage Pool Name"
+msgstr "���������������"
+
+msgid ""
+"The name used to identify the storage pools, and it should not be empty."
+msgstr "������������������������������������������������������"
+
+msgid "Storage Pool Type"
+msgstr "���������������"
+
+msgid "Storage Path"
+msgstr "���������������"
+
+msgid ""
+"The path of the Storage Pool. Each Storage Pool must have a unique path."
+msgstr "���������������������������������������������������������������������������"
+
+msgid ""
+"Kimchi will try to create the directory when it does not already exist in "
+"your system."
+msgstr "Kimchi ������������������������������������������������������������������������"
+
+msgid "NFS Server IP"
+msgstr "NFS ��������� IP"
+
+msgid "NFS server IP or hostname. It can be input or chosen from history."
+msgstr "NFS ��������� IP ���������������������������������������������������������������������"
+
+msgid "NFS Path"
+msgstr "NFS ������"
+
+msgid "The NFS exported path on NFS server."
+msgstr "NFS ������������ NFS ������������������"
+
+msgid "iSCSI Server"
+msgstr "iSCSI ���������"
+
+msgid "Server"
+msgstr "���������"
+
+msgid "Port"
+msgstr "���"
+
+msgid "iSCSI server IP or hostname. It should not be empty."
+msgstr "iSCSI ��������� IP ������������������������������������������"
+
+msgid "Target"
+msgstr "������"
+
+msgid "The iSCSI target on iSCSI server"
+msgstr "iSCSI ��������������� iSCSI ������"
+
+msgid "Add iSCSI Authentication"
+msgstr "������ iSCSI ������"
+
+msgid "iSCSI Authentication"
+msgstr "iSCSI ������"
+
+msgid "User Name"
+msgstr "���������������"
+
+msgid "Password"
+msgstr "������"
+
+msgid "SCSI Adapter"
+msgstr "SCSI ���������"
+
+msgid "Please, wait..."
+msgstr "���������..."
+
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
+msgid "Add Template"
+msgstr "������������"
+
+msgid "Where is the source media for this template? "
+msgstr "���������������������������������������"
+
+msgid "Local ISO Image"
+msgstr "������ ISO ���������"
+
+msgid "Local Image File"
+msgstr ""
+
+msgid "Remote ISO Image"
+msgstr "������ ISO ���������"
+
+msgid "Search ISOs"
+msgstr "������ ISO"
+
+msgid "The following ISOs are available:"
+msgstr "������ ISO ���������"
+
+msgid "OS: "
+msgstr "OS���"
+
+msgid "Version: "
+msgstr "���������"
+
+msgid "Size: "
+msgstr "���������"
+
+msgid "Search more ISOs"
+msgstr "������������ ISO"
+
+msgid "Create Templates from Selected ISO"
+msgstr "��������� ISO ������������"
+
+msgid "I want to use a specific ISO file"
+msgstr "��������������������� ISO ������"
+
+msgid "Loading default remote ISOs ..."
+msgstr "������������������������ ISO ..."
+
+msgid "Arch: "
+msgstr "���������"
+
+msgid "I want to use a custom URL"
+msgstr "������������������ URL"
+
+msgid "Edit Template"
+msgstr "������������"
+
+msgid "CDROM"
+msgstr "CDROM"
+
+msgid "Image File"
+msgstr ""
+
+msgid "Graphics"
+msgstr "���������"
+
+msgid "Disk(GB)"
+msgstr ""
+
+msgid "Disk Format"
+msgstr ""
+
+msgid "CPU Number"
+msgstr "CPU ������"
+
+msgid "Manually set CPU topology"
+msgstr ""
+
+msgid "Cores"
+msgstr ""
+
+msgid "Threads"
+msgstr ""
+
+msgid "No templates found."
+msgstr "������������������"
+
+#~ msgid "Delete is not allowed for %(resource)s"
+#~ msgstr "��������������� %(resource)s ������������"
+
+#~ msgid "%(resource)s does not implement update method"
+#~ msgstr "%(resource)s ���������������������"
+
+#~ msgid "Create is not allowed for %(resource)s"
+#~ msgstr "��������������� %(resource)s ������������"
+
+#~ msgid "Unable to parse JSON request"
+#~ msgstr "������������ JSON ������"
+
+#~ msgid "This API only supports JSON"
+#~ msgstr "��� API ��������� JSON"
+
+#~ msgid "Datastore is not initiated in the model object."
+#~ msgstr "���������������������������������������������"
+
+#~ msgid "Unable to start task due error: %(err)s"
+#~ msgstr "������������������������������������������%(err)s"
+
+#~ msgid ""
+#~ "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
+#~ msgstr "��������� '%(username)s' ������������������[������������%(code)s]"
+
+#~ msgid "You are not authorized to access Kimchi"
+#~ msgstr "������������������������ Kimchi"
+
+#~ msgid "Specify %(item)s to login into Kimchi"
+#~ msgstr "������ %(item)s ��������� Kimchi"
+
+#~ msgid "Unable to find %(item)s in datastore"
+#~ msgstr "������������������������������ %(item)s"
+
+#~ msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
+#~ msgstr "������������ '%(cmd)s' %(seconds)s ���������������"
+
+#~ msgid "Help"
+#~ msgstr "������"
+
+#~ msgid "About"
+#~ msgstr "������"
+
+#~ msgid "Log out"
+#~ msgstr "������"
+
+#~ msgid "Version:"
+#~ msgstr "���������"
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/Makefile.am | 20 ++++++++++++++++++++
plugins/gingerbase/ui/config/Makefile.am | 22 ++++++++++++++++++++++
plugins/gingerbase/ui/config/tab-ext.xml | 10 ++++++++++
3 files changed, 52 insertions(+)
create mode 100644 plugins/gingerbase/ui/Makefile.am
create mode 100644 plugins/gingerbase/ui/config/Makefile.am
create mode 100644 plugins/gingerbase/ui/config/tab-ext.xml
diff --git a/plugins/gingerbase/ui/Makefile.am b/plugins/gingerbase/ui/Makefile.am
new file mode 100644
index 0000000..b2b0e8f
--- /dev/null
+++ b/plugins/gingerbase/ui/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = config css images js pages
+
+uidir = $(datadir)/wok/plugins/gingerbase/ui
diff --git a/plugins/gingerbase/ui/config/Makefile.am b/plugins/gingerbase/ui/config/Makefile.am
new file mode 100644
index 0000000..0b60cc9
--- /dev/null
+++ b/plugins/gingerbase/ui/config/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+xmldir = $(datadir)/wok/plugins/gingerbase/ui/config
+
+dist_xml_DATA = \
+ tab-ext.xml \
+ $(NULL)
diff --git a/plugins/gingerbase/ui/config/tab-ext.xml b/plugins/gingerbase/ui/config/tab-ext.xml
new file mode 100644
index 0000000..2d2d9bd
--- /dev/null
+++ b/plugins/gingerbase/ui/config/tab-ext.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<tabs-ext>
+ <tab>
+ <access role="admin" mode="admin"/>
+ <access role="user" mode="none"/>
+
+ <title>Host</title>
+ <path>plugins/gingerbase/host.html</path>
+ </tab>
+</tabs-ext>
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/css/Makefile.am | 26 ++
plugins/gingerbase/ui/css/theme-default/host.css | 287 +++++++++++++++++++++
.../gingerbase/ui/css/theme-default/report-add.css | 37 +++
.../ui/css/theme-default/report-rename.css | 39 +++
.../ui/css/theme-default/repository-add.css | 42 +++
.../ui/css/theme-default/repository-edit.css | 88 +++++++
plugins/kimchi/ui/css/theme-default/host.css | 287 ---------------------
plugins/kimchi/ui/css/theme-default/report-add.css | 37 ---
.../kimchi/ui/css/theme-default/report-rename.css | 39 ---
.../kimchi/ui/css/theme-default/repository-add.css | 42 ---
.../ui/css/theme-default/repository-edit.css | 88 -------
11 files changed, 519 insertions(+), 493 deletions(-)
create mode 100644 plugins/gingerbase/ui/css/Makefile.am
create mode 100644 plugins/gingerbase/ui/css/theme-default/host.css
create mode 100644 plugins/gingerbase/ui/css/theme-default/report-add.css
create mode 100644 plugins/gingerbase/ui/css/theme-default/report-rename.css
create mode 100644 plugins/gingerbase/ui/css/theme-default/repository-add.css
create mode 100644 plugins/gingerbase/ui/css/theme-default/repository-edit.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/host.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/report-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/report-rename.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/repository-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/repository-edit.css
diff --git a/plugins/gingerbase/ui/css/Makefile.am b/plugins/gingerbase/ui/css/Makefile.am
new file mode 100644
index 0000000..3e19c65
--- /dev/null
+++ b/plugins/gingerbase/ui/css/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+EXTRA_DIST = theme-default
+
+cssdir = $(datadir)/wok/plugins/gingerbase/ui/css
+dist_css_DATA = theme-default.min.css
+
+theme-default.min.css: theme-default/*.css
+ cat $^ > $@
+
+CLEANFILES = theme-default.min.css
diff --git a/plugins/gingerbase/ui/css/theme-default/host.css b/plugins/gingerbase/ui/css/theme-default/host.css
new file mode 100644
index 0000000..96a54b5
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/host.css
@@ -0,0 +1,287 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.host-panel {
+ font-size: 12px;
+ margin-bottom: 100px;
+}
+
+.host-panel .logo-container, .host-panel .info-container,
+.host-panel .section-label, .host-panel .section-value {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.host-panel .section-label {
+ display: inline-block;
+ margin-right: 1em;
+ vertical-align: top;
+}
+
+.host-panel .logo {
+ background: url("plugins/gingerbase/images/icon-vm.png") no-repeat left top;
+ height: 128px;
+ width: 128px;
+}
+
+.host-panel .hostname {
+ text-decoration: underline;
+}
+
+.host-panel .action-panel {
+ margin-top: 2em;
+ padding-left: 10px;
+}
+
+.host-panel .button-icon {
+ background: url("../images/theme-default/host-icon-sprite.png") no-repeat
+ left top;
+ display: inline-block;
+ height: 12px;
+ width: 12px;
+}
+
+.host-panel .action-icon-stop {
+ background-position: -14px 0;
+}
+
+.host-panel .action-icon-restart {
+ background-position: -28px 0;
+}
+
+.host-panel .action-icon-download {
+ background-position: -42px 0;
+}
+
+.host-panel .action-icon-connect {
+ background-position: -56px 0;
+}
+
+.host-panel .action-icon-add {
+ background-position: -70px 0;
+}
+
+.host-panel .action-icon-edit {
+ background-position: -84px 0;
+}
+
+.host-panel .action-icon-remove {
+ background-position: -98px 0;
+}
+
+.host-panel button:disabled .action-icon-start {
+ background-position: 0 -14px;
+}
+
+.host-panel button:disabled .action-icon-stop {
+ background-position: -14px -14px;
+}
+
+.host-panel button:disabled .action-icon-restart {
+ background-position: -28px -14px;
+}
+
+.host-panel button:disabled .action-icon-download {
+ background-position: -42px -14px;
+}
+
+.host-panel button:disabled .action-icon-connect {
+ background-position: -56px -14px;
+}
+
+.host-panel button:disabled .action-icon-add {
+ background-position: -70px -14px;
+}
+
+.host-panel button:disabled .action-icon-edit {
+ background-position: -84px -14px;
+}
+
+.host-panel button:disabled .action-icon-remove {
+ background-position: -98px -14px;
+}
+
+.host-panel .info-container {
+ padding-top: 16px;
+ width: 890px;
+}
+
+.host-panel .section-header {
+ background: #EEE;
+ border-radius: 5px;
+ cursor: pointer;
+ line-height: 2em;
+ margin: 1em 0 1em;
+ padding-left: 6px;
+}
+
+.host-panel .section-header:hover {
+ background: #06f;
+ color: white;
+}
+
+.host-panel .section-content {
+ padding-left: 1em;
+}
+
+.host-panel .section-header .arrow {
+ border-color: transparent;
+ border-style: solid;
+ display: inline-block;
+ margin-right: 6px;
+ width: 0;
+}
+
+.host-panel .section-header[aria-expanded="true"] .arrow {
+ border-top-color: black;
+ border-width: 8px 4px 0;
+ border-bottom: none;
+}
+
+.host-panel .section-header[aria-expanded="true"]:hover .arrow {
+ border-top-color: white;
+}
+
+.host-panel .section-header[aria-expanded="false"] .arrow {
+ border-left-color: black;
+ border-right: none;
+ border-width: 4px 0 4px 8px;
+}
+
+.host-panel .section-header[aria-expanded="false"]:hover .arrow {
+ border-left-color: white;
+}
+
+.host-panel .section-row {
+ line-height: 1.6em;
+ margin-bottom: 1em;
+}
+
+.host-panel .section-label {
+ width: 100px;
+}
+
+#frequency-textbox {
+ width: 20px;
+}
+
+#container-chart-cpu,
+#container-chart-memory,
+#container-chart-disk-io,
+#container-chart-network-io {
+ border: 1px solid white;
+ box-shadow: 2px 2px 2px gray, 2px -2px 2px gray, -2px -2px 2px gray, -2px
+ 2px 2px gray;
+ height: 100px;
+ width: 500px;
+}
+
+#container-chart-disk-io .disk-write,
+#container-chart-network-io .network-sent {
+ stroke: #f80;
+}
+
+/* Debug Report */
+.cell-text-wrapper {
+ margin-left: 10px;
+}
+
+.host-panel #available-reports-grid {
+ border-color: #ddd;
+ height: 400px;
+ width: 850px;
+}
+
+.host-panel select#available-reports-list {
+ width: 300px;
+}
+
+.host-panel select#available-reports-list option {
+ margin: .2em 1em;
+}
+
+.debug-report-name,
+.debug-report-time {
+ width: 424px;
+}
+
+#id-debug-img {
+ background: url(../images/theme-default/kimchi-loading15x15.gif) 12px
+ center no-repeat;
+ padding-left: 23px;
+}
+
+/* End of Debug Report */
+
+/* Software Updates */
+.host-panel #software-updates-grid {
+ border-color: #ddd;
+ height: 300px;
+ width: 850px;
+}
+
+.software-update-name,
+.software-update-repos {
+ width: 224px;
+}
+
+.software-update-version,
+.software-update-arch {
+ width: 200px;
+}
+
+.host-panel #software-updates-progress-textarea {
+ border: 1px solid #ddd;
+ box-sizing: border-box;
+ height: 100px;
+ padding: .2em .5em;
+ resize: vertical;
+ width: 852px;
+}
+/* End of Software Updates */
+
+/* Repository */
+.host-panel #repositories-grid {
+ border-color: #ddd;
+ height: 200px;
+ width: 850px;
+}
+
+.host-panel #repositories-grid .repository-id {
+ width: 120px;
+}
+
+.host-panel #repositories-grid .repository-name {
+ width: 640px;
+}
+
+.host-panel #repositories-grid .repository-enabled {
+ width: 88px;
+}
+
+.host-panel #repositories-grid .repository-baseurl.deb {
+ width: 400px;
+}
+
+.host-panel #repositories-grid .repository-enabled.deb {
+ width: 100px;
+}
+
+.host-panel #repositories-grid .repository-gpgcheck.deb {
+ width: 150px;
+}
+/* End of Repository */
diff --git a/plugins/gingerbase/ui/css/theme-default/report-add.css b/plugins/gingerbase/ui/css/theme-default/report-add.css
new file mode 100644
index 0000000..e9f639d
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/report-add.css
@@ -0,0 +1,37 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#report-add-window {
+ height: 300px;
+ width: 400px;
+}
+
+#report-add-window .field {
+ font-size: 12px;
+}
+
+#report-name-textbox {
+ margin: 0;
+ width: 100%;
+}
+
+.info-add-debug-report {
+ font-size: 12px;
+ color: #999999;
+ font-weight: lighter;
+ font-family: 'Helvetica Neue', Helvetica, Arial;
+}
diff --git a/plugins/gingerbase/ui/css/theme-default/report-rename.css b/plugins/gingerbase/ui/css/theme-default/report-rename.css
new file mode 100644
index 0000000..4b13946
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/report-rename.css
@@ -0,0 +1,39 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#report-rename-window {
+ height: 300px;
+ width: 400px;
+}
+
+#report-rename-window .field {
+ font-size: 12px;
+}
+
+#report-name-textbox {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 0;
+ width: 100%;
+}
+
+.info-debug-report-rename {
+ font-size: 12px;
+ color: #999999;
+ font-weight: lighter;
+ font-family: 'Helvetica Neue', Helvetica, Arial;
+}
diff --git a/plugins/gingerbase/ui/css/theme-default/repository-add.css b/plugins/gingerbase/ui/css/theme-default/repository-add.css
new file mode 100644
index 0000000..365ca43
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/repository-add.css
@@ -0,0 +1,42 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#repository-add-window {
+ height: 500px;
+ width: 1000px;
+}
+
+#repository-add-window span.required {
+ color: red;
+ padding-left: 5px;
+ vertical-align: top;
+}
+
+#repository-add-window .textbox-wrapper input[type="text"] {
+ box-sizing: border-box;
+ width: 100%;
+}
+
+#repository-add-window .textbox-wrapper label {
+ vertical-align: middle;
+}
+
+#isMirrorLabel {
+ font-size: 14px;
+ font-weight: lighter;
+ font-family: 'Helvetica Neue', Helvetica, Arial;
+}
diff --git a/plugins/gingerbase/ui/css/theme-default/repository-edit.css b/plugins/gingerbase/ui/css/theme-default/repository-edit.css
new file mode 100644
index 0000000..19dff56
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/repository-edit.css
@@ -0,0 +1,88 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.yum div#repository-edit-window {
+ height: 680px;
+ width: 1000px;
+}
+
+.deb div#repository-edit-window {
+ height: 480px;
+ width: 1000px;
+}
+
+
+.repository-edit-fieldset {
+ float: left;
+ padding: 0 30px;
+ width: 95%;
+}
+
+.repository-edit-wrapper-label, .repository-edit-wrapper-controls {
+ display: inline-block;
+ height: 30px;
+ line-height: 30px;
+ font-size: 14px;
+ vertical-align: top;
+}
+
+.repository-edit-wrapper-label {
+ margin-top: 10px;
+ width: 150px;
+}
+
+.repository-edit-wrapper-controls label {
+ vertical-align: middle;
+}
+
+.repository-edit-wrapper-controls {
+ width: 100%;
+}
+
+.repository-edit-wrapper-controls input[type="text"] {
+ font-size: 16px;
+ height: 30px;
+ line-height: 30px;
+ padding: 0 10px;
+ width: 100%;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid #CCCCCC;
+}
+
+
+.repository-edit-wrapper-controls input[type="text"][readonly] {
+ color: #bbb;
+ background-color: #fafafa;
+}
+
+
+.repository-edit-wrapper-controls input[type="text"][disabled] {
+ color: #bbb;
+ background-color: #fafafa;
+ cursor: not-allowed;
+}
+
+
+.deb .yum{
+ display: none;
+}
+
+
+.yum .deb{
+ display: none;
+}
diff --git a/plugins/kimchi/ui/css/theme-default/host.css b/plugins/kimchi/ui/css/theme-default/host.css
deleted file mode 100644
index a0cccb1..0000000
--- a/plugins/kimchi/ui/css/theme-default/host.css
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-.host-panel {
- font-size: 12px;
- margin-bottom: 100px;
-}
-
-.host-panel .logo-container, .host-panel .info-container,
-.host-panel .section-label, .host-panel .section-value {
- display: inline-block;
- vertical-align: top;
-}
-
-.host-panel .section-label {
- display: inline-block;
- margin-right: 1em;
- vertical-align: top;
-}
-
-.host-panel .logo {
- background: url("plugins/kimchi/images/icon-vm.png") no-repeat left top;
- height: 128px;
- width: 128px;
-}
-
-.host-panel .hostname {
- text-decoration: underline;
-}
-
-.host-panel .action-panel {
- margin-top: 2em;
- padding-left: 10px;
-}
-
-.host-panel .button-icon {
- background: url("../images/theme-default/host-icon-sprite.png") no-repeat
- left top;
- display: inline-block;
- height: 12px;
- width: 12px;
-}
-
-.host-panel .action-icon-stop {
- background-position: -14px 0;
-}
-
-.host-panel .action-icon-restart {
- background-position: -28px 0;
-}
-
-.host-panel .action-icon-download {
- background-position: -42px 0;
-}
-
-.host-panel .action-icon-connect {
- background-position: -56px 0;
-}
-
-.host-panel .action-icon-add {
- background-position: -70px 0;
-}
-
-.host-panel .action-icon-edit {
- background-position: -84px 0;
-}
-
-.host-panel .action-icon-remove {
- background-position: -98px 0;
-}
-
-.host-panel button:disabled .action-icon-start {
- background-position: 0 -14px;
-}
-
-.host-panel button:disabled .action-icon-stop {
- background-position: -14px -14px;
-}
-
-.host-panel button:disabled .action-icon-restart {
- background-position: -28px -14px;
-}
-
-.host-panel button:disabled .action-icon-download {
- background-position: -42px -14px;
-}
-
-.host-panel button:disabled .action-icon-connect {
- background-position: -56px -14px;
-}
-
-.host-panel button:disabled .action-icon-add {
- background-position: -70px -14px;
-}
-
-.host-panel button:disabled .action-icon-edit {
- background-position: -84px -14px;
-}
-
-.host-panel button:disabled .action-icon-remove {
- background-position: -98px -14px;
-}
-
-.host-panel .info-container {
- padding-top: 16px;
- width: 890px;
-}
-
-.host-panel .section-header {
- background: #EEE;
- border-radius: 5px;
- cursor: pointer;
- line-height: 2em;
- margin: 1em 0 1em;
- padding-left: 6px;
-}
-
-.host-panel .section-header:hover {
- background: #06f;
- color: white;
-}
-
-.host-panel .section-content {
- padding-left: 1em;
-}
-
-.host-panel .section-header .arrow {
- border-color: transparent;
- border-style: solid;
- display: inline-block;
- margin-right: 6px;
- width: 0;
-}
-
-.host-panel .section-header[aria-expanded="true"] .arrow {
- border-top-color: black;
- border-width: 8px 4px 0;
- border-bottom: none;
-}
-
-.host-panel .section-header[aria-expanded="true"]:hover .arrow {
- border-top-color: white;
-}
-
-.host-panel .section-header[aria-expanded="false"] .arrow {
- border-left-color: black;
- border-right: none;
- border-width: 4px 0 4px 8px;
-}
-
-.host-panel .section-header[aria-expanded="false"]:hover .arrow {
- border-left-color: white;
-}
-
-.host-panel .section-row {
- line-height: 1.6em;
- margin-bottom: 1em;
-}
-
-.host-panel .section-label {
- width: 100px;
-}
-
-#frequency-textbox {
- width: 20px;
-}
-
-#container-chart-cpu,
-#container-chart-memory,
-#container-chart-disk-io,
-#container-chart-network-io {
- border: 1px solid white;
- box-shadow: 2px 2px 2px gray, 2px -2px 2px gray, -2px -2px 2px gray, -2px
- 2px 2px gray;
- height: 100px;
- width: 500px;
-}
-
-#container-chart-disk-io .disk-write,
-#container-chart-network-io .network-sent {
- stroke: #f80;
-}
-
-/* Debug Report */
-.cell-text-wrapper {
- margin-left: 10px;
-}
-
-.host-panel #available-reports-grid {
- border-color: #ddd;
- height: 400px;
- width: 850px;
-}
-
-.host-panel select#available-reports-list {
- width: 300px;
-}
-
-.host-panel select#available-reports-list option {
- margin: .2em 1em;
-}
-
-.debug-report-name,
-.debug-report-time {
- width: 424px;
-}
-
-#id-debug-img {
- background: url(../images/theme-default/kimchi-loading15x15.gif) 12px
- center no-repeat;
- padding-left: 23px;
-}
-
-/* End of Debug Report */
-
-/* Software Updates */
-.host-panel #software-updates-grid {
- border-color: #ddd;
- height: 300px;
- width: 850px;
-}
-
-.software-update-name,
-.software-update-repos {
- width: 224px;
-}
-
-.software-update-version,
-.software-update-arch {
- width: 200px;
-}
-
-.host-panel #software-updates-progress-textarea {
- border: 1px solid #ddd;
- box-sizing: border-box;
- height: 100px;
- padding: .2em .5em;
- resize: vertical;
- width: 852px;
-}
-/* End of Software Updates */
-
-/* Repository */
-.host-panel #repositories-grid {
- border-color: #ddd;
- height: 200px;
- width: 850px;
-}
-
-.host-panel #repositories-grid .repository-id {
- width: 120px;
-}
-
-.host-panel #repositories-grid .repository-name {
- width: 640px;
-}
-
-.host-panel #repositories-grid .repository-enabled {
- width: 88px;
-}
-
-.host-panel #repositories-grid .repository-baseurl.deb {
- width: 400px;
-}
-
-.host-panel #repositories-grid .repository-enabled.deb {
- width: 100px;
-}
-
-.host-panel #repositories-grid .repository-gpgcheck.deb {
- width: 150px;
-}
-/* End of Repository */
diff --git a/plugins/kimchi/ui/css/theme-default/report-add.css b/plugins/kimchi/ui/css/theme-default/report-add.css
deleted file mode 100644
index 8020182..0000000
--- a/plugins/kimchi/ui/css/theme-default/report-add.css
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#report-add-window {
- height: 300px;
- width: 400px;
-}
-
-#report-add-window .field {
- font-size: 12px;
-}
-
-#report-name-textbox {
- margin: 0;
- width: 100%;
-}
-
-.info-add-debug-report {
- font-size: 12px;
- color: #999999;
- font-weight: lighter;
- font-family: 'Helvetica Neue', Helvetica, Arial;
-}
\ No newline at end of file
diff --git a/plugins/kimchi/ui/css/theme-default/report-rename.css b/plugins/kimchi/ui/css/theme-default/report-rename.css
deleted file mode 100644
index 2fb2698..0000000
--- a/plugins/kimchi/ui/css/theme-default/report-rename.css
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#report-rename-window {
- height: 300px;
- width: 400px;
-}
-
-#report-rename-window .field {
- font-size: 12px;
-}
-
-#report-name-textbox {
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- margin: 0;
- width: 100%;
-}
-
-.info-debug-report-rename {
- font-size: 12px;
- color: #999999;
- font-weight: lighter;
- font-family: 'Helvetica Neue', Helvetica, Arial;
-}
diff --git a/plugins/kimchi/ui/css/theme-default/repository-add.css b/plugins/kimchi/ui/css/theme-default/repository-add.css
deleted file mode 100644
index 4344569..0000000
--- a/plugins/kimchi/ui/css/theme-default/repository-add.css
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#repository-add-window {
- height: 500px;
- width: 1000px;
-}
-
-#repository-add-window span.required {
- color: red;
- padding-left: 5px;
- vertical-align: top;
-}
-
-#repository-add-window .textbox-wrapper input[type="text"] {
- box-sizing: border-box;
- width: 100%;
-}
-
-#repository-add-window .textbox-wrapper label {
- vertical-align: middle;
-}
-
-#isMirrorLabel {
- font-size: 14px;
- font-weight: lighter;
- font-family: 'Helvetica Neue', Helvetica, Arial;
-}
\ No newline at end of file
diff --git a/plugins/kimchi/ui/css/theme-default/repository-edit.css b/plugins/kimchi/ui/css/theme-default/repository-edit.css
deleted file mode 100644
index 383a7fe..0000000
--- a/plugins/kimchi/ui/css/theme-default/repository-edit.css
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-.yum div#repository-edit-window {
- height: 680px;
- width: 1000px;
-}
-
-.deb div#repository-edit-window {
- height: 480px;
- width: 1000px;
-}
-
-
-.repository-edit-fieldset {
- float: left;
- padding: 0 30px;
- width: 95%;
-}
-
-.repository-edit-wrapper-label, .repository-edit-wrapper-controls {
- display: inline-block;
- height: 30px;
- line-height: 30px;
- font-size: 14px;
- vertical-align: top;
-}
-
-.repository-edit-wrapper-label {
- margin-top: 10px;
- width: 150px;
-}
-
-.repository-edit-wrapper-controls label {
- vertical-align: middle;
-}
-
-.repository-edit-wrapper-controls {
- width: 100%;
-}
-
-.repository-edit-wrapper-controls input[type="text"] {
- font-size: 16px;
- height: 30px;
- line-height: 30px;
- padding: 0 10px;
- width: 100%;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- border: 1px solid #CCCCCC;
-}
-
-
-.repository-edit-wrapper-controls input[type="text"][readonly] {
- color: #bbb;
- background-color: #fafafa;
-}
-
-
-.repository-edit-wrapper-controls input[type="text"][disabled] {
- color: #bbb;
- background-color: #fafafa;
- cursor: not-allowed;
-}
-
-
-.deb .yum{
- display: none;
-}
-
-
-.yum .deb{
- display: none;
-}
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/images/Makefile.am | 22 +++++++++++++++++++++
plugins/gingerbase/ui/images/icon-vm.png | Bin 0 -> 2976 bytes
plugins/gingerbase/ui/images/logo.ico | Bin 0 -> 1214 bytes
.../gingerbase/ui/images/theme-default/Makefile.am | 20 +++++++++++++++++++
.../ui/images/theme-default/host-icon-sprite.png | Bin 0 -> 1034 bytes
.../images/theme-default/kimchi-loading15x15.gif | Bin 0 -> 1653 bytes
6 files changed, 42 insertions(+)
create mode 100644 plugins/gingerbase/ui/images/Makefile.am
create mode 100644 plugins/gingerbase/ui/images/icon-vm.png
create mode 100644 plugins/gingerbase/ui/images/logo.ico
create mode 100644 plugins/gingerbase/ui/images/theme-default/Makefile.am
create mode 100644 plugins/gingerbase/ui/images/theme-default/host-icon-sprite.png
create mode 100644 plugins/gingerbase/ui/images/theme-default/kimchi-loading15x15.gif
diff --git a/plugins/gingerbase/ui/images/Makefile.am b/plugins/gingerbase/ui/images/Makefile.am
new file mode 100644
index 0000000..34109bd
--- /dev/null
+++ b/plugins/gingerbase/ui/images/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = theme-default
+
+imagedir = $(datadir)/wok/plugins/gingerbase/ui/images
+
+dist_image_DATA = *.png *.ico
diff --git a/plugins/gingerbase/ui/images/icon-vm.png b/plugins/gingerbase/ui/images/icon-vm.png
new file mode 100644
index 0000000000000000000000000000000000000000..50dac50c5a0ee59f4e79170434f53bb3b94390e3
GIT binary patch
literal 2976
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
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/logo.ico b/plugins/gingerbase/ui/images/logo.ico
new file mode 100644
index 0000000000000000000000000000000000000000..446143f066a60f479b2cb8f8d04ab3c97ff60e56
GIT binary patch
literal 1214
zcma)*3rLeu6vyu=X_;nPV)$&PPF)r(wTQ|dTGOUtnOdf0mZ=cR#99xbub1{BqnD9^
z^Z>PV6h)fUny6#CN{3di2P{*h2ek@Oq0a4o*=I}2Iv?krbAR`oKi_vQA0faVCr83o
zF{!X2#Dx$Nz}$(sm^sgR<Jj30yCMGpMl1z837jm3H1$<DU4IV>Tbdw<FM-;Hi<#et
z=I}n~iB^qh8{XzCNyvT<I;$&znmT~?eFXZgAE@Om?1h(6Iq+2e1-ca!zOAO7n3*};
zXq6n?2kF<!f%cez;-Fgx4$e+xo{WR;oqhc_OW;#nF!Zm|JK}m8gi6aC+##`QA5PmJ
zfeZ(o(}%&&1P5#*1vVbnssk~XhN5bNz=T)>5^+BS=V54SJ|^z)5I7%kU;>-skiq*{
z5B^=eF<T)pK9+)bV;9UCK>t-HOi+bkR-wK1xpfXL;S<?ho1pQ5gYzxiHR~=e+XHS(
zYe7QMZb3IjWV72H-JpD~6z(tbgwn1o$D2s!YteWNJS!i9l%iW?+34Lvr*KL(6{_X|
zobEjAb{lD|4qsmYvGF;~r0Aunc#>=c)0W4s|D{#(q9~vaX{rGms=((Wn*~LeWqIu}
zkGvlzwaxjL25hey2bVweu<xK*t+@Oa_)UKTK^x4IwmKMOjm@oL`l)}_NGPy}tdb}w
zHa>H`ji2N7m}Xsj#j7-`#=Dv}`)h&)9th^&^dR%>WH_MB8KcIXVf8p&s1xD|_k)R-
zrk$Z0-|Gf}&4Au$KhU$k?3YR5by~D9M&-q$=ocNz4!IY&p7%OxuJf&+Ei-G(23hU;
zHTLhMtjFR9ExVbPQVLzBFlROcIZ|#jmX6fm_hsVa3XP<aKAeAt8dqp&oBW=V^+d>Q
zkcNnm%Ds?ggd^Rv2~9_o82cv;p6LSBD_g_s-n1uZ8#<EeLwTm~LE9J!Zdo@M&*jFU
zoM+Z%F5)(8$8y`Wz~%Pd;Nlx@aH{<lk}}CcRMRXZMD&%Uhz3Ze$jpg#uec1IlFMPW
MDQ4iZEk#_;cNAJoqyPW_
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/theme-default/Makefile.am b/plugins/gingerbase/ui/images/theme-default/Makefile.am
new file mode 100644
index 0000000..1fc98a3
--- /dev/null
+++ b/plugins/gingerbase/ui/images/theme-default/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+imagedir = $(datadir)/wok/plugins/gingerbase/ui/images/theme-default
+
+dist_image_DATA = *.png *.gif
diff --git a/plugins/gingerbase/ui/images/theme-default/host-icon-sprite.png b/plugins/gingerbase/ui/images/theme-default/host-icon-sprite.png
new file mode 100644
index 0000000000000000000000000000000000000000..da1cd3f2562a5905a526446bcc8fc18bea06c734
GIT binary patch
literal 1034
zcmV+l1oiugP)<h;3K|Lk000e1NJLTq003?P000^Y1^@s6R_JLg00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-3t>283nlSO%wnC03B&m
zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00VAGL_t(&-tAexPZU8E
z{`PW&1_K4^OH?eZvAftnL5(5A#KOeLoryLc6xvbn7idfrLqY*-qLqe%L|Ypgg$i36
z(dbjkBSwPpvl)`j+}`fa-u^(2muzw~^LF01^X{8@Zysm_jzUN2Fh`A~Pjc5hKFL~I
z+Z}W#NVXC{Y>}KuY7;pNNspw5tO0f7IFeP8D-r4|QCJ)u*CII!fKd<0S(2@?9Y=DD
z<R_9!@=PZG-V7bLl9r_@9LG4P1)Rq+9Y?Z{<af)|`7qr|9MBxV)c`acbbCfT&pQC{
z%j$mX<hUFic+YA-2XN6mak_;`9K$+|XK?mUTkTPj&CIsEF5cU<hDHKoBi7iJvbM^i
z*Tus8!czN9a>$8s1<N-8RRC8_`$GnE?vb2Jz_2+0dq-p)ngI3#?S24@sTh|bQ+;d5
zH%uEL`5>TIAzA4bYua?6Ovagcnjz|Ai5Da5sM6$aQ8E^l$E3xZb^24#IlFC{{Sv!X
zdPZ`HoHhZhMyRZj95%WP!xe@3m<5`5?4yL_;89M%??>JmIN;83>nfaa#_lVU`y{Vr
z67H9I<>i9?7&xxqKI>29L{6meTNYI%0Emdw!G8E&QVE-1Rcq#UWYToK0q{&jHq+Sd
zU}FNnI)H(=d=J2sh`dW;({;UEMO8gxC-hsZHn6+_8Cz8V%OQ7`GXQ2(brnD(BP{Cx
z=6&CP5~WnH*XNDysWO?Qs#^et%pdJCfS-x(Dpi%PY)T=^F&E8^3~dd>ISl}e&Opgd
z>jQ8Oz$E}@0sK%^x9UJ%4m8_i!$G%aL_`u-2dYWWvJAJ-u<F2q`TaRWw_eh}pDyEv
z>yyFRKMi0z&>mIQrid&iVqA_4oV3~tBC;bQJ7_QMEcIHnC?X#LytKL>s%r052kP~D
zY<0ls{5RDBFDZ*`N~hftRMj`pW7t-CT|^!ky^4A7udB@<*0kwB7vI-)nq=l_0(fe5
zkBi7gBF9Bcoc6<NF-#g4k&RAyOj^9%=3_<YamMC0fYCtLR}r}oxmAjYmj^hLTt`+1
zRCTyh@)?Dxh{Y^e+NuMpIv5&N7WDCVBl5M=0B!+z9Oa;-3`iRt9+5!hy{f(jFa_X-
zh^)1x14RNBkv{-#tLjpkD=*u5$B=13xe4GPc-8~JKL<=Y@!??g0{{R307*qoM6N<$
Ef;%S0RsaA1
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/theme-default/kimchi-loading15x15.gif b/plugins/gingerbase/ui/images/theme-default/kimchi-loading15x15.gif
new file mode 100644
index 0000000000000000000000000000000000000000..aaa4f85a0560dcb59d4bb70154a9144417aae926
GIT binary patch
literal 1653
zcmZ?wbhEHb6krfwcz&0`fx$V3fzy*s(30KRoyj+pP0*a%B9B4Xkl)0X$H9|dJd8D}
zo<ZDBSSFF7*jZT0OhTc9Q7nTgk3rREDud*7MxI>8&Ju=(ISf+93MQOdag7Y~1hic{
z8T#{u6)cohTNtM^7+W$J#50+i$>`cj=^O84k`pyFn#{1$Ur8%a&i6QjtgEuCfQhw>
zh77A6gQ$gokA@_-E$2dp^>Sv?oMy2Rvbjr`S1FsTIOwZtnQE_R*m$2oUC1KhF@wT7
z#vS5TPBXdYi#jqhIC*|#&}Xr)`pY25?86wZk@$x}Azj<#4}*rAu{Vcnu(UhJUj}_&
zGsWW!mvn9Irz#jqI|d0m<_4Kq$D4?%x#%8bJFV#KwS(tqvz9fdTmMyIV-~+CKU<>^
zTODbStQ;$e9OEp8kfaJrQB(IojUXN?PfLA&1ruKlE$<Ybz{O>Dnh|c+IZj3l84L_z
z+ZiGkGQ_8gg)Ec{ZB|VbVu;;p8Ir+}TJcZ8St};J)7e)ugI_wAy~kUSA^Gq;v#nzB
zo6<uZ9TN=&l6EuXHCx41&a>X&p6tkweNrgxtWY&KLrITauKX0wDL;*ZSPITdWuHCl
z7S2#|o1wN-skGcGd-j}YNrw7v?ff;HUH7htly%83WoVk=SR=P3TA8QnVNZtdt|Td^
z4tBRT;l<gOCKJSuq^f)gOk<w3o@>%d>z1S5joVY2V;E+x4Cszxn7#dGQiZ}|@k{wq
ze5<)H#@>~ixp+mvx~nC^*GqKvReGJxyd=J8Z|Hp0)LG8{Q?7j|(|J;(^S(;?X-VtX
z{Ej0{$vo>WNUb@RHtpd12Emt&YTJ7ve>HRaY*WxWB$BmO<7<oVrMfE&d+u577yI7H
zdv${AuTG6`J!)PD74G*(XRN&WpI$)mKewN2NU*bGfUA+70W%{51B2pE7EU3C{|q`n
zHZYS2Ffee)GW_S1@z}87U^9oXR?LYF3lFyoD0|KE*tqCuBO@a=9coY=j!k!j<aB0i
zc<9u4hfS*nq@!EHIP1=djf>s;v1`@Ep>^V-!(BqkNq@`*laF`Fn|H~0Zd!7(0h{Hf
zM42F;^~FLc<zy?bzucZ38xtI`nPf?{Nk)rZI#dI#a%KcAJ>AR3%!JJ}Tb!mjcL>V+
z&Dl|qe5_B>QtnB`#6;Il`9QBD85<TlO;@&EX5(p~fXzf_h=~b~c^s@tPtrczcWUF8
zl$)Y)G4W`lxU|rj6$Xj!z4E$EBA!9O@K)2-%Q<1V)NzW4rQ4Q{qQ@s^Df6<iU^CYa
zVJ@$f%ZvcUgKd2BZZRt+Jap&~-N|`mN5EtIK6cxtnin4*pO_@<TefG1V5)aFPwc)q
zGcP6L3rdhvk&Uz{R5;QluAbJjV`8#<o~Uk<jm4+?Cwh5=mxY`NNH{%#3wux+Vs{|2
sX~(-16pJpOC{Q`pufUDnn>s|9;tWh`McC5^G?`;~3OSj#0+YEl0GD)I?EnA(
literal 0
HcmV?d00001
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/js/Makefile.am | 27 +
plugins/gingerbase/ui/js/src/gingerbase.api.js | 371 +++++++++
plugins/gingerbase/ui/js/src/gingerbase.host.js | 859 +++++++++++++++++++++
plugins/gingerbase/ui/js/src/gingerbase.main.js | 26 +
.../ui/js/src/gingerbase.report_add_main.js | 72 ++
.../ui/js/src/gingerbase.report_rename_main.js | 66 ++
.../ui/js/src/gingerbase.repository_add_main.js | 96 +++
.../ui/js/src/gingerbase.repository_edit_main.js | 74 ++
plugins/kimchi/ui/js/src/kimchi.host.js | 858 --------------------
plugins/kimchi/ui/js/src/kimchi.report_add_main.js | 72 --
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 66 --
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 96 ---
.../ui/js/src/kimchi.repository_edit_main.js | 74 --
13 files changed, 1591 insertions(+), 1166 deletions(-)
create mode 100644 plugins/gingerbase/ui/js/Makefile.am
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.api.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.host.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.host.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
diff --git a/plugins/gingerbase/ui/js/Makefile.am b/plugins/gingerbase/ui/js/Makefile.am
new file mode 100644
index 0000000..fa7f3cf
--- /dev/null
+++ b/plugins/gingerbase/ui/js/Makefile.am
@@ -0,0 +1,27 @@
+#
+# Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+EXTRA_DIST = src
+
+jsdir = $(datadir)/wok/plugins/gingerbase/ui/js
+
+dist_js_DATA = gingerbase.min.js $(filter-out gingerbase.min.js, $(wildcard *.js))
+
+gingerbase.min.js: src/*.js
+ cat $(sort $^) > $@
+
+CLEANFILES = gingerbase.min.js
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.api.js b/plugins/gingerbase/ui/js/src/gingerbase.api.js
new file mode 100644
index 0000000..a3aca4a
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.api.js
@@ -0,0 +1,371 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var kimchi = {
+
+ widget: {},
+
+ trackingTasks: [],
+
+ /**
+ *
+ * Get host capabilities
+ * suc: callback if succeed err: callback if failed
+ */
+ getCapabilities : function(suc, err, done) {
+ done = typeof done !== 'undefined' ? done: function(){};
+ wok.requestJSON({
+ url : "plugins/gingerbase/host/capabilities",
+ type : "GET",
+ contentType : "application/json",
+ dataType : "json",
+ success: suc,
+ error: err,
+ complete: done
+ });
+ },
+
+ /**
+ * Get the i18 strings.
+ */
+ getI18n: function(suc, err, url, sync) {
+ wok.requestJSON({
+ url : url ? url : 'plugins/gingerbase/i18n.json',
+ type : 'GET',
+ resend: true,
+ dataType : 'json',
+ async : !sync,
+ success : suc,
+ error: err
+ });
+ },
+
+ /**
+ * Get the host static information.
+ */
+ getHost: function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host',
+ type : 'GET',
+ resend: true,
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error: err
+ });
+ },
+
+ /**
+ * Get the dynamic host stats (usually used for monitoring).
+ */
+ getHostStats : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/stats',
+ type : 'GET',
+ contentType : 'application/json',
+ headers: {'Wok-Robot': 'wok-robot'},
+ dataType : 'json',
+ success : suc,
+ error: err
+ });
+ },
+
+ /**
+ * Get the historic host stats.
+ */
+ getHostStatsHistory : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/stats/history',
+ type : 'GET',
+ resend: true,
+ contentType : 'application/json',
+ headers: {'Wok-Robot': 'wok-robot'},
+ dataType : 'json',
+ success : suc,
+ error: err
+ });
+ },
+
+ getTask : function(taskId, suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/tasks/' + encodeURIComponent(taskId),
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ getTasksByFilter : function(filter, suc, err, sync) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/tasks?' + filter,
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ async : !sync,
+ success : suc,
+ error : err
+ });
+ },
+
+ listReports : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/debugreports',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ resend: true,
+ success : suc,
+ error : err
+ });
+ },
+
+ trackTask : function(taskID, suc, err, progress) {
+ var onTaskResponse = function(result) {
+ var taskStatus = result['status'];
+ switch(taskStatus) {
+ case 'running':
+ progress && progress(result);
+ setTimeout(function() {
+ kimchi.trackTask(taskID, suc, err, progress);
+ }, 2000);
+ break;
+ case 'finished':
+ suc && suc(result);
+ break;
+ case 'failed':
+ err && err(result);
+ break;
+ default:
+ break;
+ }
+ };
+
+ kimchi.getTask(taskID, onTaskResponse, err);
+ if(kimchi.trackingTasks.indexOf(taskID) < 0)
+ kimchi.trackingTasks.push(taskID);
+ },
+
+ createReport: function(settings, suc, err, progress) {
+ var onResponse = function(data) {
+ taskID = data['id'];
+ kimchi.trackTask(taskID, suc, err, progress);
+ };
+
+ wok.requestJSON({
+ url : 'plugins/gingerbase/debugreports',
+ type : "POST",
+ contentType : "application/json",
+ data : JSON.stringify(settings),
+ dataType : "json",
+ success : onResponse,
+ error : err
+ });
+ },
+
+ renameReport : function(name, settings, suc, err) {
+ $.ajax({
+ url : "plugins/gingerbase/debugreports/" + encodeURIComponent(name),
+ type : 'PUT',
+ contentType : 'application/json',
+ data : JSON.stringify(settings),
+ dataType : 'json',
+ success: suc,
+ error: err
+ });
+ },
+
+ deleteReport: function(settings, suc, err) {
+ var reportName = encodeURIComponent(settings['name']);
+ wok.requestJSON({
+ url : 'plugins/gingerbase/debugreports/' + reportName,
+ type : 'DELETE',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ downloadReport: function(settings, suc, err) {
+ window.open(settings['file']);
+ },
+
+ shutdown: function(settings, suc, err) {
+ var reboot = settings && settings['reboot'] === true;
+ var url = 'plugins/gingerbase/host/' + (reboot ? 'reboot' : 'shutdown');
+ wok.requestJSON({
+ url : url,
+ type : 'POST',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ listHostPartitions : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/partitions',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ listSoftwareUpdates : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/packagesupdate',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ resend: true,
+ success : suc,
+ error : err
+ });
+ },
+
+ updateSoftware : function(suc, err, progress) {
+ var taskID = -1;
+ var onResponse = function(data) {
+ taskID = data['id'];
+ trackTask();
+ };
+
+ var trackTask = function() {
+ kimchi.getTask(taskID, onTaskResponse, err);
+ };
+
+ var onTaskResponse = function(result) {
+ var taskStatus = result['status'];
+ switch(taskStatus) {
+ case 'running':
+ progress && progress(result);
+ setTimeout(function() {
+ trackTask();
+ }, 200);
+ break;
+ case 'finished':
+ case 'failed':
+ suc(result);
+ break;
+ default:
+ break;
+ }
+ };
+
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/swupdate',
+ type : "POST",
+ contentType : "application/json",
+ dataType : "json",
+ success : onResponse,
+ error : err
+ });
+ },
+
+ createRepository : function(settings, suc, err) {
+ wok.requestJSON({
+ url : "plugins/gingerbase/host/repositories",
+ type : "POST",
+ contentType : "application/json",
+ data : JSON.stringify(settings),
+ dataType : "json",
+ success: suc,
+ error: err
+ });
+ },
+
+ retrieveRepository : function(repository, suc, err) {
+ var reposID = encodeURIComponent(repository);
+ wok.requestJSON({
+ url : "plugins/gingerbase/host/repositories/" + reposID,
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ updateRepository : function(name, settings, suc, err) {
+ var reposID = encodeURIComponent(name);
+ $.ajax({
+ url : "plugins/gingerbase/host/repositories/" + reposID,
+ type : 'PUT',
+ contentType : 'application/json',
+ data : JSON.stringify(settings),
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ enableRepository : function(name, enable, suc, err) {
+ var reposID = encodeURIComponent(name);
+ $.ajax({
+ url : "plugins/gingerbase/host/repositories/" + reposID +
+ '/' + (enable === true ? 'enable' : 'disable'),
+ type : 'POST',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ deleteRepository : function(repository, suc, err) {
+ var reposID = encodeURIComponent(repository);
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/repositories/' + reposID,
+ type : 'DELETE',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ listRepositories : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/repositories',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ resend: true,
+ success : suc,
+ error : err
+ });
+ },
+
+ getCPUInfo : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/cpuinfo',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ resend : true,
+ success : suc,
+ error : err ? err : function(data) {
+ wok.message.error(data.responseJSON.reason);
+ }
+ });
+ }
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.host.js b/plugins/gingerbase/ui/js/src/gingerbase.host.js
new file mode 100644
index 0000000..8808e17
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.host.js
@@ -0,0 +1,859 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.host={};
+
+kimchi.host_main = function() {
+ var expand = function(header, toExpand) {
+ var controlledNode = $(header).attr('aria-controls');
+ $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
+ $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
+ };
+
+ var repositoriesGrid = null;
+ var initRepositoriesGrid = function(repo_type) {
+ var gridFields=[];
+ if (repo_type == "yum") {
+ gridFields=[{
+ name: 'repo_id',
+ label: i18n['GGBREPO6004M'],
+ 'class': 'repository-id'
+ }, {
+ name: 'config[repo_name]',
+ label: i18n['GGBREPO6005M'],
+ 'class': 'repository-name'
+ }, {
+ name: 'enabled',
+ label: i18n['GGBREPO6009M'],
+ 'class': 'repository-enabled'
+ }];
+ }
+ else if (repo_type == "deb") {
+ gridFields=[{
+ name: 'baseurl',
+ label: i18n['GGBREPO6006M'],
+ makeTitle: true,
+ 'class': 'repository-baseurl deb'
+ }, {
+ name: 'enabled',
+ label: i18n['GGBREPO6009M'],
+ 'class': 'repository-enabled deb'
+ }, {
+ name: 'config[dist]',
+ label: "dist",
+ 'class': 'repository-gpgcheck deb'
+ }, {
+ name: 'config[comps]',
+ label: "comps",
+ 'class': 'repository-gpgcheck deb'
+ }];
+ }
+ else {
+ gridFields=[{
+ name: 'repo_id',
+ label: i18n['GGBREPO6004M'],
+ 'class': 'repository-id'
+ }, {
+ name: 'enabled',
+ label: i18n['GGBREPO6009M'],
+ 'class': 'repository-enabled'
+ }, {
+ name: 'baseurl',
+ label: i18n['GGBREPO6006M'],
+ makeTitle: true,
+ 'class': 'repository-baseurl'
+ }];
+ }
+ repositoriesGrid = new wok.widget.Grid({
+ container: 'repositories-grid-container',
+ id: 'repositories-grid',
+ title: i18n['GGBREPO6003M'],
+ toolbarButtons: [{
+ id: 'repositories-grid-add-button',
+ label: i18n['GGBREPO6012M'],
+ onClick: function(event) {
+ wok.window.open({url:'plugins/gingerbase/repository-add.html',
+ class: repo_type});
+ }
+ }, {
+ id: 'repositories-grid-enable-button',
+ label: i18n['GGBREPO6016M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ var name = repository['repo_id'];
+ var enable = !repository['enabled'];
+ $(this).prop('disabled', true);
+ kimchi.enableRepository(name, enable, function() {
+ wok.topic('kimchi/repositoryUpdated').publish();
+ });
+ }
+ }, {
+ id: 'repositories-grid-edit-button',
+ label: i18n['GGBREPO6013M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ kimchi.selectedRepository = repository['repo_id'];
+ wok.window.open({url:'plugins/gingerbase/repository-edit.html',
+ class: repo_type});
+ }
+ }, {
+ id: 'repositories-grid-remove-button',
+ label: i18n['GGBREPO6014M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+
+ var settings = {
+ title : i18n['GGBREPO6001M'],
+ content : i18n['GGBREPO6002M'],
+ confirm : i18n['GGBAPI6004M'],
+ cancel : i18n['GGBAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.deleteRepository(
+ repository['repo_id'],
+ function(result) {
+ wok.topic('kimchi/repositoryDeleted').publish(result);
+ }, function(error) {
+ }
+ );
+ });
+ }
+ }],
+ onRowSelected: function(row) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ $('#repositories-grid-remove-button').prop('disabled', false);
+ $('#repositories-grid-edit-button').prop('disabled', false);
+ var enabled = repository['enabled'];
+ $('#repositories-grid-enable-button')
+ .text(i18n[enabled ? 'GGBREPO6017M' : 'GGBREPO6016M'])
+ .prop('disabled', false);
+ },
+ frozenFields: [],
+ fields: gridFields,
+ data: listRepositories
+ });
+ };
+
+ var listRepositories = function(gridCallback) {
+ kimchi.listRepositories(function(repositories) {
+ if($.isFunction(gridCallback)) {
+ gridCallback(repositories);
+ }
+ else {
+ if(repositoriesGrid) {
+ repositoriesGrid.setData(repositories);
+ }
+ else {
+ initRepositoriesGrid();
+ repositoriesGrid.setData(repositories);
+ }
+ }
+ },
+ function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+
+ if($.isFunction(gridCallback)) {
+ gridCallback([]);
+ }
+ repositoriesGrid &&
+ repositoriesGrid.showMessage(message || i18n['GGBUPD6008M']);
+ });
+
+ $('#repositories-grid-remove-button').prop('disabled', true);
+ $('#repositories-grid-edit-button').prop('disabled', true);
+ $('#repositories-grid-enable-button').prop('disabled', true);
+ };
+
+ var softwareUpdatesGridID = 'software-updates-grid';
+ var softwareUpdatesGrid = null;
+ var progressAreaID = 'software-updates-progress-textarea';
+ var reloadProgressArea = function(result) {
+ var progressArea = $('#' + progressAreaID)[0];
+ $(progressArea).text(result['message']);
+ var scrollTop = $(progressArea).prop('scrollHeight');
+ $(progressArea).prop('scrollTop', scrollTop);
+ };
+
+ var initSoftwareUpdatesGrid = function(softwareUpdates) {
+ softwareUpdatesGrid = new wok.widget.Grid({
+ container: 'software-updates-grid-container',
+ id: softwareUpdatesGridID,
+ title: i18n['GGBUPD6001M'],
+ rowSelection: 'disabled',
+ toolbarButtons: [{
+ id: softwareUpdatesGridID + '-update-button',
+ label: i18n['GGBUPD6006M'],
+ disabled: true,
+ onClick: function(event) {
+ var updateButton = $(this);
+ var progressArea = $('#' + progressAreaID)[0];
+ $('#software-updates-progress-container').removeClass('hidden');
+ $(progressArea).text('');
+ !wok.isElementInViewport(progressArea) &&
+ progressArea.scrollIntoView();
+ $(updateButton).text(i18n['GGBUPD6007M']).prop('disabled', true);
+
+ kimchi.updateSoftware(function(result) {
+ reloadProgressArea(result);
+ $(updateButton).text(i18n['GGBUPD6006M']).prop('disabled', false);
+ wok.topic('kimchi/softwareUpdated').publish({
+ result: result
+ });
+ }, function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+ wok.message.error(message || i18n['GGBUPD6009M']);
+ $(updateButton).text(i18n['GGBUPD6006M']).prop('disabled', false);
+ }, reloadProgressArea);
+ }
+ }],
+ frozenFields: [],
+ fields: [{
+ name: 'package_name',
+ label: i18n['GGBUPD6002M'],
+ 'class': 'software-update-name'
+ }, {
+ name: 'version',
+ label: i18n['GGBUPD6003M'],
+ 'class': 'software-update-version'
+ }, {
+ name: 'arch',
+ label: i18n['GGBUPD6004M'],
+ 'class': 'software-update-arch'
+ }, {
+ name: 'repository',
+ label: i18n['GGBUPD6005M'],
+ 'class': 'software-update-repos'
+ }],
+ data: listSoftwareUpdates
+ });
+ };
+
+ var listSoftwareUpdates = function(gridCallback) {
+ kimchi.listSoftwareUpdates(function(softwareUpdates) {
+ if($.isFunction(gridCallback)) {
+ gridCallback(softwareUpdates);
+ }
+ else {
+ if(softwareUpdatesGrid) {
+ softwareUpdatesGrid.setData(softwareUpdates);
+ }
+ else {
+ initSoftwareUpdatesGrid(softwareUpdates);
+ }
+ }
+
+ var updateButton = $('#' + softwareUpdatesGridID + '-update-button');
+ $(updateButton).prop('disabled', softwareUpdates.length === 0);
+ }, function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+ if($.isFunction(gridCallback)) {
+ gridCallback([]);
+ }
+ softwareUpdatesGrid &&
+ softwareUpdatesGrid.showMessage(message || i18n['GGBUPD6008M']);
+ });
+ };
+
+ var reportGridID = 'available-reports-grid';
+ var reportGrid = null;
+ var enableReportButtons = function(toEnable) {
+ var buttonID = '#{grid}-{btn}-button';
+ $.each(['rename', 'remove', 'download'], function(i, n) {
+ $(wok.substitute(buttonID, {
+ grid: reportGridID,
+ btn: n
+ })).prop('disabled', !toEnable);
+ });
+ };
+ var initReportGrid = function(reports) {
+ reportGrid = new wok.widget.Grid({
+ container: 'available-reports-grid-container',
+ id: reportGridID,
+ title: i18n['GGBDR6002M'],
+ toolbarButtons: [{
+ id: reportGridID + '-generate-button',
+ label: i18n['GGBDR6006M'],
+ onClick: function(event) {
+ wok.window.open('plugins/gingerbase/report-add.html');
+ }
+ }, {
+ id: reportGridID + '-rename-button',
+ label: i18n['GGBDR6008M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ kimchi.selectedReport = report['name'];
+ wok.window.open('plugins/gingerbase/report-rename.html');
+ }
+ }, {
+ id: reportGridID + '-remove-button',
+ label: i18n['GGBDR6009M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ var settings = {
+ title : i18n['GGBAPI6004M'],
+ content : i18n['GGBDR6001M'],
+ confirm : i18n['GGBAPI6002M'],
+ cancel : i18n['GGBAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.deleteReport({
+ name: report['name']
+ }, function(result) {
+ listDebugReports();
+ }, function(error) {
+ wok.message.error(error.responseJSON.reason);
+ });
+ });
+ }
+ }, {
+ id: reportGridID + '-download-button',
+ label: i18n['GGBDR6010M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ kimchi.downloadReport({
+ file: report['uri']
+ });
+ }
+ }],
+ onRowSelected: function(row) {
+ var report = reportGrid.getSelected();
+ // Only enable report buttons if the selected line is not a
+ // pending report
+ if (report['time'] == i18n['GGBDR6007M']) {
+ var gridElement = $('#'+ reportGridID);
+ var row = $('tr:contains(' + report['name'] + ')', gridElement);
+ enableReportButtons(false);
+ row.attr('class', '');
+ }
+ else {
+ enableReportButtons(true);
+ }
+ },
+ frozenFields: [],
+ fields: [{
+ name: 'name',
+ label: i18n['GGBDR6003M'],
+ 'class': 'debug-report-name'
+ }, {
+ name: 'time',
+ label: i18n['GGBDR6005M'],
+ 'class': 'debug-report-time'
+ }],
+ data: reports
+ });
+ };
+
+ var getPendingReports = function() {
+ var reports = []
+ var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/gingerbase/debugreports/*')
+
+ kimchi.getTasksByFilter(filter, function(tasks) {
+ for(var i = 0; i < tasks.length; i++) {
+ reportName = tasks[i].target_uri.replace(/^\/plugins\/gingerbase\/debugreports\//, '') || i18n['GGBDR6012M'];
+ reports.push({'name': reportName, 'time': i18n['GGBDR6007M']})
+
+ if(kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) {
+ continue;
+ }
+
+ kimchi.trackTask(tasks[i].id, function(result) {
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, function(result) {
+ // Error message from Async Task status
+ if (result['message']) {
+ var errText = result['message'];
+ }
+ // Error message from standard kimchi exception
+ else {
+ var errText = result['responseJSON']['reason'];
+ }
+ result && wok.message.error(errText);
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, null);
+ }
+ }, null, true);
+
+ return reports;
+ };
+
+ var listDebugReports = function() {
+ kimchi.listReports(function(reports) {
+ pendingReports = getPendingReports();
+ allReports = pendingReports.concat(reports);
+ $('#debug-report-section').removeClass('hidden');
+
+ // Row selection will be cleared so disable buttons here
+ enableReportButtons(false);
+
+ if(reportGrid) {
+ reportGrid.setData(allReports);
+ }
+ else {
+ initReportGrid(allReports);
+ }
+
+ // Set id-debug-img to pending reports
+ // It will display a loading icon
+ var gridElement = $('#' + reportGridID);
+ $.each($('td:contains(' + i18n['GGBDR6007M'] + ')', gridElement), function(index, row) {
+ $(row).parent().addClass('no-hover');
+ $(row).attr('id', 'id-debug-img');
+ });
+ }, function(error) {
+ if(error['status'] == 403) {
+ $('#debug-report-section').addClass('hidden');
+ return;
+ }
+ $('#debug-report-section').removeClass('hidden');
+ });
+ };
+
+ var shutdownButtonID = '#host-button-shutdown';
+ var restartButtonID = '#host-button-restart';
+ var shutdownHost = function(params) {
+ var settings = {
+ title : i18n['GGBAPI6004M'],
+ content : i18n['GGBHOST6008M'],
+ confirm : i18n['GGBAPI6002M'],
+ cancel : i18n['GGBAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.shutdown(params);
+ $(shutdownButtonID).prop('disabled', true);
+ $(restartButtonID).prop('disabled', true);
+ // Check if there is any VM is running.
+ // FIXME : Find alternative way to figure out if any vms running
+ // kimchi.listVMs(function(vms) {
+ // for(var i = 0; i < vms.length; i++) {
+ // if(vms[i]['state'] === 'running') {
+ // wok.message.error.code('GGBHOST6001E');
+ // $(shutdownButtonID).prop('disabled', false);
+ // $(restartButtonID).prop('disabled', false);
+ // return;
+ // }
+ // }
+ //
+ // });
+ }, function() {
+ });
+ };
+
+ var initPage = function() {
+ $('#host-info-container .section-header').each(function(i, header) {
+ $('<span class="arrow"></span>').prependTo(header);
+ var toExpand = $(header).attr('aria-expanded') !== 'false';
+ expand(header, toExpand);
+ });
+
+ $('#host-info-container').on('click', '.section-header', function(event) {
+ var toExpand = $(this).attr('aria-expanded') === 'false';
+ expand(this, toExpand);
+ });
+
+ $('#host-button-shutdown').on('click', function(event) {
+ shutdownHost(null);
+ });
+
+ $('#host-button-restart').on('click', function(event) {
+ shutdownHost({
+ reboot: true
+ });
+ });
+
+ var setupUI = function() {
+ if (kimchi.capabilities == undefined) {
+ setTimeout(setupUI, 2000);
+ return;
+ }
+
+ if((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool']!="None")) {
+ initRepositoriesGrid(kimchi.capabilities['repo_mngt_tool']);
+ $('#repositories-section').switchClass('hidden', kimchi.capabilities['repo_mngt_tool']);
+ wok.topic('kimchi/repositoryAdded')
+ .subscribe(listRepositories);
+ wok.topic('kimchi/repositoryUpdated')
+ .subscribe(listRepositories);
+ wok.topic('kimchi/repositoryDeleted')
+ .subscribe(listRepositories);
+ }
+
+ if(kimchi.capabilities['update_tool']) {
+ $('#software-update-section').removeClass('hidden');
+ initSoftwareUpdatesGrid();
+ wok.topic('kimchi/softwareUpdated')
+ .subscribe(listSoftwareUpdates);
+ $('#software-updates-progress-container').accordion({
+ collapsible: true
+ });
+ }
+
+ if(kimchi.capabilities['system_report_tool']) {
+ listDebugReports();
+ wok.topic('kimchi/debugReportAdded')
+ .subscribe(listDebugReports);
+ wok.topic('kimchi/debugReportRenamed')
+ .subscribe(listDebugReports);
+ }
+ };
+ setupUI();
+ };
+
+ kimchi.getHost(function(data) {
+ var htmlTmpl = $('#host-tmpl').html();
+ data['logo'] = data['logo'] || '';
+ data['memory'] = wok.formatMeasurement(data['memory'], {
+ fixed: 2
+ });
+ var templated = wok.substitute(htmlTmpl, data);
+ $('#host-content-container').html(templated);
+
+ initPage();
+ initTracker();
+ });
+
+ var StatsMgr = function() {
+ var statsArray = {
+ cpu: {
+ u: {
+ type: 'percent',
+ legend: i18n['GGBHOST6002M'],
+ points: []
+ }
+ },
+ memory: {
+ u: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ legend: i18n['GGBHOST6003M'],
+ points: []
+ }
+ },
+ diskIO: {
+ r: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['GGBHOST6004M'],
+ points: []
+ },
+ w: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['GGBHOST6005M'],
+ 'class': 'disk-write',
+ points: []
+ }
+ },
+ networkIO: {
+ r: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['GGBHOST6006M'],
+ points: []
+ },
+ s: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['GGBHOST6007M'],
+ 'class': 'network-sent',
+ points: []
+ }
+ }
+ };
+ var SIZE = 20;
+ var cursor = SIZE;
+
+ var add = function(stats) {
+ for(var key in stats) {
+ var item = stats[key];
+ for(var metrics in item) {
+ var value = item[metrics]['v'];
+ var max = item[metrics]['max'];
+ var unifiedMetrics = statsArray[key][metrics];
+ var ps = unifiedMetrics['points'];
+ if(!Array.isArray(value)){
+ ps.push(value);
+ if(ps.length > SIZE + 1) {
+ ps.shift();
+ }
+ }
+ else{
+ ps=ps.concat(value);
+ ps.splice(0, ps.length-SIZE-1);
+ unifiedMetrics['points']=ps;
+ }
+ if(max !== undefined) {
+ unifiedMetrics['max'] = max;
+ }
+ else {
+ if(unifiedMetrics['type'] !== 'value') {
+ continue;
+ }
+ max = -Infinity;
+ $.each(ps, function(i, value) {
+ if(value > max) {
+ max = value;
+ }
+ });
+ if(max === 0) {
+ ++max;
+ }
+ max *= 1.1;
+ unifiedMetrics['max'] = max;
+ }
+ }
+ }
+ cursor++;
+ };
+
+ var get = function(which) {
+ var stats = statsArray[which];
+ var lines = [];
+ for(var k in stats) {
+ var obj = stats[k];
+ var line = {
+ type: obj['type'],
+ base: obj['base'],
+ unit: obj['unit'],
+ fixed: obj['fixed'],
+ legend: obj['legend']
+ };
+ if(obj['max']) {
+ line['max'] = obj['max'];
+ }
+ if(obj['class']) {
+ line['class'] = obj['class'];
+ }
+ var ps = obj['points'];
+ var numStats = ps.length;
+ var unifiedPoints = [];
+ $.each(ps, function(i, value) {
+ unifiedPoints.push({
+ x: cursor - numStats + i,
+ y: value
+ });
+ });
+ line['points'] = unifiedPoints;
+ lines.push(line);
+ }
+ return lines;
+ };
+
+ return {
+ add: add,
+ get: get
+ };
+ };
+
+ var Tracker = function(charts) {
+ var charts = charts;
+ var timer = null;
+ var statsPool = new StatsMgr();
+ var setCharts = function(newCharts) {
+ charts = newCharts;
+ for(var key in charts) {
+ var chart = charts[key];
+ chart.updateUI(statsPool.get(key));
+ }
+ };
+
+ var self = this;
+
+ var UnifyStats = function(stats) {
+ var result= {
+ cpu: {
+ u: {
+ v: stats['cpu_utilization']
+ }
+ },
+ memory: {
+ u: {
+ }
+ },
+ diskIO: {
+ r: {
+ v: stats['disk_read_rate']
+ },
+ w: {
+ v: stats['disk_write_rate']
+ }
+ },
+ networkIO: {
+ r: {
+ v: stats['net_recv_rate']
+ },
+ s: {
+ v: stats['net_sent_rate']
+ }
+ }
+ };
+ if(Array.isArray(stats['memory'])){
+ result.memory.u['v']=[];
+ result.memory.u['max']=-Infinity;
+ for(var i=0;i<stats['memory'].length;i++){
+ result.memory.u['v'].push(stats['memory'][i]['avail']);
+ result.memory.u['max']=Math.max(result.memory.u['max'],stats['memory'][i]['total']);
+ }
+ }
+ else {
+ result.memory.u['v']=stats['memory']['avail'],
+ result.memory.u['max']=stats['memory']['total']
+ }
+ return(result);
+ };
+
+
+ var statsCallback = function(stats) {
+ var unifiedStats = UnifyStats(stats);
+ statsPool.add(unifiedStats);
+ for(var key in charts) {
+ var chart = charts[key];
+ chart.updateUI(statsPool.get(key));
+ }
+ timer = setTimeout(function() {
+ continueTrack();
+ }, 1000);
+ };
+
+ var track = function() {
+ kimchi.getHostStatsHistory(statsCallback,
+ function() {
+ continueTrack();
+ });
+ };
+
+ var continueTrack = function() {
+ kimchi.getHostStats(statsCallback,
+ function() {
+ continueTrack();
+ });
+ };
+
+ var destroy = function() {
+ timer && clearTimeout(timer);
+ timer = null;
+ };
+
+ return {
+ setCharts: setCharts,
+ start: track,
+ stop: destroy
+ };
+ };
+
+ var initTracker = function() {
+ // TODO: Extend tabs with onUnload event to unregister timers.
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.stop();
+ delete kimchi.hostTimer;
+ }
+
+ var trackedCharts = {
+ cpu: new wok.widget.LineChart({
+ id: 'chart-cpu',
+ node: 'container-chart-cpu',
+ type: 'percent'
+ }),
+ memory: new wok.widget.LineChart({
+ id: 'chart-memory',
+ node: 'container-chart-memory',
+ type: 'value'
+ }),
+ diskIO: new wok.widget.LineChart({
+ id: 'chart-disk-io',
+ node: 'container-chart-disk-io',
+ type: 'value'
+ }),
+ networkIO: new wok.widget.LineChart({
+ id: 'chart-network-io',
+ node: 'container-chart-network-io',
+ type: 'value'
+ })
+ };
+
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.setCharts(trackedCharts);
+ }
+ else {
+ kimchi.hostTimer = new Tracker(trackedCharts);
+ kimchi.hostTimer.start();
+ }
+ };
+
+ $('#host-root-container').on('remove', function() {
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.stop();
+ delete kimchi.hostTimer;
+ }
+
+ repositoriesGrid && repositoriesGrid.destroy();
+ wok.topic('kimchi/repositoryAdded')
+ .unsubscribe(listRepositories);
+ wok.topic('kimchi/repositoryUpdated')
+ .unsubscribe(listRepositories);
+ wok.topic('kimchi/repositoryDeleted')
+ .unsubscribe(listRepositories);
+
+ softwareUpdatesGrid && softwareUpdatesGrid.destroy();
+ wok.topic('kimchi/softwareUpdated').unsubscribe(listSoftwareUpdates);
+
+ reportGrid && reportGrid.destroy();
+ wok.topic('kimchi/debugReportAdded').unsubscribe(listDebugReports);
+ wok.topic('kimchi/debugReportRenamed').unsubscribe(listDebugReports);
+ });
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.main.js b/plugins/gingerbase/ui/js/src/gingerbase.main.js
new file mode 100644
index 0000000..824673d
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.main.js
@@ -0,0 +1,26 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.capabilities = undefined;
+kimchi.getCapabilities(function(result) {
+ kimchi.capabilities = result;
+
+ if(kimchi.capabilities.federation=="on")
+ $('#peers').removeClass('hide-content');
+}, function() {
+ kimchi.capabilities = {};
+});
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js b/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
new file mode 100644
index 0000000..e8a2f4d
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
@@ -0,0 +1,72 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.report_add_main = function() {
+ var reportGridID = 'available-reports-grid';
+ var addReportForm = $('#form-report-add');
+ var submitButton = $('#button-report-add');
+ var nameTextbox = $('input[name="name"]', addReportForm);
+ nameTextbox.select();
+
+ var submitForm = function(event) {
+ if(submitButton.prop('disabled')) {
+ return false;
+ }
+ var reportName = nameTextbox.val();
+ var validator = RegExp("^[_A-Za-z0-9-]*$");
+ if (!validator.test(reportName)) {
+ wok.message.error.code('GGBDR6011M');
+ return false;
+ }
+ var formData = addReportForm.serializeObject();
+ var taskAccepted = false;
+ var onTaskAccepted = function() {
+ if(taskAccepted) {
+ return;
+ }
+ taskAccepted = true;
+ wok.window.close();
+ wok.topic('kimchi/debugReportAdded').publish();
+ };
+
+ kimchi.createReport(formData, function(result) {
+ onTaskAccepted();
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, function(result) {
+ // Error message from Async Task status
+ if (result['message']) {
+ var errText = result['message'];
+ }
+ // Error message from standard kimchi exception
+ else {
+ var errText = result['responseJSON']['reason'];
+ }
+ result && wok.message.error(errText);
+
+ taskAccepted &&
+ $('.grid-body-view table tr:first-child',
+ '#' + reportGridID).remove();
+ submitButton.prop('disabled', false);
+ nameTextbox.select();
+ }, onTaskAccepted);
+
+ event.preventDefault();
+ };
+
+ addReportForm.on('submit', submitForm);
+ submitButton.on('click', submitForm);
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js b/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
new file mode 100644
index 0000000..b107ce5
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
@@ -0,0 +1,66 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.report_rename_main = function() {
+ var renameReportForm = $('#form-report-rename');
+ var submitButton = $('#button-report-rename');
+ var nameTextbox = $('input[name="name"]', renameReportForm);
+ var submitForm = function(event) {
+ if(submitButton.prop('disabled')) {
+ return false;
+ }
+ var reportName = nameTextbox.val();
+
+ // if the user hasn't changed the report's name,
+ // nothing should be done.
+ if (reportName == kimchi.selectedReport) {
+ wok.message.error.code('GGBDR6013M');
+ return false;
+ }
+
+ var validator = RegExp("^[A-Za-z0-9-]*$");
+ if (!validator.test(reportName)) {
+ wok.message.error.code('GGBDR6011M');
+ return false;
+ }
+ var formData = renameReportForm.serializeObject();
+ submitButton.prop('disabled', true);
+ nameTextbox.prop('disabled', true);
+ kimchi.renameReport(kimchi.selectedReport, formData, function(result) {
+ submitButton.prop('disabled', false);
+ nameTextbox.prop('disabled', false);
+ wok.window.close();
+ wok.topic('kimchi/debugReportRenamed').publish({
+ result: result
+ });
+ }, function(result) {
+ var errText = result &&
+ result['responseJSON'] &&
+ result['responseJSON']['reason'];
+ wok.message.error(errText);
+ submitButton.prop('disabled', false);
+ nameTextbox.prop('disabled', false).focus();
+ });
+
+ event.preventDefault();
+ };
+
+ renameReportForm.on('submit', submitForm);
+ submitButton.on('click', submitForm);
+
+ nameTextbox.val(kimchi.selectedReport).select();
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js b/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
new file mode 100644
index 0000000..e612cdf
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
@@ -0,0 +1,96 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.repository_add_main = function() {
+
+ var addForm = $('#form-repository-add');
+ var addButton = $('#button-repository-add');
+
+ var validateField = function(event) {
+ var valid=($(this).val()!=='');
+ $(addButton).prop('disabled', !valid);
+ return(valid);
+ };
+
+ var validateForm = function(event) {
+ var valid=false;
+ addForm.find('input.required').each( function() {
+ valid=($(this).val()!=='');
+ return(!valid);
+ });
+ return(valid);
+ }
+
+ addForm.find('input.required').on('input propertychange', validateField);
+
+ var weedObject = function(obj) {
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ if((typeof(obj[key])==="object") && !Array.isArray(obj[key])) {
+ weedObject(obj[key]);
+ }
+ else if(obj[key] == '') {
+ delete obj[key];
+ }
+ }
+ }
+ }
+
+ var addRepository = function(event) {
+ var valid = validateForm();
+ if(!valid) {
+ return false;
+ }
+
+ var formData = $(addForm).serializeObject();
+
+ if (formData && formData.isMirror!=undefined) {
+ formData.isMirror=(String(formData.isMirror).toLowerCase() === 'true');
+ }
+ if(formData.isMirror) {
+ if(formData.config==undefined) {
+ formData.config=new Object();
+ }
+ formData.config.mirrorlist=formData.baseurl;
+ delete formData.baseurl;
+ delete formData.isMirror;
+ }
+ weedObject(formData);
+ if(formData.config && formData.config.comps) {
+ formData.config.comps=formData.config.comps.split(/[,\s]/);
+ for(var i=0; i>formData.config.comps.length; i++) {
+ formData.config.comps[i]=formData.config.comps[i].trim();
+ }
+ for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
+ formData.config.comps.splice(j, 1);
+ }
+ }
+
+ kimchi.createRepository(formData, function() {
+ wok.topic('kimchi/repositoryAdded').publish();
+ wok.window.close();
+ }, function(jqXHR, textStatus, errorThrown) {
+ var reason = jqXHR &&
+ jqXHR['responseJSON'] &&
+ jqXHR['responseJSON']['reason'];
+ wok.message.error(reason);
+ });
+ return false;
+ };
+
+ $(addForm).on('submit', addRepository);
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js b/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
new file mode 100644
index 0000000..a6e0371
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
@@ -0,0 +1,74 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.repository_edit_main = function() {
+
+ var editForm = $('#form-repository-edit');
+
+ var saveButton = $('#repository-edit-button-save');
+
+ if(kimchi.capabilities['repo_mngt_tool']=="yum") {
+ editForm.find('input.deb').prop('disabled', true);
+ }
+ else if(kimchi.capabilities['repo_mngt_tool']=="deb") {
+ editForm.find('input.yum').prop('disabled', true);
+ }
+
+ kimchi.retrieveRepository(kimchi.selectedRepository, function(repository) {
+ editForm.fillWithObject(repository);
+
+ $('input', editForm).on('input propertychange', function(event) {
+ if($(this).val() !== '') {
+ $(saveButton).prop('disabled', false);
+ }
+ });
+ });
+
+
+ var editRepository = function(event) {
+ var formData = $(editForm).serializeObject();
+
+ if (formData && formData.config) {
+ formData.config.gpgcheck=(String(formData.config.gpgcheck).toLowerCase() === 'true');
+ }
+
+ if(formData.config && formData.config.comps) {
+ formData.config.comps=formData.config.comps.split(/[,\s]/);
+ for(var i=0; i>formData.config.comps.length; i++) {
+ formData.config.comps[i]=formData.config.comps[i].trim();
+ }
+ for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
+ formData.config.comps.splice(j, 1);
+ }
+ }
+
+ kimchi.updateRepository(kimchi.selectedRepository, formData, function() {
+ wok.topic('kimchi/repositoryUpdated').publish();
+ wok.window.close();
+ }, function(jqXHR, textStatus, errorThrown) {
+ var reason = jqXHR &&
+ jqXHR['responseJSON'] &&
+ jqXHR['responseJSON']['reason'];
+ wok.message.error(reason);
+ });
+
+ return false;
+ };
+
+ $(editForm).on('submit', editRepository);
+ $(saveButton).on('click', editRepository);
+};
diff --git a/plugins/kimchi/ui/js/src/kimchi.host.js b/plugins/kimchi/ui/js/src/kimchi.host.js
deleted file mode 100644
index e2d2511..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.host.js
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.host={};
-
-kimchi.host_main = function() {
- var expand = function(header, toExpand) {
- var controlledNode = $(header).attr('aria-controls');
- $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
- $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
- };
-
- var repositoriesGrid = null;
- var initRepositoriesGrid = function(repo_type) {
- var gridFields=[];
- if (repo_type == "yum") {
- gridFields=[{
- name: 'repo_id',
- label: i18n['KCHREPO6004M'],
- 'class': 'repository-id'
- }, {
- name: 'config[repo_name]',
- label: i18n['KCHREPO6005M'],
- 'class': 'repository-name'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled'
- }];
- }
- else if (repo_type == "deb") {
- gridFields=[{
- name: 'baseurl',
- label: i18n['KCHREPO6006M'],
- makeTitle: true,
- 'class': 'repository-baseurl deb'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled deb'
- }, {
- name: 'config[dist]',
- label: "dist",
- 'class': 'repository-gpgcheck deb'
- }, {
- name: 'config[comps]',
- label: "comps",
- 'class': 'repository-gpgcheck deb'
- }];
- }
- else {
- gridFields=[{
- name: 'repo_id',
- label: i18n['KCHREPO6004M'],
- 'class': 'repository-id'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled'
- }, {
- name: 'baseurl',
- label: i18n['KCHREPO6006M'],
- makeTitle: true,
- 'class': 'repository-baseurl'
- }];
- }
- repositoriesGrid = new wok.widget.Grid({
- container: 'repositories-grid-container',
- id: 'repositories-grid',
- title: i18n['KCHREPO6003M'],
- toolbarButtons: [{
- id: 'repositories-grid-add-button',
- label: i18n['KCHREPO6012M'],
- onClick: function(event) {
- wok.window.open({url:'plugins/kimchi/repository-add.html',
- class: repo_type});
- }
- }, {
- id: 'repositories-grid-enable-button',
- label: i18n['KCHREPO6016M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- var name = repository['repo_id'];
- var enable = !repository['enabled'];
- $(this).prop('disabled', true);
- kimchi.enableRepository(name, enable, function() {
- wok.topic('kimchi/repositoryUpdated').publish();
- });
- }
- }, {
- id: 'repositories-grid-edit-button',
- label: i18n['KCHREPO6013M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- kimchi.selectedRepository = repository['repo_id'];
- wok.window.open({url:'plugins/kimchi/repository-edit.html',
- class: repo_type});
- }
- }, {
- id: 'repositories-grid-remove-button',
- label: i18n['KCHREPO6014M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
-
- var settings = {
- title : i18n['KCHREPO6001M'],
- content : i18n['KCHREPO6002M'],
- confirm : i18n['KCHAPI6004M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.deleteRepository(
- repository['repo_id'],
- function(result) {
- wok.topic('kimchi/repositoryDeleted').publish(result);
- }, function(error) {
- }
- );
- });
- }
- }],
- onRowSelected: function(row) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- $('#repositories-grid-remove-button').prop('disabled', false);
- $('#repositories-grid-edit-button').prop('disabled', false);
- var enabled = repository['enabled'];
- $('#repositories-grid-enable-button')
- .text(i18n[enabled ? 'KCHREPO6017M' : 'KCHREPO6016M'])
- .prop('disabled', false);
- },
- frozenFields: [],
- fields: gridFields,
- data: listRepositories
- });
- };
-
- var listRepositories = function(gridCallback) {
- kimchi.listRepositories(function(repositories) {
- if($.isFunction(gridCallback)) {
- gridCallback(repositories);
- }
- else {
- if(repositoriesGrid) {
- repositoriesGrid.setData(repositories);
- }
- else {
- initRepositoriesGrid();
- repositoriesGrid.setData(repositories);
- }
- }
- },
- function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
-
- if($.isFunction(gridCallback)) {
- gridCallback([]);
- }
- repositoriesGrid &&
- repositoriesGrid.showMessage(message || i18n['KCHUPD6008M']);
- });
-
- $('#repositories-grid-remove-button').prop('disabled', true);
- $('#repositories-grid-edit-button').prop('disabled', true);
- $('#repositories-grid-enable-button').prop('disabled', true);
- };
-
- var softwareUpdatesGridID = 'software-updates-grid';
- var softwareUpdatesGrid = null;
- var progressAreaID = 'software-updates-progress-textarea';
- var reloadProgressArea = function(result) {
- var progressArea = $('#' + progressAreaID)[0];
- $(progressArea).text(result['message']);
- var scrollTop = $(progressArea).prop('scrollHeight');
- $(progressArea).prop('scrollTop', scrollTop);
- };
-
- var initSoftwareUpdatesGrid = function(softwareUpdates) {
- softwareUpdatesGrid = new wok.widget.Grid({
- container: 'software-updates-grid-container',
- id: softwareUpdatesGridID,
- title: i18n['KCHUPD6001M'],
- rowSelection: 'disabled',
- toolbarButtons: [{
- id: softwareUpdatesGridID + '-update-button',
- label: i18n['KCHUPD6006M'],
- disabled: true,
- onClick: function(event) {
- var updateButton = $(this);
- var progressArea = $('#' + progressAreaID)[0];
- $('#software-updates-progress-container').removeClass('hidden');
- $(progressArea).text('');
- !wok.isElementInViewport(progressArea) &&
- progressArea.scrollIntoView();
- $(updateButton).text(i18n['KCHUPD6007M']).prop('disabled', true);
-
- kimchi.updateSoftware(function(result) {
- reloadProgressArea(result);
- $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
- wok.topic('kimchi/softwareUpdated').publish({
- result: result
- });
- }, function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
- wok.message.error(message || i18n['KCHUPD6009M']);
- $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
- }, reloadProgressArea);
- }
- }],
- frozenFields: [],
- fields: [{
- name: 'package_name',
- label: i18n['KCHUPD6002M'],
- 'class': 'software-update-name'
- }, {
- name: 'version',
- label: i18n['KCHUPD6003M'],
- 'class': 'software-update-version'
- }, {
- name: 'arch',
- label: i18n['KCHUPD6004M'],
- 'class': 'software-update-arch'
- }, {
- name: 'repository',
- label: i18n['KCHUPD6005M'],
- 'class': 'software-update-repos'
- }],
- data: listSoftwareUpdates
- });
- };
-
- var listSoftwareUpdates = function(gridCallback) {
- kimchi.listSoftwareUpdates(function(softwareUpdates) {
- if($.isFunction(gridCallback)) {
- gridCallback(softwareUpdates);
- }
- else {
- if(softwareUpdatesGrid) {
- softwareUpdatesGrid.setData(softwareUpdates);
- }
- else {
- initSoftwareUpdatesGrid(softwareUpdates);
- }
- }
-
- var updateButton = $('#' + softwareUpdatesGridID + '-update-button');
- $(updateButton).prop('disabled', softwareUpdates.length === 0);
- }, function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
- if($.isFunction(gridCallback)) {
- gridCallback([]);
- }
- softwareUpdatesGrid &&
- softwareUpdatesGrid.showMessage(message || i18n['KCHUPD6008M']);
- });
- };
-
- var reportGridID = 'available-reports-grid';
- var reportGrid = null;
- var enableReportButtons = function(toEnable) {
- var buttonID = '#{grid}-{btn}-button';
- $.each(['rename', 'remove', 'download'], function(i, n) {
- $(wok.substitute(buttonID, {
- grid: reportGridID,
- btn: n
- })).prop('disabled', !toEnable);
- });
- };
- var initReportGrid = function(reports) {
- reportGrid = new wok.widget.Grid({
- container: 'available-reports-grid-container',
- id: reportGridID,
- title: i18n['KCHDR6002M'],
- toolbarButtons: [{
- id: reportGridID + '-generate-button',
- label: i18n['KCHDR6006M'],
- onClick: function(event) {
- wok.window.open('plugins/kimchi/report-add.html');
- }
- }, {
- id: reportGridID + '-rename-button',
- label: i18n['KCHDR6008M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- kimchi.selectedReport = report['name'];
- wok.window.open('plugins/kimchi/report-rename.html');
- }
- }, {
- id: reportGridID + '-remove-button',
- label: i18n['KCHDR6009M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- var settings = {
- title : i18n['KCHAPI6004M'],
- content : i18n['KCHDR6001M'],
- confirm : i18n['KCHAPI6002M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.deleteReport({
- name: report['name']
- }, function(result) {
- listDebugReports();
- }, function(error) {
- wok.message.error(error.responseJSON.reason);
- });
- });
- }
- }, {
- id: reportGridID + '-download-button',
- label: i18n['KCHDR6010M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- kimchi.downloadReport({
- file: report['uri']
- });
- }
- }],
- onRowSelected: function(row) {
- var report = reportGrid.getSelected();
- // Only enable report buttons if the selected line is not a
- // pending report
- if (report['time'] == i18n['KCHDR6007M']) {
- var gridElement = $('#'+ reportGridID);
- var row = $('tr:contains(' + report['name'] + ')', gridElement);
- enableReportButtons(false);
- row.attr('class', '');
- }
- else {
- enableReportButtons(true);
- }
- },
- frozenFields: [],
- fields: [{
- name: 'name',
- label: i18n['KCHDR6003M'],
- 'class': 'debug-report-name'
- }, {
- name: 'time',
- label: i18n['KCHDR6005M'],
- 'class': 'debug-report-time'
- }],
- data: reports
- });
- };
-
- var getPendingReports = function() {
- var reports = []
- var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/kimchi/debugreports/*')
-
- kimchi.getTasksByFilter(filter, function(tasks) {
- for(var i = 0; i < tasks.length; i++) {
- reportName = tasks[i].target_uri.replace(/^\/plugins\/kimchi\/debugreports\//, '') || i18n['KCHDR6012M'];
- reports.push({'name': reportName, 'time': i18n['KCHDR6007M']})
-
- if(kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) {
- continue;
- }
-
- kimchi.trackTask(tasks[i].id, function(result) {
- wok.topic('kimchi/debugReportAdded').publish();
- }, function(result) {
- // Error message from Async Task status
- if (result['message']) {
- var errText = result['message'];
- }
- // Error message from standard kimchi exception
- else {
- var errText = result['responseJSON']['reason'];
- }
- result && wok.message.error(errText);
- wok.topic('kimchi/debugReportAdded').publish();
- }, null);
- }
- }, null, true);
-
- return reports;
- };
-
- var listDebugReports = function() {
- kimchi.listReports(function(reports) {
- pendingReports = getPendingReports();
- allReports = pendingReports.concat(reports);
- $('#debug-report-section').removeClass('hidden');
-
- // Row selection will be cleared so disable buttons here
- enableReportButtons(false);
-
- if(reportGrid) {
- reportGrid.setData(allReports);
- }
- else {
- initReportGrid(allReports);
- }
-
- // Set id-debug-img to pending reports
- // It will display a loading icon
- var gridElement = $('#' + reportGridID);
- $.each($('td:contains(' + i18n['KCHDR6007M'] + ')', gridElement), function(index, row) {
- $(row).parent().addClass('no-hover');
- $(row).attr('id', 'id-debug-img');
- });
- }, function(error) {
- if(error['status'] == 403) {
- $('#debug-report-section').addClass('hidden');
- return;
- }
- $('#debug-report-section').removeClass('hidden');
- });
- };
-
- var shutdownButtonID = '#host-button-shutdown';
- var restartButtonID = '#host-button-restart';
- var shutdownHost = function(params) {
- var settings = {
- title : i18n['KCHAPI6004M'],
- content : i18n['KCHHOST6008M'],
- confirm : i18n['KCHAPI6002M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.shutdown(params);
- $(shutdownButtonID).prop('disabled', true);
- $(restartButtonID).prop('disabled', true);
- // Check if there is any VM is running.
- kimchi.listVMs(function(vms) {
- for(var i = 0; i < vms.length; i++) {
- if(vms[i]['state'] === 'running') {
- wok.message.error.code('KCHHOST6001E');
- $(shutdownButtonID).prop('disabled', false);
- $(restartButtonID).prop('disabled', false);
- return;
- }
- }
-
- });
- }, function() {
- });
- };
-
- var initPage = function() {
- $('#host-info-container .section-header').each(function(i, header) {
- $('<span class="arrow"></span>').prependTo(header);
- var toExpand = $(header).attr('aria-expanded') !== 'false';
- expand(header, toExpand);
- });
-
- $('#host-info-container').on('click', '.section-header', function(event) {
- var toExpand = $(this).attr('aria-expanded') === 'false';
- expand(this, toExpand);
- });
-
- $('#host-button-shutdown').on('click', function(event) {
- shutdownHost(null);
- });
-
- $('#host-button-restart').on('click', function(event) {
- shutdownHost({
- reboot: true
- });
- });
-
- var setupUI = function() {
- if (kimchi.capabilities == undefined) {
- setTimeout(setupUI, 2000);
- return;
- }
-
- if((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool']!="None")) {
- initRepositoriesGrid(kimchi.capabilities['repo_mngt_tool']);
- $('#repositories-section').switchClass('hidden', kimchi.capabilities['repo_mngt_tool']);
- wok.topic('kimchi/repositoryAdded')
- .subscribe(listRepositories);
- wok.topic('kimchi/repositoryUpdated')
- .subscribe(listRepositories);
- wok.topic('kimchi/repositoryDeleted')
- .subscribe(listRepositories);
- }
-
- if(kimchi.capabilities['update_tool']) {
- $('#software-update-section').removeClass('hidden');
- initSoftwareUpdatesGrid();
- wok.topic('kimchi/softwareUpdated')
- .subscribe(listSoftwareUpdates);
- $('#software-updates-progress-container').accordion({
- collapsible: true
- });
- }
-
- if(kimchi.capabilities['system_report_tool']) {
- listDebugReports();
- wok.topic('kimchi/debugReportAdded')
- .subscribe(listDebugReports);
- wok.topic('kimchi/debugReportRenamed')
- .subscribe(listDebugReports);
- }
- };
- setupUI();
- };
-
- kimchi.getHost(function(data) {
- var htmlTmpl = $('#host-tmpl').html();
- data['logo'] = data['logo'] || '';
- data['memory'] = wok.formatMeasurement(data['memory'], {
- fixed: 2
- });
- var templated = wok.substitute(htmlTmpl, data);
- $('#host-content-container').html(templated);
-
- initPage();
- initTracker();
- });
-
- var StatsMgr = function() {
- var statsArray = {
- cpu: {
- u: {
- type: 'percent',
- legend: i18n['KCHHOST6002M'],
- points: []
- }
- },
- memory: {
- u: {
- type: 'value',
- base: 2,
- fixed: 2,
- legend: i18n['KCHHOST6003M'],
- points: []
- }
- },
- diskIO: {
- r: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6004M'],
- points: []
- },
- w: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6005M'],
- 'class': 'disk-write',
- points: []
- }
- },
- networkIO: {
- r: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6006M'],
- points: []
- },
- s: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6007M'],
- 'class': 'network-sent',
- points: []
- }
- }
- };
- var SIZE = 20;
- var cursor = SIZE;
-
- var add = function(stats) {
- for(var key in stats) {
- var item = stats[key];
- for(var metrics in item) {
- var value = item[metrics]['v'];
- var max = item[metrics]['max'];
- var unifiedMetrics = statsArray[key][metrics];
- var ps = unifiedMetrics['points'];
- if(!Array.isArray(value)){
- ps.push(value);
- if(ps.length > SIZE + 1) {
- ps.shift();
- }
- }
- else{
- ps=ps.concat(value);
- ps.splice(0, ps.length-SIZE-1);
- unifiedMetrics['points']=ps;
- }
- if(max !== undefined) {
- unifiedMetrics['max'] = max;
- }
- else {
- if(unifiedMetrics['type'] !== 'value') {
- continue;
- }
- max = -Infinity;
- $.each(ps, function(i, value) {
- if(value > max) {
- max = value;
- }
- });
- if(max === 0) {
- ++max;
- }
- max *= 1.1;
- unifiedMetrics['max'] = max;
- }
- }
- }
- cursor++;
- };
-
- var get = function(which) {
- var stats = statsArray[which];
- var lines = [];
- for(var k in stats) {
- var obj = stats[k];
- var line = {
- type: obj['type'],
- base: obj['base'],
- unit: obj['unit'],
- fixed: obj['fixed'],
- legend: obj['legend']
- };
- if(obj['max']) {
- line['max'] = obj['max'];
- }
- if(obj['class']) {
- line['class'] = obj['class'];
- }
- var ps = obj['points'];
- var numStats = ps.length;
- var unifiedPoints = [];
- $.each(ps, function(i, value) {
- unifiedPoints.push({
- x: cursor - numStats + i,
- y: value
- });
- });
- line['points'] = unifiedPoints;
- lines.push(line);
- }
- return lines;
- };
-
- return {
- add: add,
- get: get
- };
- };
-
- var Tracker = function(charts) {
- var charts = charts;
- var timer = null;
- var statsPool = new StatsMgr();
- var setCharts = function(newCharts) {
- charts = newCharts;
- for(var key in charts) {
- var chart = charts[key];
- chart.updateUI(statsPool.get(key));
- }
- };
-
- var self = this;
-
- var UnifyStats = function(stats) {
- var result= {
- cpu: {
- u: {
- v: stats['cpu_utilization']
- }
- },
- memory: {
- u: {
- }
- },
- diskIO: {
- r: {
- v: stats['disk_read_rate']
- },
- w: {
- v: stats['disk_write_rate']
- }
- },
- networkIO: {
- r: {
- v: stats['net_recv_rate']
- },
- s: {
- v: stats['net_sent_rate']
- }
- }
- };
- if(Array.isArray(stats['memory'])){
- result.memory.u['v']=[];
- result.memory.u['max']=-Infinity;
- for(var i=0;i<stats['memory'].length;i++){
- result.memory.u['v'].push(stats['memory'][i]['avail']);
- result.memory.u['max']=Math.max(result.memory.u['max'],stats['memory'][i]['total']);
- }
- }
- else {
- result.memory.u['v']=stats['memory']['avail'],
- result.memory.u['max']=stats['memory']['total']
- }
- return(result);
- };
-
-
- var statsCallback = function(stats) {
- var unifiedStats = UnifyStats(stats);
- statsPool.add(unifiedStats);
- for(var key in charts) {
- var chart = charts[key];
- chart.updateUI(statsPool.get(key));
- }
- timer = setTimeout(function() {
- continueTrack();
- }, 1000);
- };
-
- var track = function() {
- kimchi.getHostStatsHistory(statsCallback,
- function() {
- continueTrack();
- });
- };
-
- var continueTrack = function() {
- kimchi.getHostStats(statsCallback,
- function() {
- continueTrack();
- });
- };
-
- var destroy = function() {
- timer && clearTimeout(timer);
- timer = null;
- };
-
- return {
- setCharts: setCharts,
- start: track,
- stop: destroy
- };
- };
-
- var initTracker = function() {
- // TODO: Extend tabs with onUnload event to unregister timers.
- if(kimchi.hostTimer) {
- kimchi.hostTimer.stop();
- delete kimchi.hostTimer;
- }
-
- var trackedCharts = {
- cpu: new wok.widget.LineChart({
- id: 'chart-cpu',
- node: 'container-chart-cpu',
- type: 'percent'
- }),
- memory: new wok.widget.LineChart({
- id: 'chart-memory',
- node: 'container-chart-memory',
- type: 'value'
- }),
- diskIO: new wok.widget.LineChart({
- id: 'chart-disk-io',
- node: 'container-chart-disk-io',
- type: 'value'
- }),
- networkIO: new wok.widget.LineChart({
- id: 'chart-network-io',
- node: 'container-chart-network-io',
- type: 'value'
- })
- };
-
- if(kimchi.hostTimer) {
- kimchi.hostTimer.setCharts(trackedCharts);
- }
- else {
- kimchi.hostTimer = new Tracker(trackedCharts);
- kimchi.hostTimer.start();
- }
- };
-
- $('#host-root-container').on('remove', function() {
- if(kimchi.hostTimer) {
- kimchi.hostTimer.stop();
- delete kimchi.hostTimer;
- }
-
- repositoriesGrid && repositoriesGrid.destroy();
- wok.topic('kimchi/repositoryAdded')
- .unsubscribe(listRepositories);
- wok.topic('kimchi/repositoryUpdated')
- .unsubscribe(listRepositories);
- wok.topic('kimchi/repositoryDeleted')
- .unsubscribe(listRepositories);
-
- softwareUpdatesGrid && softwareUpdatesGrid.destroy();
- wok.topic('kimchi/softwareUpdated').unsubscribe(listSoftwareUpdates);
-
- reportGrid && reportGrid.destroy();
- wok.topic('kimchi/debugReportAdded').unsubscribe(listDebugReports);
- wok.topic('kimchi/debugReportRenamed').unsubscribe(listDebugReports);
- });
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.report_add_main.js b/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
deleted file mode 100644
index 5f098d3..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.report_add_main = function() {
- var reportGridID = 'available-reports-grid';
- var addReportForm = $('#form-report-add');
- var submitButton = $('#button-report-add');
- var nameTextbox = $('input[name="name"]', addReportForm);
- nameTextbox.select();
-
- var submitForm = function(event) {
- if(submitButton.prop('disabled')) {
- return false;
- }
- var reportName = nameTextbox.val();
- var validator = RegExp("^[_A-Za-z0-9-]*$");
- if (!validator.test(reportName)) {
- wok.message.error.code('KCHDR6011M');
- return false;
- }
- var formData = addReportForm.serializeObject();
- var taskAccepted = false;
- var onTaskAccepted = function() {
- if(taskAccepted) {
- return;
- }
- taskAccepted = true;
- wok.window.close();
- wok.topic('kimchi/debugReportAdded').publish();
- };
-
- kimchi.createReport(formData, function(result) {
- onTaskAccepted();
- wok.topic('kimchi/debugReportAdded').publish();
- }, function(result) {
- // Error message from Async Task status
- if (result['message']) {
- var errText = result['message'];
- }
- // Error message from standard kimchi exception
- else {
- var errText = result['responseJSON']['reason'];
- }
- result && wok.message.error(errText);
-
- taskAccepted &&
- $('.grid-body-view table tr:first-child',
- '#' + reportGridID).remove();
- submitButton.prop('disabled', false);
- nameTextbox.select();
- }, onTaskAccepted);
-
- event.preventDefault();
- };
-
- addReportForm.on('submit', submitForm);
- submitButton.on('click', submitForm);
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js b/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
deleted file mode 100644
index 1bdb8d9..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.report_rename_main = function() {
- var renameReportForm = $('#form-report-rename');
- var submitButton = $('#button-report-rename');
- var nameTextbox = $('input[name="name"]', renameReportForm);
- var submitForm = function(event) {
- if(submitButton.prop('disabled')) {
- return false;
- }
- var reportName = nameTextbox.val();
-
- // if the user hasn't changed the report's name,
- // nothing should be done.
- if (reportName == kimchi.selectedReport) {
- wok.message.error.code('KCHDR6013M');
- return false;
- }
-
- var validator = RegExp("^[A-Za-z0-9-]*$");
- if (!validator.test(reportName)) {
- wok.message.error.code('KCHDR6011M');
- return false;
- }
- var formData = renameReportForm.serializeObject();
- submitButton.prop('disabled', true);
- nameTextbox.prop('disabled', true);
- kimchi.renameReport(kimchi.selectedReport, formData, function(result) {
- submitButton.prop('disabled', false);
- nameTextbox.prop('disabled', false);
- wok.window.close();
- wok.topic('kimchi/debugReportRenamed').publish({
- result: result
- });
- }, function(result) {
- var errText = result &&
- result['responseJSON'] &&
- result['responseJSON']['reason'];
- wok.message.error(errText);
- submitButton.prop('disabled', false);
- nameTextbox.prop('disabled', false).focus();
- });
-
- event.preventDefault();
- };
-
- renameReportForm.on('submit', submitForm);
- submitButton.on('click', submitForm);
-
- nameTextbox.val(kimchi.selectedReport).select();
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js b/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
deleted file mode 100644
index 656306b..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.repository_add_main = function() {
-
- var addForm = $('#form-repository-add');
- var addButton = $('#button-repository-add');
-
- var validateField = function(event) {
- var valid=($(this).val()!=='');
- $(addButton).prop('disabled', !valid);
- return(valid);
- };
-
- var validateForm = function(event) {
- var valid=false;
- addForm.find('input.required').each( function() {
- valid=($(this).val()!=='');
- return(!valid);
- });
- return(valid);
- }
-
- addForm.find('input.required').on('input propertychange', validateField);
-
- var weedObject = function(obj) {
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- if((typeof(obj[key])==="object") && !Array.isArray(obj[key])) {
- weedObject(obj[key]);
- }
- else if(obj[key] == '') {
- delete obj[key];
- }
- }
- }
- }
-
- var addRepository = function(event) {
- var valid = validateForm();
- if(!valid) {
- return false;
- }
-
- var formData = $(addForm).serializeObject();
-
- if (formData && formData.isMirror!=undefined) {
- formData.isMirror=(String(formData.isMirror).toLowerCase() === 'true');
- }
- if(formData.isMirror) {
- if(formData.config==undefined) {
- formData.config=new Object();
- }
- formData.config.mirrorlist=formData.baseurl;
- delete formData.baseurl;
- delete formData.isMirror;
- }
- weedObject(formData);
- if(formData.config && formData.config.comps) {
- formData.config.comps=formData.config.comps.split(/[,\s]/);
- for(var i=0; i>formData.config.comps.length; i++) {
- formData.config.comps[i]=formData.config.comps[i].trim();
- }
- for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
- formData.config.comps.splice(j, 1);
- }
- }
-
- kimchi.createRepository(formData, function() {
- wok.topic('kimchi/repositoryAdded').publish();
- wok.window.close();
- }, function(jqXHR, textStatus, errorThrown) {
- var reason = jqXHR &&
- jqXHR['responseJSON'] &&
- jqXHR['responseJSON']['reason'];
- wok.message.error(reason);
- });
- return false;
- };
-
- $(addForm).on('submit', addRepository);
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js b/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
deleted file mode 100644
index 5bfc51e..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.repository_edit_main = function() {
-
- var editForm = $('#form-repository-edit');
-
- var saveButton = $('#repository-edit-button-save');
-
- if(kimchi.capabilities['repo_mngt_tool']=="yum") {
- editForm.find('input.deb').prop('disabled', true);
- }
- else if(kimchi.capabilities['repo_mngt_tool']=="deb") {
- editForm.find('input.yum').prop('disabled', true);
- }
-
- kimchi.retrieveRepository(kimchi.selectedRepository, function(repository) {
- editForm.fillWithObject(repository);
-
- $('input', editForm).on('input propertychange', function(event) {
- if($(this).val() !== '') {
- $(saveButton).prop('disabled', false);
- }
- });
- });
-
-
- var editRepository = function(event) {
- var formData = $(editForm).serializeObject();
-
- if (formData && formData.config) {
- formData.config.gpgcheck=(String(formData.config.gpgcheck).toLowerCase() === 'true');
- }
-
- if(formData.config && formData.config.comps) {
- formData.config.comps=formData.config.comps.split(/[,\s]/);
- for(var i=0; i>formData.config.comps.length; i++) {
- formData.config.comps[i]=formData.config.comps[i].trim();
- }
- for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
- formData.config.comps.splice(j, 1);
- }
- }
-
- kimchi.updateRepository(kimchi.selectedRepository, formData, function() {
- wok.topic('kimchi/repositoryUpdated').publish();
- wok.window.close();
- }, function(jqXHR, textStatus, errorThrown) {
- var reason = jqXHR &&
- jqXHR['responseJSON'] &&
- jqXHR['responseJSON']['reason'];
- wok.message.error(reason);
- });
-
- return false;
- };
-
- $(editForm).on('submit', editRepository);
- $(saveButton).on('click', editRepository);
-};
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/pages/Makefile.am | 22 +++
plugins/gingerbase/ui/pages/host.html.tmpl | 177 +++++++++++++++++++++
plugins/gingerbase/ui/pages/i18n.json.tmpl | 148 +++++++++++++++++
plugins/gingerbase/ui/pages/report-add.html.tmpl | 56 +++++++
.../gingerbase/ui/pages/report-rename.html.tmpl | 56 +++++++
.../gingerbase/ui/pages/repository-add.html.tmpl | 113 +++++++++++++
.../gingerbase/ui/pages/repository-edit.html.tmpl | 117 ++++++++++++++
plugins/kimchi/ui/pages/host.html.tmpl | 177 ---------------------
plugins/kimchi/ui/pages/report-add.html.tmpl | 56 -------
plugins/kimchi/ui/pages/report-rename.html.tmpl | 56 -------
plugins/kimchi/ui/pages/repository-add.html.tmpl | 113 -------------
plugins/kimchi/ui/pages/repository-edit.html.tmpl | 117 --------------
12 files changed, 689 insertions(+), 519 deletions(-)
create mode 100644 plugins/gingerbase/ui/pages/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/host.html.tmpl
create mode 100644 plugins/gingerbase/ui/pages/i18n.json.tmpl
create mode 100644 plugins/gingerbase/ui/pages/report-add.html.tmpl
create mode 100644 plugins/gingerbase/ui/pages/report-rename.html.tmpl
create mode 100644 plugins/gingerbase/ui/pages/repository-add.html.tmpl
create mode 100644 plugins/gingerbase/ui/pages/repository-edit.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/host.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/report-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/report-rename.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/repository-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/repository-edit.html.tmpl
diff --git a/plugins/gingerbase/ui/pages/Makefile.am b/plugins/gingerbase/ui/pages/Makefile.am
new file mode 100644
index 0000000..d8c729f
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = help
+
+htmldir = $(datadir)/wok/plugins/gingerbase/ui/pages
+
+dist_html_DATA = $(wildcard *.tmpl) $(NULL)
diff --git a/plugins/gingerbase/ui/pages/host.html.tmpl b/plugins/gingerbase/ui/pages/host.html.tmpl
new file mode 100644
index 0000000..2c55614
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/host.html.tmpl
@@ -0,0 +1,177 @@
+#*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="stylesheet" href="plugins/gingerbase/css/theme-default.min.css">
+<script src="plugins/gingerbase/js/gingerbase.min.js"></script>
+</head>
+<body>
+<div id="host-root-container">
+ <div class="toolbar">
+ <div class="tools">
+ </div>
+ </div>
+ <div id="host-content-container" class="empty-when-logged-off"></div>
+</div>
+
+<script id="host-tmpl" type="gingerbase/template">
+ <div class="host-panel">
+ <div class="logo-container">
+ <div class="logo" style="background-image: url({logo});"></div>
+ </div>
+ <div id="host-info-container" class="info-container">
+ <h2 class="hostname">{hostname}</h2>
+ <div class="action-panel">
+ <button id="host-button-shutdown" class="btn-normal-1 stop">
+ <div class="button-icon action-icon-stop"></div>
+ $_("Shut down")
+ </button>
+ <button id="host-button-restart" class="btn-normal-1 restart">
+ <div class="button-icon action-icon-restart"></div>
+ $_("Restart")
+ </button>
+ <button class="btn-normal-1 connect" disabled="disabled">
+ <div class="button-icon action-icon-connect"></div>
+ $_("Connect")
+ </button>
+ </div>
+ <div class="host-section">
+ <h3 class="section-header"
+ aria-expanded="false"
+ aria-controls="content-sys-info">
+ $_("Basic Information")
+ </h3>
+ <div id="content-sys-info" class="section-content">
+ <div class="section-row">
+ <div class="section-label">$_("OS Distro")</div>
+ <div class="section-value">{os_distro}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("OS Version")</div>
+ <div class="section-value">{os_version}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("OS Code Name")</div>
+ <div class="section-value">{os_codename}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Processor")</div>
+ <div class="section-value">{cpu_model}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("CPU(s)")</div>
+ <div class="section-value">{cpus}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Memory")</div>
+ <div class="section-value">{memory}</div>
+ </div>
+ </div>
+ </div>
+ <div class="host-section">
+ <h3 class="section-header"
+ aria-controls="content-sys-statistics">
+ $_("System Statistics")
+ </h3>
+ <div id="content-sys-statistics" class="section-content">
+ <div class="section-row">
+ <div class="section-label">$_("CPU")</div>
+ <div class="section-value">
+ <div id="container-chart-cpu" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Memory")</div>
+ <div class="section-value">
+ <div id="container-chart-memory" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Disk I/O")</div>
+ <div class="section-value">
+ <div id="container-chart-disk-io" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Network I/O")</div>
+ <div class="section-value">
+ <div id="container-chart-network-io" class="inline-block"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="software-update-section" class="host-section hidden">
+ <h3 class="section-header"
+ aria-controls="content-software-update">
+ $_("Software Updates")
+ </h3>
+ <div id="content-software-update" class="section-content">
+ <div class="section-row">
+ <div class="section-value">
+ <div id="software-updates-grid-container"></div>
+ <div id="software-updates-progress-container" class="hidden">
+ <label for="software-updates-progress-textarea">$_("Update Progress")</label>
+ <textarea id="software-updates-progress-textarea" readonly></textarea>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="repositories-section" class="host-section hidden">
+ <h3 class="section-header"
+ aria-controls="content-repositories">
+ $_("Repositories")
+ </h3>
+ <div id="content-repositories" class="section-content">
+ <div class="section-row">
+ <div class="section-value">
+ <div id="repositories-grid-container"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="debug-report-section" class="host-section hidden">
+ <h3 class="section-header"
+ aria-controls="content-sys-reports">
+ $_("Debug Reports")
+ </h3>
+ <div id="content-sys-reports" class="section-content">
+ <div class="section-row">
+ <div class="section-value">
+ <div id="available-reports-grid-container"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</script>
+
+<script type="text/javascript">
+ kimchi.host_main();
+</script>
+</body>
+</html>
diff --git a/plugins/gingerbase/ui/pages/i18n.json.tmpl b/plugins/gingerbase/ui/pages/i18n.json.tmpl
new file mode 100644
index 0000000..b6091ca
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/i18n.json.tmpl
@@ -0,0 +1,148 @@
+#*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+{
+ "GGBAUTH6001E": "$_("The username or password you entered is incorrect. Please try again.")",
+ "GGBAUTH6002E": "$_("This field is required.")",
+
+ "GGBAUTH6001M": "$_("Log in")",
+ "GGBAUTH6002M": "$_("Logging in...")",
+
+ "Host": "$_("Host")",
+ "Guests": "$_("Guests")",
+ "Templates": "$_("Templates")",
+ "Storage": "$_("Storage")",
+ "Network": "$_("Network")",
+
+ "GGBAPI6002E": "$_("Failed to get application configuration")",
+ "GGBAPI6003E": "$_("This is not a valid Linux path")",
+ "GGBAPI6004E": "$_("This is not a valid URL.")",
+ "GGBAPI6005E": "$_("No such data available.")",
+ "GGBAPI6007E": "$_("Can not contact the host system. Verify the host system is up and that you have network connectivity to it. HTTP request response %1. ")",
+ "GGBAPI6008E": "$_("Unable to read file.")",
+ "GGBAPI6009E": "$_("Error while uploading file.")",
+
+ "GGBAPI6001M": "$_("Delete Confirmation")",
+ "GGBAPI6002M": "$_("OK")",
+ "GGBAPI6003M": "$_("Cancel")",
+ "GGBAPI6004M": "$_("Confirm")",
+ "GGBAPI6005M": "$_("Create")",
+ "GGBAPI6006M": "$_("Warning")",
+ "GGBAPI6007M": "$_("Save")",
+ "GGBAPI6008M": "$_("Creating...")",
+ "GGBAPI6009M": "$_("Cloning...")",
+
+ "GGBGRD6001M": "$_("Loading...")",
+ "GGBGRD6002M": "$_("An error occurred while retrieving system information.")",
+ "GGBGRD6003M": "$_("Retry")",
+ "GGBGRD6004M": "$_("Detailed message:")",
+
+ "GGBHOST6001E": "$_("Unable to shut down system as there are some virtual machines running!")",
+
+ "GGBHOST6001M": "$_("Max:")",
+ "GGBHOST6002M": "$_("Utilization")",
+ "GGBHOST6003M": "$_("Available")",
+ "GGBHOST6004M": "$_("Read Rate")",
+ "GGBHOST6005M": "$_("Write Rate")",
+ "GGBHOST6006M": "$_("Received")",
+ "GGBHOST6007M": "$_("Sent")",
+ "GGBHOST6008M": "$_("Shutting down or restarting host will cause unsaved work lost. Continue to shut down/restarting?")",
+
+
+ "GGBREPO6001M": "$_("Confirm")",
+ "GGBREPO6002M": "$_("Repository will be removed permanently and can't be recovered. Do you want to continue?")",
+ "GGBREPO6003M": "$_("Repositories")",
+ "GGBREPO6004M": "$_("ID")",
+ "GGBREPO6005M": "$_("Name")",
+ "GGBREPO6006M": "$_("Base URL")",
+ "GGBREPO6007M": "$_("Is Mirror")",
+ "GGBREPO6008M": "$_("URL Args")",
+ "GGBREPO6009M": "$_("Enabled")",
+ "GGBREPO6010M": "$_("GPG Check")",
+ "GGBREPO6011M": "$_("GPG Key")",
+ "GGBREPO6012M": "$_("Add")",
+ "GGBREPO6013M": "$_("Edit")",
+ "GGBREPO6014M": "$_("Remove")",
+ "GGBREPO6016M": "$_("Enable")",
+ "GGBREPO6017M": "$_("Disable")",
+
+
+ "GGBUPD6001M": "$_("Software Updates")",
+ "GGBUPD6002M": "$_("Package Name")",
+ "GGBUPD6003M": "$_("Version")",
+ "GGBUPD6004M": "$_("Architecture")",
+ "GGBUPD6005M": "$_("Repository")",
+ "GGBUPD6006M": "$_("Update All")",
+ "GGBUPD6007M": "$_("Updating...")",
+ "GGBUPD6008M": "$_("Failed to retrieve packages update information.")",
+ "GGBUPD6009M": "$_("Failed to update package(s).")",
+
+
+ "GGBDR6001M": "$_("Debug report will be removed permanently and can't be recovered. Do you want to continue?")",
+ "GGBDR6002M": "$_("Debug Reports")",
+ "GGBDR6003M": "$_("Name")",
+ "GGBDR6005M": "$_("Generated Time")",
+ "GGBDR6006M": "$_("Generate")",
+ "GGBDR6007M": "$_("Generating...")",
+ "GGBDR6008M": "$_("Rename")",
+ "GGBDR6009M": "$_("Remove")",
+ "GGBDR6010M": "$_("Download")",
+ "GGBDR6011M": "$_("Report name should contain only letters, digits, underscore ('_') and/or hyphen ('-').")",
+ "GGBDR6012M": "$_("Pending...")",
+ "GGBDR6013M": "$_("Report name is the same as the original one.")",
+
+ "GGBVM6001M": "$_("This will delete the virtual machine and its virtual disks. This operation cannot be undone. Would you like to continue?")",
+ "GGBVM6002M": "$_("Power off Confirmation")",
+ "GGBVM6003M": "$_("This action may produce undesirable results, "
+ "for example unflushed disk cache in the guest. "
+ "Would you like to continue?")",
+ "GGBVM6004M": "$_("Reset Confirmation")",
+ "GGBVM6005M": "$_("There is a risk of data loss caused by reset without"
+ " the guest OS shutdown. Would you like to continue?")",
+ "GGBVM6006M": "$_("Shut Down Confirmation")",
+ "GGBVM6007M": "$_("Note the guest OS may ignore this request. Would you like to continue?")",
+ "GGBVM6008M": "$_("Virtual Machine delete Confirmation")",
+ "GGBVM6009M": "$_("This virtual machine is not persistent. Power Off will delete it. Continue?")",
+ "GGBVM6010M": "$_("When the target guest has SCSI or iSCSI volumes, they will be cloned on default storage pool. The same will happen when the target pool does not have enough space to clone the volumes. Do you want to continue?")",
+
+ "GGBVMCD6001M": "$_("This CDROM will be detached permanently and you can re-attach it. Continue to detach it?")",
+ "GGBVMCD6002M": "$_("Attach")",
+ "GGBVMCD6003M": "$_("Attaching...")",
+ "GGBVMCD6004M": "$_("Replace")",
+ "GGBVMCD6005M": "$_("Replacing...")",
+ "GGBVMCD6006M": "$_("Successfully attached!")",
+ "GGBVMCD6007M": "$_("Successfully replaced!")",
+ "GGBVMCD6008M": "$_("Successfully detached!")",
+ "GGBVMCD6009M": "$_("This disk will be detached permanently and you can re-attach it. Continue to detach it?")",
+
+ "GGBVMED6001M": "$_("interface:")",
+ "GGBVMED6002M": "$_("address:")",
+ "GGBVMED6003M": "$_("link_type:")",
+ "GGBVMED6004M": "$_("block:")",
+ "GGBVMED6005M": "$_("drive_type:")",
+ "GGBVMED6006M": "$_("model:")",
+ "GGBVMED6007M": "$_("Affected devices:")",
+
+ "GGBVMSTOR0001E": "$_("CDROM path needs to be a valid local/remote path and cannot be blank.")",
+ "GGBVMSTOR0002E": "$_("Disk pool or volume cannot be blank.")"
+}
diff --git a/plugins/gingerbase/ui/pages/report-add.html.tmpl b/plugins/gingerbase/ui/pages/report-add.html.tmpl
new file mode 100644
index 0000000..4983ff0
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/report-add.html.tmpl
@@ -0,0 +1,56 @@
+#*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+<!DOCTYPE html>
+<div id="report-add-window" class="window">
+ <header>
+ <h1 class="title h1 grey">$_("Generate a New Debug Report")</h1>
+ </header>
+ <div class="content">
+ <form id="form-report-add">
+ <section class="form-section">
+ <h2>
+ <label for="report-name-textbox">$_("Report Name")</label>
+ </h2>
+ <div class="field">
+ <input type="text" class="text" id="report-name-textbox" name="name" />
+ <span class="icon-info-circled light-grey c1"></span>
+ <span class="info-add-debug-report">
+ $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").")
+ </span>
+ </div>
+ </section>
+ </form>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button>
+ <button id="button-report-cancel" class="btn-normal close" type="button">
+ <span calss="text">$_("Cancel")</span>
+ </button>
+ </div>
+ </footer>
+</div>
+<script>
+ kimchi.report_add_main();
+</script>
diff --git a/plugins/gingerbase/ui/pages/report-rename.html.tmpl b/plugins/gingerbase/ui/pages/report-rename.html.tmpl
new file mode 100644
index 0000000..900dae8
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/report-rename.html.tmpl
@@ -0,0 +1,56 @@
+#*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+<!DOCTYPE html>
+<div id="report-rename-window" class="window">
+ <header>
+ <h1 class="title h1 grey">$_("Rename a Debug Report")</h1>
+ </header>
+ <div class="content">
+ <form id="form-report-rename">
+ <section class="form-section">
+ <h2>
+ <label for="report-name-textbox">$_("Report Name")</label>
+ </h2>
+ <div class="field">
+ <input type="text" class="text" id="report-name-textbox" name="name" />
+ <span class="icon-info-circled light-grey c1"></span>
+ <span class="info-debug-report-rename">
+ $_("The name used to identify the report. Name can contain: letters, digits and hyphen (\"-\").")
+ </span>
+ </div>
+ </section>
+ </form>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button id="button-report-rename" class="btn-normal"><span class="text">$_("Submit")</span></button>
+ <button id-"button-report-rename-cancel" class="btn-normal close" type="button">
+ <span class="text">$_("Cancel")</span>
+ </button>
+ </div>
+ </footer>
+</div>
+<script>
+ kimchi.report_rename_main();
+</script>
diff --git a/plugins/gingerbase/ui/pages/repository-add.html.tmpl b/plugins/gingerbase/ui/pages/repository-add.html.tmpl
new file mode 100644
index 0000000..a5b4001
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/repository-add.html.tmpl
@@ -0,0 +1,113 @@
+#*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+<div id="repository-add-window" class="window">
+ <form id="form-repository-add">
+ <header class="window-header">
+ <h1 class="title h1 grey">$_("Add a Repository")</h1>
+ </header>
+ <section>
+ <div class="content">
+ <div class="form-section yum">
+ <h2>$_("Identifier")</h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text" name="repo_id" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("Single word, unique identifier for the repository.")
+ </p>
+ </div>
+ </div>
+ <section class="form-section yum">
+ <h2>$_("Name")</h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text" name="config[repo_name]" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("Textual name for the repository.")
+ </p>
+ </div>
+ </section>
+ <section class="form-section">
+ <h2>$_("URL")<span class="required" role="presentation" title='$_("Required Field")'>*</span></h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text required" name="baseurl" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("URL to the repository. Supported protocols are http, ftp, and file.")
+ </p>
+ </div>
+ <div class="field yum">
+ <p class="yum">
+ <input type="checkbox" name="isMirror" value="true" id="isMirror" />
+ <label id="isMirrorLabel" for="isMirror">$_("Repository is a mirror")</label>
+ </p>
+ </div>
+ </section>
+ <section class="form-section repository-dist deb">
+ <h2>$_("Distribution")</h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text" name="config[dist]" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("Distribution of the DEB repository.")
+ </p>
+ </div>
+ </section>
+ <section class="form-section repository-comps deb">
+ <h2>$_("Components")</h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text" name="config[comps]" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("List of components in DEB repository.")
+ </p>
+ </div>
+ </section>
+ </div>
+ </section>
+ <footer>
+ <div class="btn-group">
+ <button type="submit" id="button-repository-add" class="btn-normal" disabled="disabled">
+ <span class="text">$_("Add")</span>
+ </button>
+ <button type="button" id="button-repository-close" class="btn-normal close">
+ <span class="text">$("Cancel")</span>
+ </button>
+ </div>
+ </footer>
+ </form>
+</div>
+<script>
+ kimchi.repository_add_main();
+</script>
diff --git a/plugins/gingerbase/ui/pages/repository-edit.html.tmpl b/plugins/gingerbase/ui/pages/repository-edit.html.tmpl
new file mode 100644
index 0000000..b1a421e
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/repository-edit.html.tmpl
@@ -0,0 +1,117 @@
+#*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+
+<div id="repository-edit-window" class="window">
+ <form id="form-repository-edit">
+ <header>
+ <h1 class="title h1 grey">$_("Edit Repository")</h1>
+ </header>
+ <div class="content">
+ <section id="form-repository-edit">
+ <fieldset class="repository-edit-fieldset">
+ <div class="repository-id yum">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-id-textbox">$_("ID")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-id-textbox" name="repo_id" type="text" disabled="disabled" readonly="readonly"/>
+ </div>
+ </div>
+ <div class="repository-name yum">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-name-textbox">$_("Name")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-name-textbox" class="yum" name="config[repo_name]" type="text" />
+ </div>
+ </div>
+ <div class="repository-url">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-baseurl-textbox">$_("URL")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-baseurl-textbox" name="baseurl" type="text" />
+ </div>
+ </div>
+ <div class="repository-dist deb">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-urlargs-textbox">$_("Distribution")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-urlargs-textbox" class="deb" name="config[dist]" type="text" />
+ </div>
+ </div>
+ <div class="repository-mirrorlist yum">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-urlargs-textbox">$_("Mirror List URL")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-urlargs-textbox" class="yum" name="config[mirrorlist]" type="text" />
+ </div>
+ </div>
+ <div class="repository-comps deb">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-urlargs-textbox">$_("Components")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-urlargs-textbox" class="deb" name="config[comps]" type="text" />
+ </div>
+ </div>
+ <div class="repository-gpgkey yum">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-gpgkey-textbox">$_("GPG Key")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-gpgkey-textbox" class="yum" name="config[gpgkey]" type="text" />
+ </div>
+ </div>
+ <div class="repository-gpgcheck yum">
+ <div class="repository-edit-wrapper-label">
+ <label>$_("GPG Check")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-gpgcheck-radio-true" class="yum" name="config[gpgcheck]" type="radio" value="true" />
+ <label for="repository-edit-gpgcheck-radio-true">$_("Yes")</label>
+ <input id="repository-edit-gpgcheck-radio-false" class="yum" name="config[gpgcheck]" type="radio" value="false" />
+ <label for="repository-edit-gpgcheck-radio-false">$_("No")</label>
+ </div>
+ </div>
+ </fieldset>
+ </section>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button type="submit" id="repository-edit-button-save" class="btn-normal">
+ <span class="text">$_("Save")</span>
+ </button>
+ <button type="button" id="repository-edit-button-cancel" class="close btn-normal">
+ <span class="text">$_("Cancel")</span>
+ </button>
+ </div>
+ </footer>
+ </form>
+</div>
+<script type="text/javascript">
+ kimchi.repository_edit_main();
+</script>
diff --git a/plugins/kimchi/ui/pages/host.html.tmpl b/plugins/kimchi/ui/pages/host.html.tmpl
deleted file mode 100644
index d87debc..0000000
--- a/plugins/kimchi/ui/pages/host.html.tmpl
+++ /dev/null
@@ -1,177 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-<!DOCTYPE html>
-<html>
-<head>
-<link rel="stylesheet" href="plugins/kimchi/css/theme-default.min.css">
-<script src="plugins/kimchi/js/kimchi.min.js"></script>
-</head>
-<body>
-<div id="host-root-container">
- <div class="toolbar">
- <div class="tools">
- </div>
- </div>
- <div id="host-content-container" class="empty-when-logged-off"></div>
-</div>
-
-<script id="host-tmpl" type="kimchi/template">
- <div class="host-panel">
- <div class="logo-container">
- <div class="logo" style="background-image: url({logo});"></div>
- </div>
- <div id="host-info-container" class="info-container">
- <h2 class="hostname">{hostname}</h2>
- <div class="action-panel">
- <button id="host-button-shutdown" class="btn-normal-1 stop">
- <div class="button-icon action-icon-stop"></div>
- $_("Shut down")
- </button>
- <button id="host-button-restart" class="btn-normal-1 restart">
- <div class="button-icon action-icon-restart"></div>
- $_("Restart")
- </button>
- <button class="btn-normal-1 connect" disabled="disabled">
- <div class="button-icon action-icon-connect"></div>
- $_("Connect")
- </button>
- </div>
- <div class="host-section">
- <h3 class="section-header"
- aria-expanded="false"
- aria-controls="content-sys-info">
- $_("Basic Information")
- </h3>
- <div id="content-sys-info" class="section-content">
- <div class="section-row">
- <div class="section-label">$_("OS Distro")</div>
- <div class="section-value">{os_distro}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("OS Version")</div>
- <div class="section-value">{os_version}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("OS Code Name")</div>
- <div class="section-value">{os_codename}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Processor")</div>
- <div class="section-value">{cpu_model}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("CPU(s)")</div>
- <div class="section-value">{cpus}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Memory")</div>
- <div class="section-value">{memory}</div>
- </div>
- </div>
- </div>
- <div class="host-section">
- <h3 class="section-header"
- aria-controls="content-sys-statistics">
- $_("System Statistics")
- </h3>
- <div id="content-sys-statistics" class="section-content">
- <div class="section-row">
- <div class="section-label">$_("CPU")</div>
- <div class="section-value">
- <div id="container-chart-cpu" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Memory")</div>
- <div class="section-value">
- <div id="container-chart-memory" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Disk I/O")</div>
- <div class="section-value">
- <div id="container-chart-disk-io" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Network I/O")</div>
- <div class="section-value">
- <div id="container-chart-network-io" class="inline-block"></div>
- </div>
- </div>
- </div>
- </div>
- <div id="software-update-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-software-update">
- $_("Software Updates")
- </h3>
- <div id="content-software-update" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="software-updates-grid-container"></div>
- <div id="software-updates-progress-container" class="hidden">
- <label for="software-updates-progress-textarea">$_("Update Progress")</label>
- <textarea id="software-updates-progress-textarea" readonly></textarea>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div id="repositories-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-repositories">
- $_("Repositories")
- </h3>
- <div id="content-repositories" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="repositories-grid-container"></div>
- </div>
- </div>
- </div>
- </div>
- <div id="debug-report-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-sys-reports">
- $_("Debug Reports")
- </h3>
- <div id="content-sys-reports" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="available-reports-grid-container"></div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-</script>
-
-<script type="text/javascript">
- kimchi.host_main();
-</script>
-</body>
-</html>
diff --git a/plugins/kimchi/ui/pages/report-add.html.tmpl b/plugins/kimchi/ui/pages/report-add.html.tmpl
deleted file mode 100644
index 25bf0a9..0000000
--- a/plugins/kimchi/ui/pages/report-add.html.tmpl
+++ /dev/null
@@ -1,56 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-<!DOCTYPE html>
-<div id="report-add-window" class="window">
- <header>
- <h1 class="title h1 grey">$_("Generate a New Debug Report")</h1>
- </header>
- <div class="content">
- <form id="form-report-add">
- <section class="form-section">
- <h2>
- <label for="report-name-textbox">$_("Report Name")</label>
- </h2>
- <div class="field">
- <input type="text" class="text" id="report-name-textbox" name="name" />
- <span class="icon-info-circled light-grey c1"></span>
- <span class="info-add-debug-report">
- $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").")
- </span>
- </div>
- </section>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button>
- <button id="button-report-cancel" class="btn-normal close" type="button">
- <span calss="text">$_("Cancel")</span>
- </button>
- </div>
- </footer>
-</div>
-<script>
- kimchi.report_add_main();
-</script>
diff --git a/plugins/kimchi/ui/pages/report-rename.html.tmpl b/plugins/kimchi/ui/pages/report-rename.html.tmpl
deleted file mode 100644
index 90a0a80..0000000
--- a/plugins/kimchi/ui/pages/report-rename.html.tmpl
+++ /dev/null
@@ -1,56 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-<!DOCTYPE html>
-<div id="report-rename-window" class="window">
- <header>
- <h1 class="title h1 grey">$_("Rename a Debug Report")</h1>
- </header>
- <div class="content">
- <form id="form-report-rename">
- <section class="form-section">
- <h2>
- <label for="report-name-textbox">$_("Report Name")</label>
- </h2>
- <div class="field">
- <input type="text" class="text" id="report-name-textbox" name="name" />
- <span class="icon-info-circled light-grey c1"></span>
- <span class="info-debug-report-rename">
- $_("The name used to identify the report. Name can contain: letters, digits and hyphen (\"-\").")
- </span>
- </div>
- </section>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <button id="button-report-rename" class="btn-normal"><span class="text">$_("Submit")</span></button>
- <button id-"button-report-rename-cancel" class="btn-normal close" type="button">
- <span class="text">$_("Cancel")</span>
- </button>
- </div>
- </footer>
-</div>
-<script>
- kimchi.report_rename_main();
-</script>
diff --git a/plugins/kimchi/ui/pages/repository-add.html.tmpl b/plugins/kimchi/ui/pages/repository-add.html.tmpl
deleted file mode 100644
index 950252a..0000000
--- a/plugins/kimchi/ui/pages/repository-add.html.tmpl
+++ /dev/null
@@ -1,113 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-<div id="repository-add-window" class="window">
- <form id="form-repository-add">
- <header class="window-header">
- <h1 class="title h1 grey">$_("Add a Repository")</h1>
- </header>
- <section>
- <div class="content">
- <div class="form-section yum">
- <h2>$_("Identifier")</h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text" name="repo_id" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("Single word, unique identifier for the repository.")
- </p>
- </div>
- </div>
- <section class="form-section yum">
- <h2>$_("Name")</h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text" name="config[repo_name]" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("Textual name for the repository.")
- </p>
- </div>
- </section>
- <section class="form-section">
- <h2>$_("URL")<span class="required" role="presentation" title='$_("Required Field")'>*</span></h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text required" name="baseurl" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("URL to the repository. Supported protocols are http, ftp, and file.")
- </p>
- </div>
- <div class="field yum">
- <p class="yum">
- <input type="checkbox" name="isMirror" value="true" id="isMirror" />
- <label id="isMirrorLabel" for="isMirror">$_("Repository is a mirror")</label>
- </p>
- </div>
- </section>
- <section class="form-section repository-dist deb">
- <h2>$_("Distribution")</h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text" name="config[dist]" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("Distribution of the DEB repository.")
- </p>
- </div>
- </section>
- <section class="form-section repository-comps deb">
- <h2>$_("Components")</h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text" name="config[comps]" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("List of components in DEB repository.")
- </p>
- </div>
- </section>
- </div>
- </section>
- <footer>
- <div class="btn-group">
- <button type="submit" id="button-repository-add" class="btn-normal" disabled="disabled">
- <span class="text">$_("Add")</span>
- </button>
- <button type="button" id="button-repository-close" class="btn-normal close">
- <span class="text">$("Cancel")</span>
- </button>
- </div>
- </footer>
- </form>
-</div>
-<script>
- kimchi.repository_add_main();
-</script>
diff --git a/plugins/kimchi/ui/pages/repository-edit.html.tmpl b/plugins/kimchi/ui/pages/repository-edit.html.tmpl
deleted file mode 100644
index e5a3cfb..0000000
--- a/plugins/kimchi/ui/pages/repository-edit.html.tmpl
+++ /dev/null
@@ -1,117 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-
-<div id="repository-edit-window" class="window">
- <form id="form-repository-edit">
- <header>
- <h1 class="title h1 grey">$_("Edit Repository")</h1>
- </header>
- <div class="content">
- <section id="form-repository-edit">
- <fieldset class="repository-edit-fieldset">
- <div class="repository-id yum">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-id-textbox">$_("ID")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-id-textbox" name="repo_id" type="text" disabled="disabled" readonly="readonly"/>
- </div>
- </div>
- <div class="repository-name yum">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-name-textbox">$_("Name")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-name-textbox" class="yum" name="config[repo_name]" type="text" />
- </div>
- </div>
- <div class="repository-url">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-baseurl-textbox">$_("URL")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-baseurl-textbox" name="baseurl" type="text" />
- </div>
- </div>
- <div class="repository-dist deb">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-urlargs-textbox">$_("Distribution")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-urlargs-textbox" class="deb" name="config[dist]" type="text" />
- </div>
- </div>
- <div class="repository-mirrorlist yum">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-urlargs-textbox">$_("Mirror List URL")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-urlargs-textbox" class="yum" name="config[mirrorlist]" type="text" />
- </div>
- </div>
- <div class="repository-comps deb">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-urlargs-textbox">$_("Components")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-urlargs-textbox" class="deb" name="config[comps]" type="text" />
- </div>
- </div>
- <div class="repository-gpgkey yum">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-gpgkey-textbox">$_("GPG Key")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-gpgkey-textbox" class="yum" name="config[gpgkey]" type="text" />
- </div>
- </div>
- <div class="repository-gpgcheck yum">
- <div class="repository-edit-wrapper-label">
- <label>$_("GPG Check")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-gpgcheck-radio-true" class="yum" name="config[gpgcheck]" type="radio" value="true" />
- <label for="repository-edit-gpgcheck-radio-true">$_("Yes")</label>
- <input id="repository-edit-gpgcheck-radio-false" class="yum" name="config[gpgcheck]" type="radio" value="false" />
- <label for="repository-edit-gpgcheck-radio-false">$_("No")</label>
- </div>
- </div>
- </fieldset>
- </section>
- </div>
- <footer>
- <div class="btn-group">
- <button type="submit" id="repository-edit-button-save" class="btn-normal">
- <span class="text">$_("Save")</span>
- </button>
- <button type="button" id="repository-edit-button-cancel" class="close btn-normal">
- <span class="text">$_("Cancel")</span>
- </button>
- </div>
- </footer>
- </form>
-</div>
-<script type="text/javascript">
- kimchi.repository_edit_main();
-</script>
--
2.1.0
1
0
[PATCH 09/15] V2 Ginger Base : base plugin ui/pages/help files
by chandra@linux.vnet.ibm.com 27 Sep '15
by chandra@linux.vnet.ibm.com 27 Sep '15
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/pages/help/Makefile.am | 37 ++++
plugins/gingerbase/ui/pages/help/de_DE/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/de_DE/host.dita | 49 +++++
plugins/gingerbase/ui/pages/help/dita-help.xsl | 26 +++
plugins/gingerbase/ui/pages/help/en_US/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/en_US/host.dita | 70 +++++++
plugins/gingerbase/ui/pages/help/es_ES/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/es_ES/host.dita | 49 +++++
plugins/gingerbase/ui/pages/help/fr_FR/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/fr_FR/host.dita | 68 +++++++
plugins/gingerbase/ui/pages/help/gingerbase.css | 208 +++++++++++++++++++++
plugins/gingerbase/ui/pages/help/it_IT/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/it_IT/host.dita | 51 +++++
plugins/gingerbase/ui/pages/help/ja_JP/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/ja_JP/host.dita | 70 +++++++
plugins/gingerbase/ui/pages/help/ko_KR/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/ko_KR/host.dita | 47 +++++
plugins/gingerbase/ui/pages/help/pt_BR/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/pt_BR/host.dita | 74 ++++++++
plugins/gingerbase/ui/pages/help/ru_RU/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/ru_RU/host.dita | 48 +++++
plugins/gingerbase/ui/pages/help/zh_CN/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/zh_CN/host.dita | 45 +++++
plugins/gingerbase/ui/pages/help/zh_TW/Makefile.am | 26 +++
plugins/gingerbase/ui/pages/help/zh_TW/host.dita | 50 +++++
plugins/kimchi/ui/pages/help/de_DE/host.dita | 49 -----
plugins/kimchi/ui/pages/help/en_US/host.dita | 70 -------
plugins/kimchi/ui/pages/help/es_ES/host.dita | 49 -----
plugins/kimchi/ui/pages/help/fr_FR/host.dita | 68 -------
plugins/kimchi/ui/pages/help/it_IT/host.dita | 51 -----
plugins/kimchi/ui/pages/help/ja_JP/host.dita | 70 -------
plugins/kimchi/ui/pages/help/ko_KR/host.dita | 47 -----
plugins/kimchi/ui/pages/help/pt_BR/host.dita | 74 --------
plugins/kimchi/ui/pages/help/ru_RU/host.dita | 48 -----
plugins/kimchi/ui/pages/help/zh_CN/host.dita | 45 -----
plugins/kimchi/ui/pages/help/zh_TW/host.dita | 50 -----
36 files changed, 1178 insertions(+), 621 deletions(-)
create mode 100644 plugins/gingerbase/ui/pages/help/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/de_DE/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/de_DE/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/dita-help.xsl
create mode 100644 plugins/gingerbase/ui/pages/help/en_US/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/en_US/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/es_ES/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/es_ES/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/fr_FR/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/fr_FR/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/gingerbase.css
create mode 100644 plugins/gingerbase/ui/pages/help/it_IT/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/it_IT/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/ja_JP/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/ja_JP/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/ko_KR/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/ko_KR/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/pt_BR/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/pt_BR/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/ru_RU/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/ru_RU/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/zh_CN/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/zh_CN/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/zh_TW/Makefile.am
create mode 100644 plugins/gingerbase/ui/pages/help/zh_TW/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/host.dita
diff --git a/plugins/gingerbase/ui/pages/help/Makefile.am b/plugins/gingerbase/ui/pages/help/Makefile.am
new file mode 100644
index 0000000..2c61ea4
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/Makefile.am
@@ -0,0 +1,37 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SUBDIRS = zh_CN it_IT en_US zh_TW pt_BR ja_JP ru_RU ko_KR fr_FR de_DE es_ES
+
+DITA_HTML_FILES = $(patsubst %.dita,%.html,$(wildcard */*.dita))
+HTML_FILES = $(if $(DITA_HTML_FILES), $(DITA_HTML_FILES), $(wildcard */*.html))
+DITA_XSL_FILE = dita-help.xsl
+
+EXTRA_DIST = $(DITA_XSL_FILE)
+
+helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help
+
+dist_help_DATA = gingerbase.css
+
+all: $(HTML_FILES) $(wildcard */*.dita)
+
+%.html: %.dita $(DITA_XSL_FILE)
+ xsltproc -o $@ $(DITA_XSL_FILE) $<
+
+CLEANFILES = $(HTML_FILES)
diff --git a/plugins/gingerbase/ui/pages/help/de_DE/Makefile.am b/plugins/gingerbase/ui/pages/help/de_DE/Makefile.am
new file mode 100644
index 0000000..dc393e4
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/de_DE/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+de_DE_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/de_DE
+
+dist_de_DE_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/de_DE/host.dita b/plugins/gingerbase/ui/pages/help/de_DE/host.dita
new file mode 100644
index 0000000..33a40e3
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/de_DE/host.dita
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="de-de">
+<title>Host</title>
+<shortdesc>Die Seite <wintitle>Host</wintitle> zeigt Informationen zum Hostsystem an und erm��glicht Ihnen, den Host herunterzufahren, erneut zu starten und eine Verbindung zu ihm herzustellen.</shortdesc>
+<csbody>
+<p>Sie k��nnen die folgenden Aktionen am Host durchf��hren:<ul>
+<li>W��hlen Sie <uicontrol>Herunterfahren</uicontrol> aus, um das Hostsystem herunterzufahren.</li>
+<li>W��hlen Sie <uicontrol>Erneut starten</uicontrol> aus, um das Hostsystem erneut zu starten.</li>
+<li>W��hlen Sie <uicontrol>Verbinden</uicontrol> aus, um eine VNC-Verbindung zum Hostsystem herzustellen, wenn noch keine Verbindung besteht.</li>
+</ul></p>
+<p>Klicken Sie auf die folgenden Abschnitte, um Informationen zum Host anzuzeigen:<dl>
+<dlentry>
+<dt>Basisinformationen</dt>
+<dd>Dieser Abschnitt zeigt die Verteilung, die Version und den Codenamen des Hostbetriebssystems sowie den Prozessortyp und die Speicherkapazit��t in GB an.</dd>
+</dlentry><dlentry>
+<dt>Systemstatistik</dt>
+<dd>Dieser Abschnitt zeigt mithilfe von Grafiken Statistiken f��r CPU, Speicher, Platten-E/A und Netz-E/A f��r den Host an. W��hlen Sie <uicontrol>Daten werden nach dem Verlassen dieser Seite gesammelt</uicontrol> aus, um mit der Sammlung von Daten fortzufahren, wenn die Host-Registerkarte nicht angezeigt wird.</dd>
+</dlentry><dlentry>
+<dt>Software-Updates</dt>
+<dd>Dieser Abschnitt zeigt Informationen f��r alle Pakete an, bei denen Aktualisierungen verf��gbar sind, einschlie��lich Paketname, Version, Architektur und Repository. Sie k��nnen alle aufgelisteten Pakete aktualisieren, indem Sie <uicontrol>Alle aktualisieren</uicontrol> ausw��hlen. Sie k��nnen nicht einzelne Pakete zur Aktualisierung ausw��hlen.</dd>
+</dlentry><dlentry>
+<dt>Repositorys</dt>
+<dd>Dieser Abschnitt zeigt Repositorys an, die dem Hostsystem zugeordnet sind. Sie k��nnen Repositorys hinzuf��gen, aktivieren, bearbeiten oder entfernen. Beim Hinzuf��gen wird ein Repository dem Hostsystem zugeordnet. Das Aktivieren eines Repositorys dagegen erm��glicht dem Host den Zugriff auf das Repository. Wenn Ihr System Red Hat Enterprise
+Linux oder Fedora ist, k��nnen Sie <filepath>yum</filepath>-Repositorys hinzuf��gen.
+Wenn Ihr System Ubuntu oder Debian ist, f��gen Sie <filepath>deb</filepath>-Repositorys hinzu.<p>Wenn Sie mit yum-Repositorys arbeiten, k��nnen Sie eine GPG-Pr��fung hinzuf��gen, um sicherzustellen, dass ein Paket aus diesem Repository nicht besch��digt wurde.
+W��hlen Sie ein Repository und dann <uicontrol>Bearbeiten</uicontrol> aus. W��hlen Sie <uicontrol>Ja</uicontrol> aus, um die GPG-Pr��fung zu aktivieren, und geben Sie dann ein URL zur GPG-Schl��sseldatei f��r das Repository ein.</p></dd>
+</dlentry><dlentry>
+<dt>Debugberichte</dt>
+<dd>Dieser Abschnitt zeigt Debugberichte, einschlie��lich Name und Dateipfad, an.
+Sie haben die M��glichkeit, einen neuen Bericht zu erstellen oder einen bestehenden Bericht umzubenennen, zu entfernen oder herunterzuladen.<p>Der Debugbericht wird w��hrend des Befehls <cmdname>sosreport</cmdname> generiert. Er ist verf��gbar f��r Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>-, Fedora-
+und Ubuntu-Verteilungen. Der Befehl generiert eine .tar-Datei, die Konfigurations- und Diagnoseinformationen enth��lt, wie zum Beispiel Kernelversion, geladene Module sowie System- und Servicekonfigurationdateien.
+Der Befehl f��hrt zudem externe Programme aus, um weitere Informationen zu sammeln, und speichert diese Ausgabe im resultierenden Archiv.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/dita-help.xsl b/plugins/gingerbase/ui/pages/help/dita-help.xsl
new file mode 100644
index 0000000..2e66903
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/dita-help.xsl
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:output method="xml" indent="yes" encoding="UTF-8" />
+
+ <xsl:template match="/">
+ <html>
+ <head>
+ <title><xsl:value-of select="/cshelp/title" /></title>
+ <meta charset="UTF-8" />
+ <link rel="shortcut icon" href="../../images/logo.ico" />
+ <link rel="stylesheet" type="text/css" href="../gingerbase.css" />
+ </head>
+ <body>
+ <xsl:apply-templates select="//cshelp" />
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="cshelp">
+ <h1><xsl:value-of select="title" /></h1>
+ <p class="shortdesc"><xsl:value-of select="shortdesc" /></p>
+ <p class="csbody"><xsl:copy-of select="csbody/node()" /></p>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/plugins/gingerbase/ui/pages/help/en_US/Makefile.am b/plugins/gingerbase/ui/pages/help/en_US/Makefile.am
new file mode 100644
index 0000000..0a75a81
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/en_US/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+en_US_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/en_US
+
+dist_en_US_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
\ No newline at end of file
diff --git a/plugins/gingerbase/ui/pages/help/en_US/host.dita b/plugins/gingerbase/ui/pages/help/en_US/host.dita
new file mode 100644
index 0000000..0dcb670
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/en_US/host.dita
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+<?Pub Sty _display FontColor="red"?>
+<?Pub Inc?>
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="en-us">
+<title>Host</title>
+<shortdesc>The <wintitle>Host</wintitle> page shows information about
+the host system, and allows you to shut down, restart, and connect
+to the host.</shortdesc>
+<csbody>
+<p>You can perform the following actions on the host:<ul>
+<li>Select <uicontrol>Shut down</uicontrol> to shut down the host
+system.</li>
+<li>Select <uicontrol>Restart</uicontrol> to restart the host system.</li>
+<li>Select <uicontrol>Connect</uicontrol> to open a VNC connection
+to the host system, if it is not already connected.</li>
+</ul></p>
+<p>Click the following sections to display information about the host:<dl>
+<dlentry>
+<dt>Basic information</dt>
+<dd>This section displays the host operating system distribution,
+version, and code name, as well as the processor type, the number of
+online CPUs and amount of memory in GB.</dd>
+</dlentry><dlentry>
+<dt>System statistics</dt>
+<dd>This section displays graphs to show statistics for CPU, memory,
+disk I/O, and network I/O for the host. Select <uicontrol>Collecting
+data after leaving this page</uicontrol> to continue collecting data
+when the host tab is out of view.</dd>
+</dlentry><dlentry>
+<dt>Software Updates</dt>
+<dd>This section displays information for all of the packages that
+have updates available, including package name, version, architecture,
+and repository. You can update all of the packages listed by selecting <uicontrol>Update
+All</uicontrol>. You cannot select individual packages for updates.</dd>
+</dlentry><dlentry>
+<dt>Repositories</dt>
+<dd>This section displays repositories that are associated with the
+host system. You can add, enable, edit, or remove repositories. Adding
+a repository associates it with the host system while enabling a repository
+allows the host to access it. If your system is Red Hat Enterprise
+Linux or Fedora, you can add <filepath>yum</filepath> repositories.
+If your system is Ubuntu or Debian, then add <filepath>deb</filepath> repositories.<p>If
+you are working with yum repositories, you can add a GPG check to
+verify that a package from this repository have not been corrupted.
+Select a repository and then <uicontrol>Edit</uicontrol>. Select <uicontrol>Yes</uicontrol> to
+enable GPG Check and then enter a URL to the GPG key file for the
+repository.</p><?Pub Caret 156?></dd>
+</dlentry><dlentry>
+<dt>Debug reports</dt>
+<dd>This section displays debug reports, including name and file path.
+You can select from options to generate a new report, or rename, remove,
+or download an existing report.<p>The debug report is generated using
+the <cmdname>sosreport</cmdname> command. It is available for Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora,
+and Ubuntu distributions. The command generates a .tar file that contains
+configuration and diagnostic information, such as the running kernel
+version, loaded modules, and system and service configuration files.
+The command also runs external programs to collect further information
+and stores this output in the resulting archive.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+<?Pub *0000003492?>
diff --git a/plugins/gingerbase/ui/pages/help/es_ES/Makefile.am b/plugins/gingerbase/ui/pages/help/es_ES/Makefile.am
new file mode 100644
index 0000000..b95744a
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/es_ES/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+es_ES_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/es_ES
+
+dist_es_ES_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/es_ES/host.dita b/plugins/gingerbase/ui/pages/help/es_ES/host.dita
new file mode 100644
index 0000000..7734244
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/es_ES/host.dita
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="es-es">
+<title>Host</title>
+<shortdesc>La p��gina <wintitle>Host</wintitle> muestra informaci��n sobre el sistema host y le permite concluir, reiniciar y conectar con el sistema principal.</shortdesc>
+<csbody>
+<p>Puede realizar las acciones siguientes en el host:<ul>
+<li>Seleccione <uicontrol>Concluir</uicontrol> para concluir el sistema host.</li>
+<li>Seleccione <uicontrol>Reiniciar</uicontrol> para reiniciar el sistema host.</li>
+<li>Seleccione <uicontrol>Conectar</uicontrol> para abrir una conexi��n VNC al sistema host, si no est�� conectado a��n.</li>
+</ul></p>
+<p>Pulse en las secciones siguientes para visualizar informaci��n acerca del host:<dl>
+<dlentry>
+<dt>Informaci��n b��sica</dt>
+<dd>Esta secci��n muestra la distribuci��n del sistema operativo de host, la versi��n y el nombre de c��digo, as�� como el tipo de procesador y la cantidad de memoria en GB.</dd>
+</dlentry><dlentry>
+<dt>Estad��sticas del sistema</dt>
+<dd>Esta secci��n muestra gr��ficos para mostrar estad��sticas para CPU, memoria, E/S de disco y E/S de red para el host. Seleccione <uicontrol>Recoger datos despu��s de salir de esta p��gina</uicontrol> para continuar la recogida de datos cuando la pesta��a principal ya no est�� a la vista.</dd>
+</dlentry><dlentry>
+<dt>Actualizaciones de software</dt>
+<dd>En esta secci��n se muestra informaci��n para todos los paquetes que tienen actualizaciones disponibles, incluido el nombre de paquete, versi��n, arquitectura y repositorio. Puede actualizar todos los paquetes listados seleccionando <uicontrol>Actualizar todo</uicontrol>. No puede seleccionar paquetes individuales para las actualizaciones.</dd>
+</dlentry><dlentry>
+<dt>Repositorios</dt>
+<dd>En esta secci��n se muestran los repositorios que est��n asociados con el sistema host. Puede a��adir, habilitar, editar o eliminar repositorios. A��adir un repositorio lo asocia con el sistema host mientras que habilitar un repositorio permite que el host acceda a ��l. Si el sistema es Red Hat Enterprise
+Linux o Fedora, puede a��adir repositorios <filepath>yum</filepath>.
+Si el sistema es Ubuntu o Debian, a��ada repositorios <filepath>deb</filepath>.<p>Si est�� trabajando con repositorios yum, puede a��adir una comprobaci��n GPG para verificar que un paquete de este repositorio no ha resultado da��ado.
+Seleccione un repositorio y, a continuaci��n, <uicontrol>Editar</uicontrol>. Seleccione <uicontrol>S��</uicontrol> para habilitar la comprobaci��n GPG y, a continuaci��n, especifique un URL al archivo de claves GPG para el repositorio.</p></dd>
+</dlentry><dlentry>
+<dt>Informes de depuraci��n</dt>
+<dd>En esta secci��n se muestran informes de depuraci��n, incluido el nombre y la ruta de archivo.
+Puede seleccionar entre opciones para generar un informe nuevo, o bien redenominar, eliminar o descargar un informe existente.<p>El informe de depuraci��n se genera utilizando el mandato <cmdname>sosreport</cmdname>. Est�� disponible para distribuciones de Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora y Ubuntu. El mandato genera un archivo .tar que contiene la informaci��n de configuraci��n y de diagn��stico, como la versi��n de kernel en ejecuci��n, los m��dulos de carga y los archivos de configuraci��n del sistema y servicio.
+El mandato tambi��n ejecuta programas externos para recopilar informaci��n adicional y almacena esta salida en el archivo resultante.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/fr_FR/Makefile.am b/plugins/gingerbase/ui/pages/help/fr_FR/Makefile.am
new file mode 100644
index 0000000..c3e9a14
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/fr_FR/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+fr_FR_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/fr_FR
+
+dist_fr_FR_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/fr_FR/host.dita b/plugins/gingerbase/ui/pages/help/fr_FR/host.dita
new file mode 100644
index 0000000..f4c330b
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/fr_FR/host.dita
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="fr-fr">
+<title>H��te</title>
+<shortdesc>La page <wintitle>H��te</wintitle> affiche des informations
+sur le syst��me h��te et vous permet d'arr��ter, de red��marrer et de vous
+connecter �� l'h��te.</shortdesc>
+<csbody>
+<p>Vous pouvez effectuer les actions suivantes sur l'h��te :<ul>
+<li>S��lectionnez <uicontrol>Arr��ter</uicontrol> pour arr��ter le syst��me h��te.</li>
+<li>S��lectionnez <uicontrol>Red��marrer</uicontrol> pour red��marrer le syst��me h��te.</li>
+<li>S��lectionnez <uicontrol>Connexion</uicontrol> pour ouvrir une connexion VNC
+au syst��me h��te, si celui-ci n'est pas d��j�� connect��.</li>
+</ul></p>
+<p>Cliquez sur les sections suivantes pour afficher des informations sur l'h��te :<dl>
+<dlentry>
+<dt>Informations de base</dt>
+<dd>Cette section affiche la distribution, la version et le nom de code
+du syst��me d'exploitation h��te, ainsi que le type de processeur et la quantit��
+de m��moire en Go.</dd>
+</dlentry><dlentry>
+<dt>Statistiques syst��me</dt>
+<dd>Cette section affiche les graphiques des statistiques pour l'UC, m��moire, ainsi que
+les E-S disque et E-S r��seau pour l'h��te. S��lectionnez <uicontrol>Collecte des donn��es une fois la page quitt��e</uicontrol>
+pour continuer la collecte de donn��es lorsque l'onglet h��te n'est plus visible.</dd>
+</dlentry><dlentry>
+<dt>Mises �� jour logicielles</dt>
+<dd>Cette section affiche des informations pour tous les modules qui
+disposent de mises �� jour disponibles, y compris le nom de module, la version, l'architecture
+et le r��f��rentiel. Vous pouvez mettre �� jour toutes les modules r��pertori��s en s��lectionnant <uicontrol>Tout
+mettre �� jour</uicontrol>. Vous ne pouvez pas s��lectionner des modules individuels pour les mises �� jour.</dd>
+</dlentry><dlentry>
+<dt>R��f��rentiels</dt>
+<dd>Cette section affiche les r��f��rentiels associ��s au syst��me h��te. Vous pouvez ajouter, activer, ��diter ou retirer des r��f��rentiels. L'ajout d'un r��f��rentiel associe celui-ci au syst��me h��te,
+tandis que l'activation d'un r��f��rentiel permet �� l'h��te d'y acc��der. Si votre syst��me est Red Hat Enterprise Linux ou Fedora,
+vous pouvez ajouter des r��f��rentiels <filepath>yum</filepath>.
+Si votre syst��me est de type Ubuntu ou Debian, ajoutez des r��f��rentiels
+<filepath>deb</filepath>.<p>Si vous travaillez avec des r��f��rentiels yum, vous pouvez ajouter un contr��le GPG
+afin de v��rifier qu'un module provenant de ce r��f��rentiel n'a pas ��t�� endommag��.
+S��lectionnez un r��f��rentiel puis cliquez sur <uicontrol>Editer</uicontrol>. S��lectionnez <uicontrol>Oui</uicontrol> pour activer le contr��le GPG,
+puis entrez une URL pour le fichier de cl��s GPG du r��f��rentiel.</p></dd>
+</dlentry><dlentry>
+<dt>Rapports de d��bogage</dt>
+<dd>Cette section affiche les rapports de d��bogage, y compris le nom et le chemin du fichier.
+Vous pouvez faire un choix parmi les options afin de g��n��rer un nouveau rapport, ou renommer, supprimer,
+ou t��l��charger un rapport existant.<p>Le rapport de d��bogage est g��n��r�� ��
+l'aide de la commande <cmdname>sosreport</cmdname>. Cette option est disponible pour les distributions
+Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora et Ubuntu. La commande g��n��re un fichier .tar contenant la configuration et des informations de diagnostic,
+telles que la version du noyau d'ex��cution, les modules charg��s, ainsi que les fichiers de configuration
+du syst��me et de la maintenance.
+La commande ex��cute ��galement des programmes externes pour collecter des informations
+suppl��mentaires et stocke cette sortie dans l'archive r��sultante.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/gingerbase.css b/plugins/gingerbase/ui/pages/help/gingerbase.css
new file mode 100644
index 0000000..88b23bf
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/gingerbase.css
@@ -0,0 +1,208 @@
+/*
+ * Project Ginger Base
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+BODY {
+ background: #FFFFFF;
+ margin-bottom: 1em;
+ margin-left: .5em;
+}
+
+bold {
+ font-weight: bold;
+}
+
+boldItalic {
+ font-weight: bold;
+ font-style: italic;
+}
+
+italic {
+ font-style: italic;
+}
+
+underlined {
+ text-decoration: underline;
+}
+
+uicontrol {
+ font-weight: bold;
+}
+
+filepath {
+ font-family: monospace, monospace;
+}.option {
+ font-family: monospace, monospace;
+}
+
+cmdname {
+ font-weight: bold;
+ font-family: monospace, monospace;
+}
+
+.defparmname {
+ font-weight: bold;
+ text-decoration: underline;
+ font-family: monospace, monospace;
+}
+
+.kwd {
+ font-weight: bold;
+}
+
+.defkwd {
+ font-weight: bold;
+ text-decoration: underline;
+}
+
+var {
+ font-style : italic;
+}
+
+strongwintitle {
+ font-weight : bold;
+}
+
+parmname {
+ font-weight: bold;
+ font-family: monospace, monospace;
+ white-space: nowrap;
+}
+
+code {
+ font-family: monospace, monospace;
+}
+
+pre {
+ font-family: monospace, monospace;
+}
+
+CITE {
+ font-style: italic;
+}
+
+EM {
+ font-style: italic;
+}
+
+STRONG {
+ font-weight: bold;
+}
+
+VAR {
+ font-style: italic;
+}
+
+dt {
+ font-weight: bold;
+}
+
+/***********************************************************
+ * Basic fonts
+ ***********************************************************/
+body,
+td,
+th,
+caption {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10pt;
+}
+
+pre, code {
+ font-family: MS Courier New, Courier, monospace;
+}
+
+h1, h2, h3 {
+ font-size: 12pt;
+ font-weight: bold;
+ color: #336699;
+}
+
+h4 {
+ font-size: 10pt;
+ font-weight: bold;
+ color: #336699;
+}
+
+/***********************************************************
+ * Basic indents, padding, and margin
+ ***********************************************************/
+body {
+ color: black;
+ background-color: white;
+ margin: 0;
+ padding-top: 0.2em;
+ padding-left: 0.6em;
+ padding-right: 0.2em;
+ padding-bottom: 1em;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ padding: 0;
+ margin-top: 1em;
+ margin-bottom: 0.75em;
+ margin-left: 0;
+ margin-right: 0;
+}
+
+address,
+dl,
+li,
+p {
+ padding: 0;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ margin-left: 0;
+ margin-right: 0;
+ line-height: 125%;
+}
+
+td dl {
+ margin-left: 2em;
+}
+
+pre {
+ padding: 0;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ margin-left: 2em;
+ margin-right: 0;
+}
+
+ol,
+ul {
+ padding: 0;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ margin-left: 2.00em;
+ margin-right: 0;
+}
+
+dd {
+ margin-left: 3.00em;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+}
+
+dt {
+ margin-left: 1.00em;
+ margin-top: 0.75em;
+}
diff --git a/plugins/gingerbase/ui/pages/help/it_IT/Makefile.am b/plugins/gingerbase/ui/pages/help/it_IT/Makefile.am
new file mode 100644
index 0000000..3eaa7b8
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/it_IT/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+it_IT_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/it_IT
+
+dist_it_IT_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/it_IT/host.dita b/plugins/gingerbase/ui/pages/help/it_IT/host.dita
new file mode 100644
index 0000000..63d3367
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/it_IT/host.dita
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="it-it">
+<title>Host</title>
+<shortdesc>La pagina <wintitle>Host</wintitle> visualizza le informazioni sul sistema host e consente di arrestarlo, riavviarlo e connettersi ad esso.</shortdesc>
+<csbody>
+<p>�� possibile effettuare le seguenti operazioni sull'host:<ul>
+<li>Selezionare <uicontrol>Arresta</uicontrol> per arrestare il sistema host.</li>
+<li>Selezionare <uicontrol>Riavvia</uicontrol> per riavviare il sistema host.</li>
+<li>Selezionare <uicontrol>Connetti</uicontrol> per aprire una connessione VNC al sistema host, se non �� gi�� connesso.</li>
+</ul></p>
+<p>Fare clic sulle seguenti sezioni per visualizzare le informazioni sull'host:<dl>
+<dlentry>
+<dt>Informazioni di base</dt>
+<dd>Questa sezione visualizza il nome codice, la versione e la distribuzione del sistema operativo, come pure il tipo di processore e la quantit�� di memoria in GB.</dd>
+</dlentry><dlentry>
+<dt>Statistiche di sistema</dt>
+<dd>Questa sezione visualizza i grafici che mostrano le statistiche per la CPU, la memoria, l'I/O disco e di rete per l'host. Selezionare <uicontrol>Raccolta dati all'uscita dalla pagina</uicontrol> per continuare la raccolta dei dati quando la scheda host non �� pi�� visibile.</dd>
+</dlentry><dlentry>
+<dt>Aggiornamenti del software</dt>
+<dd>Questa sezione visualizza le informazioni per tutti i pacchetti per cui sono disponibili gli aggiornamenti, incluso il nome, la versione, l'architettura e il repository del pacchetto. �� possibile aggiornare tutti i pacchetti elencati, selezionando <uicontrol>Aggiorna tutto</uicontrol>. Non �� possibile selezionare singoli pacchetti per gli aggiornamenti.</dd>
+</dlentry><dlentry>
+<dt>Repository</dt>
+<dd>Questa sezione visualizza i repository associati al sistema host. �� possibile aggiungere, abilitare, modificare o rimuovere i repository. L'aggiunta di un repository lo associa al sistema host, mentre l'abilitazione di un repository
+consente all'host di accedervi. Se il sistema �� Red Hat Enterprise
+Linux o Fedora, �� possibile aggiungere i repository <filepath>yum</filepath>.
+Se il sistema �� Ubuntu o Debian, aggiungere i repository <filepath>deb</filepath>.<p>Se si stanno utilizzando i repository yum, �� possibile aggiungere un controllo GPG per verificare che un pacchetto da questo repository non sia stato corrotto.
+Selezionare un repository, quindi <uicontrol>Modifica</uicontrol>. Selezionare <uicontrol>S��</uicontrol> per abilitare il controllo GPG, quindi immettere un URL al file di chiavi GPG per il
+repository.</p></dd>
+</dlentry><dlentry>
+<dt>Report di debug</dt>
+<dd>Questa sezione visualizza i report di debug, incluso il nome e il percorso file.
+Le opzioni disponibili consentono di generare un nuovo report oppure ridenominare, rimuovere o scaricare un report esistente.<p>Il report di debug viene generato utilizzando il comando <cmdname>sosreport</cmdname>. �� disponibile per le distribuzioni Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora e Ubuntu. Il comando genera un file .tar che contiene informazioni di diagnostica e configurazione, come la versione del kernel in esecuzione, i moduli caricati e i file di configurazione del servizio e del sistema.
+Il comando esegue anche programmi esterni per raccogliere ulteriori informazioni e memorizza l'output nell'archivio risultante.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/ja_JP/Makefile.am b/plugins/gingerbase/ui/pages/help/ja_JP/Makefile.am
new file mode 100644
index 0000000..eef3ea8
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ja_JP/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ja_JP_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/ja_JP
+
+dist_ja_JP_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/ja_JP/host.dita b/plugins/gingerbase/ui/pages/help/ja_JP/host.dita
new file mode 100644
index 0000000..3a0141c
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ja_JP/host.dita
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="ja-jp">
+<title>���������</title>
+<shortdesc><wintitle>���������������</wintitle>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+</shortdesc>
+<csbody>
+<p>���������������������������������������������������������������������
+<ul>
+<li>������������������������������������������������������������<uicontrol>���������������������������</uicontrol>���������������������
+</li>
+<li>������������������������������������������������<uicontrol>���������������</uicontrol>���������������������
+</li>
+<li>������������������������������ VNC ��������� (���������������������������������������) ���������������������������<uicontrol>������������</uicontrol>���������������������
+</li>
+</ul></p>
+<p>������������������������������������������������������������������������������������������������������������
+<dl>
+<dlentry>
+<dt>������������</dt>
+<dd>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ (GB ������) ������������������������
+</dd>
+</dlentry><dlentry>
+<dt>������������������������</dt>
+<dd>������������������������������������������ CPU���������������������������������������������������������������������������������������������������������������������������������������
+���������������������������������������������������������������������������������<uicontrol>���������������������������������������������������������������</uicontrol>������������������������������
+</dd>
+</dlentry><dlentry>
+<dt>������������������������</dt>
+<dd>���������������������������������������������������������������������������������������������
+(������������������������������������������������������������������������������������������) ������������������������
+<uicontrol>���������������������</uicontrol>���������������������������������������������������������������������������������������������
+���������������������������������������������������������������������������������������������
+</dd>
+</dlentry><dlentry>
+<dt>������������������</dt>
+<dd>������������������������������������������������������������������������������������������������������������������������������
+������������������������������������������������������������������������������������������������������������������
+������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+��������������� Red Hat Enterprise Linux ��������� Fedora ���������������<filepath>yum</filepath> ������������������������������������������
+��������������� Ubuntu ��������� Debian ���������������<filepath>deb</filepath> ������������������������������������������������
+<p>yum ������������������������������������������������������������������������������������������������������������������������������������������������������������GPG ������������������������������������
+���������������������������������<uicontrol>������������</uicontrol>������������������������������������
+<uicontrol>������������</uicontrol>��������������� GPG ������������������������������������������������������������������ GPG ������������������ URL ������������������������������
+</p></dd>
+</dlentry><dlentry>
+<dt>���������������������������</dt>
+<dd>��������������������������������������������������������� (������������������������������������) ������������������������
+������������������������������������������������������������������������������������������������������������������������������������������������������������������
+<p>���������������������������������<cmdname>sosreport</cmdname> ������������������������������������
+������������Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>���Fedora������������ Ubuntu ���������������������������������������������������������������
+��������������������������������������������������� (������������������������������������������������������������������������������������������������������������������������������������������������) ������������ .tar ���������������������������������
+������������������������������������������������������������������������������������������������������������������������������������������������������������
+</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 227 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 1 -->
diff --git a/plugins/gingerbase/ui/pages/help/ko_KR/Makefile.am b/plugins/gingerbase/ui/pages/help/ko_KR/Makefile.am
new file mode 100644
index 0000000..e25a747
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ko_KR/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ko_KR_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/ko_KR
+
+dist_ko_KR_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/ko_KR/host.dita b/plugins/gingerbase/ui/pages/help/ko_KR/host.dita
new file mode 100644
index 0000000..ee4a9c3
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ko_KR/host.dita
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="ko-kr">
+<title>���������</title>
+<shortdesc><wintitle>���������</wintitle> ��������������� ��������� ������������ ������ ��������� ������������ ��� ������������ ������������ ������������ ������ ��� ������ ��������������� ������������ ��������� ��� ������������.</shortdesc>
+<csbody>
+<p>������������ ������ ������ ��������� ��������� ��� ������������.<ul>
+<li>��������� ������������ ��������������� <uicontrol>��������� ������</uicontrol>��� ���������������.</li>
+<li>��������� ������������ ������ ��������������� <uicontrol>������ ������</uicontrol>��� ���������������.</li>
+<li>������ ������������ ������ ������ ������, ��������� ������������ ������ VNC ��������� ��������������� <uicontrol>������</uicontrol>��� ���������������.</li>
+</ul></p>
+<p>������������ ������ ��������� ��������������� ������ ��������� ������������������.<dl>
+<dlentry>
+<dt>������ ������</dt>
+<dd>��� ������������ ��������� ������ ������ ������, ������, ������ ������, ������������ ������, ��������� ������(GB) ������ ���������������.</dd>
+</dlentry><dlentry>
+<dt>��������� ������</dt>
+<dd>��� ������������ ������������ CPU, ���������, ��������� I/O, ������������ I/O��� ������ ��������� ������������ ������������ ���������������. ��������� ������ ��������� ��� ��������� ��������� ��������������� <uicontrol>��� ������������ ������ ������ ��������� ������</uicontrol>��� ���������������.</dd>
+</dlentry><dlentry>
+<dt>��������������� ������������</dt>
+<dd>��� ������������ ��������� ������, ������, ������������, ������������ ������������ ������ ��������� ��������������� ������ ������ ������������ ������ ��������� ���������������. <uicontrol>������ ������������</uicontrol>��� ������������ ��������� ������ ������������ ��������������� ��� ������������. ��������������� ������ ������ ������������ ��������� ������ ������������.</dd>
+</dlentry><dlentry>
+<dt>���������</dt>
+<dd>��� ������������ ��������� ������������ ��������� ������������ ���������������. ������������ ���������������, ������������ ���������������, ���������������, ��������� ��� ������������. ������������ ������������ ������������ ��������� ������������ ������������, ������������ ������������ ������������ ������������ ������������ ������������ ��� ������������. ������ ������������ Red Hat Enterprise Linux ������ Fedora��� ������, <filepath>yum</filepath> ������������ ��������� ��� ������������.
+������ ������������ Ubuntu ������ Debian��� ������, <filepath>deb</filepath> ������������ ������������������.<p>yum ������������ ������������ ������, GPG ��������� ������������ ��� ������������ ������������ ������������ ������������ ��������� ��� ������������.
+������������ ��������� ��� <uicontrol>������</uicontrol>��� ������������������. <uicontrol>���</uicontrol>��� ������������ GPG ��������� ������������ ��������� ��� ������������ ������ GPG ��� ��������� URL��� ������������������.</p></dd>
+</dlentry><dlentry>
+<dt>��������� ���������</dt>
+<dd>��� ������������ ������ ��� ������ ��������� ��������� ��������� ������������ ���������������.
+��� ��������� ������, ������ ��������� ������ ���������, ������, ������������ ������ ������ ��������� ��������� ��� ������������.<p>��������� ������������ <cmdname>sosreport</cmdname> ��������� ������������ ���������������. ������ Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora ��� Ubuntu ������������ ������ ���������������. ��� ��������� ������ ��� ������ ������(���: ������ ������ ������ ������, ��������� ������, ��������� ��� ��������� ������ ������)��� ������������ .tar ��������� ���������������.
+������ ��� ��������� ������ ��������������� ������������ ������ ��������� ������������ ������ ��������������� ��� ��������� ���������������.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/pt_BR/Makefile.am b/plugins/gingerbase/ui/pages/help/pt_BR/Makefile.am
new file mode 100644
index 0000000..afb77db
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/pt_BR/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+pt_BR_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/pt_BR
+
+dist_pt_BR_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/pt_BR/host.dita b/plugins/gingerbase/ui/pages/help/pt_BR/host.dita
new file mode 100644
index 0000000..88f7eb2
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/pt_BR/host.dita
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="pt-br">
+<title>Host</title>
+<shortdesc>A p��gina <wintitle>Host</wintitle> mostra informa����es sobre
+o sistema host e permite encerrar, reiniciar e conectar
+ao host.</shortdesc>
+<csbody>
+<p>�� poss��vel executar as a����es a segur no host:<ul>
+<li>Selecione <uicontrol>Encerrar</uicontrol> para encerrar o sistema
+host.</li>
+<li>Selecione <uicontrol>Reiniciar</uicontrol> para reiniciar o sistema host.</li>
+<li>Selecione <uicontrol>Conectar</uicontrol> para abrir uma conex��o VNC
+para o sistema host, se ele j�� n��o estiver conectado.</li>
+</ul></p>
+<p>Clique nas se����es a seguir para exibir informa����es sobre o host:<dl>
+<dlentry>
+<dt>Informa����es b��sicas</dt>
+<dd>Esta se����o exibe a distribui����o do sistema operacional do host,
+a vers��o e o nome do c��digo, bem como o tipo de processador e quantia de
+mem��ria em GB.</dd>
+</dlentry><dlentry>
+<dt>Estat��sticas do sistema</dt>
+<dd>Esta se����o exibe gr��ficos para mostrar estat��sticas para CPU, mem��ria,
+E/S de disco e E/S de rede para o host. Selecione <uicontrol>Coletando
+dados depois de sair desta p��gina</uicontrol> para continuar a coletar dados
+quando a guia do host estiver fora de visualiza����o.</dd>
+</dlentry><dlentry>
+<dt>Atualiza����es de software</dt>
+<dd>Esta se����o exibe informa����es de todos os pacotes que
+possuem atualiza����es dispon��veis, incluindo nome do pacote, vers��o, arquitetura
+e reposit��rio. �� poss��vel atualizar todos os pacotes listados selecionando <uicontrol>Atualizar
+todos</uicontrol>. N��o �� poss��vel selecionar pacotes individuais para atualiza����es.</dd>
+</dlentry><dlentry>
+<dt>Reposit��rios</dt>
+<dd>Esta se����o exibe reposit��rios que est��o associados ao
+sistema host. �� poss��vel incluir, ativar, editar ou remover reposit��rios. Incluir
+um reposit��rio o associa com o sistema host enquanto ativar um reposit��rio
+permite que o host o acesse. Se o seu sistema for Red Hat Enterprise
+Linux ou Fedora, ser�� poss��vel incluir reposit��rios <filepath>yum</filepath>.
+Se o seu sistema for Ubuntu ou Debian, inclua reposit��rios <filepath>deb</filepath>.<p>Se
+voc�� estiver trabalhando com reposit��rios yum, ser�� poss��vel incluir uma verifica����o de GPG para
+verificar se um pacote desse reposit��rio n��o foi corrompido.
+Selecione um reposit��rio e, em seguida, <uicontrol>Editar</uicontrol>. Selecione <uicontrol>Sim</uicontrol> para
+ativar a Verifica����o de GPG e, em seguida, insira uma URL no arquivo-chave de GPG para o
+reposit��rio.</p></dd>
+</dlentry><dlentry>
+<dt>Relat��rios de depura����o</dt>
+<dd>Esta se����o exibe relat��rios de depura����o, incluindo nome e caminho do arquivo.
+�� poss��vel selecionar a partir das op����es para gerar um novo relat��rio ou renomear, remover
+ou fazer o download de um relat��rio existente.<p>O relat��rio de depura����o �� gerado usando
+o comando <cmdname>sosreport</cmdname>. Ele est�� dispon��vel para distribui����es
+Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora
+e Ubuntu. O comando gera um arquivo .tar que cont��m
+informa����es de configura����o e de diagn��stico, como vers��o do kernel
+em execu����o, m��dulos carregados e arquivos de configura����o de sistema e de servi��o.
+O comando tamb��m executa programas externos para coletar informa����es adicionais
+e armazena essa sa��da no archive resultante.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/ru_RU/Makefile.am b/plugins/gingerbase/ui/pages/help/ru_RU/Makefile.am
new file mode 100644
index 0000000..7f1bc1c
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ru_RU/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ru_RU_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/ru_RU
+
+dist_ru_RU_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/ru_RU/host.dita b/plugins/gingerbase/ui/pages/help/ru_RU/host.dita
new file mode 100644
index 0000000..fb72c21
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ru_RU/host.dita
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="ru-ru">
+<title>��������</title>
+<shortdesc>���������������� <wintitle>��������</wintitle> �������������������� �������������������� �� �������������� ���������� �� ������������������ �������������������������� ��������, �������������������������� �������� �� ������������������������ �� ��������.</shortdesc>
+<csbody>
+<p>���� ���������� ���������� ������������������ ������������������ ����������������:<ul>
+<li><uicontrol>������������������ ������������</uicontrol> - �������������������� �������������� ����������.</li>
+<li><uicontrol>��������������������������</uicontrol> - �������������������������� �������������� ����������.</li>
+<li><uicontrol>������������������������</uicontrol> - �������������� �������������������� VNC �� ���������������� ����������, �������� ������ ������ ���� ����������������������.</li>
+</ul></p>
+<p>���������������� ���� ������������������ ���������������� ������ ������������������ �������������������� �� ����������:<dl>
+<dlentry>
+<dt>�������������� ��������������������</dt>
+<dd>�� �������� �������������� ������������������������ �������������� ������������������������ ��������������, ������ ������������ �� �������������� ������, �� ���������� ������ �������������������� �� ���������� ������������ �� ����.</dd>
+</dlentry><dlentry>
+<dt>������������������ ��������������������</dt>
+<dd>�� �������� �������������� ������������������������ ��������������, �������������������� ���������������������������� �������������������� �� ��������������������, ������������, ���������������� ����������-������������ �� �������������� ����������-������������ ������ ����������. ���������������� <uicontrol>�������� ������������ ���������� ���������������� �������� ����������������</uicontrol>, ���������� �������� ������������ ���������������������� ���������� ���������������� �������������� ��������.</dd>
+</dlentry><dlentry>
+<dt>�������������������� ������������������������ ����������������������</dt>
+<dd>�� �������� �������������� ������������������������ �������������������� ������ �������� ��������������, ������ �������������� ���������������� ��������������������, �������������� ������ ������������, ������������, ���������������������� �� ������������������. ���������� ���������������� ������ ������������ �� ������������ �������������� ���� <uicontrol>���������������� ������</uicontrol>. ������������������ ������������ ������ �������������������� �������������� ������������.</dd>
+</dlentry><dlentry>
+<dt>������������������</dt>
+<dd>�� �������� �������������� ������������������������ ������������������, ������������������ �� ���������������� ����������. ������������������ ���������� ������������������, ������������������������, ���������������� �� ��������������. ������ �������������������� ������������������ ���������������������� �� ���������������� ����������, ������ ������������������ ������������������ �������������������� ������������������ ������ ����������. �������� �������������� - Red Hat Enterprise Linux ������ Fedora, ���������� ���������������� ������������������ <filepath>yum</filepath>.
+�������� �������������� - Ubuntu ������ Debian, ���������������� ������������������ <filepath>deb</filepath>.<p>������ ������������ �� ���������������������� yum ���������� ���������������� ���������������� GPG ������ ���������������� ���������������������� �������������� ���� �������������� ������������������.
+���������������� ������������������ �� ���������������� ���� <uicontrol>����������������</uicontrol>. ���������������� <uicontrol>����</uicontrol>, ���������� ���������������� ���������������� GPG, �� �������������� URL ���������� ������������ GPG ������ ������������������.</p></dd>
+</dlentry><dlentry>
+<dt>�������������������� ������������</dt>
+<dd>�� �������� �������������� ������������������������ �������������������� ������������, �������������� ������ �� ��������.
+���������������� �������������� ������ ����������������, ����������������������������, ���������������� �� ���������������� ��������������.<p>�������������������� ���������� ������������������ ���������������� <cmdname>sosreport</cmdname>. ���� ���������������� ������ Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora �� Ubuntu. �������������� �������������� �������� .tar �� �������������������������������� �� ������������������������������ ����������������������, ���������� ������ ������������ ��������, ���������������������� ������������ �� ���������� ������������������������ �������������� �� ����������.
+�������������� ���������� ������������������ �������������� ������������������ ������ ���������� ���������������������������� �������������������� �� ������������������ ���� ���������� �� ���������������������������� ������������.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/zh_CN/Makefile.am b/plugins/gingerbase/ui/pages/help/zh_CN/Makefile.am
new file mode 100644
index 0000000..9cb5a0c
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/zh_CN/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+zh_CN_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/zh_CN
+
+dist_zh_CN_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/zh_CN/host.dita b/plugins/gingerbase/ui/pages/help/zh_CN/host.dita
new file mode 100644
index 0000000..78a89c3
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/zh_CN/host.dita
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="zh-cn">
+<title>������</title>
+<shortdesc>���<wintitle>������</wintitle>������������������������������������������������������������������������������������������������������</shortdesc>
+<csbody>
+<p>���������������������������������<ul>
+<li>������<uicontrol>������</uicontrol>������������������������</li>
+<li>������<uicontrol>������������</uicontrol>������������������������������</li>
+<li>������<uicontrol>������</uicontrol>��������������������������� VNC ���������������������������������</li>
+</ul></p>
+<p>���������������������������������������������������<dl>
+<dlentry>
+<dt>������������</dt>
+<dd>��������������������������������������������������������������������������������������������������������� GB ���������</dd>
+</dlentry><dlentry>
+<dt>������������������</dt>
+<dd>��������������������������������������������� CPU������������������ I/O ��������� I/O ������������������������<uicontrol>���������������������������������</uicontrol>������������������������������������������������������������</dd>
+</dlentry><dlentry>
+<dt>������������</dt>
+<dd>���������������������������������������������������������������������������������������������������������������������������������������������<uicontrol>������������</uicontrol>���������������������������������������������������������������������������������</dd>
+</dlentry><dlentry>
+<dt>���������</dt>
+<dd>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Red Hat Enterprise Linux ��� Fedora������������������ <filepath>yum</filepath> ��������������������������������� Ubuntu ��� Debian������������������ <filepath>deb</filepath> ������������<p>��������������� Yum ��������������������������� GPG ������������������������������������������������������������������������������������������������<uicontrol>������</uicontrol>���������<uicontrol>���</uicontrol>��������� GPG ��������������������������������� GPG ��������������� URL���</p></dd>
+</dlentry><dlentry>
+<dt>������������</dt>
+<dd>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>���������������������
+<cmdname>sosreport</cmdname> ��������������������������������� Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>���Fedora ��� Ubuntu ������������������������������������������������������������ .tar ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/zh_TW/Makefile.am b/plugins/gingerbase/ui/pages/help/zh_TW/Makefile.am
new file mode 100644
index 0000000..e27b90b
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/zh_TW/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+zh_TW_helpdir = $(datadir)/wok/plugins/gingerbase/ui/pages/help/zh_TW
+
+dist_zh_TW_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
diff --git a/plugins/gingerbase/ui/pages/help/zh_TW/host.dita b/plugins/gingerbase/ui/pages/help/zh_TW/host.dita
new file mode 100644
index 0000000..a55aae4
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/zh_TW/host.dita
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="zh-tw">
+<title>������</title>
+<shortdesc>���<wintitle>������</wintitle>���������������������������������������������������������������������������������������������������������</shortdesc>
+<csbody>
+<p>������������������������������������������<ul>
+<li>������<uicontrol>������</uicontrol>������������������������</li>
+<li>������<uicontrol>������������</uicontrol>������������������������������</li>
+<li>������<uicontrol>������</uicontrol>��������������������������� VNC ������������������������������������������������</li>
+</ul></p>
+<p>������������������������������������������������������<dl>
+<dlentry>
+<dt>������������</dt>
+<dd>������������������������������������������������������������������������������������������������������������������ (GB)���</dd>
+</dlentry><dlentry>
+<dt>������������������</dt>
+<dd>��������������������������������������������������� CPU��������������������� I/O ��������� I/O ������������������������<uicontrol>���������������������������������</uicontrol>���������������������������������������������������������������</dd>
+</dlentry><dlentry>
+<dt>������������</dt>
+<dd>���������������������������������������������������������������������������������������������������������������������������������������������<uicontrol>������������</uicontrol>���������������������������������������������������������������������������</dd>
+</dlentry><dlentry>
+<dt>���������</dt>
+<dd>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+Red Hat Enterprise Linux ��� Fedora������������������ <filepath>yum</filepath> ���������������������������������
+Ubuntu ��� Debian������������������ <filepath>deb</filepath> ������������<p>���������������������
+yum ��������������������������� GPG ���������������������������������������������������������������������������������������������<uicontrol>������</uicontrol>���������<uicontrol>���</uicontrol>���������
+GPG ��������������������������������� GPG ������������ URL���</p></dd>
+</dlentry><dlentry>
+<dt>������������</dt>
+<dd>���������������������������������������������������������������������������������������������������������������������������������������������������������<p>���������������������
+<cmdname>sosreport</cmdname> ������������������������������������ Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>���Fedora
+��� Ubuntu ��������������������������������� .tar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/de_DE/host.dita b/plugins/kimchi/ui/pages/help/de_DE/host.dita
deleted file mode 100644
index 33a40e3..0000000
--- a/plugins/kimchi/ui/pages/help/de_DE/host.dita
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="de-de">
-<title>Host</title>
-<shortdesc>Die Seite <wintitle>Host</wintitle> zeigt Informationen zum Hostsystem an und erm��glicht Ihnen, den Host herunterzufahren, erneut zu starten und eine Verbindung zu ihm herzustellen.</shortdesc>
-<csbody>
-<p>Sie k��nnen die folgenden Aktionen am Host durchf��hren:<ul>
-<li>W��hlen Sie <uicontrol>Herunterfahren</uicontrol> aus, um das Hostsystem herunterzufahren.</li>
-<li>W��hlen Sie <uicontrol>Erneut starten</uicontrol> aus, um das Hostsystem erneut zu starten.</li>
-<li>W��hlen Sie <uicontrol>Verbinden</uicontrol> aus, um eine VNC-Verbindung zum Hostsystem herzustellen, wenn noch keine Verbindung besteht.</li>
-</ul></p>
-<p>Klicken Sie auf die folgenden Abschnitte, um Informationen zum Host anzuzeigen:<dl>
-<dlentry>
-<dt>Basisinformationen</dt>
-<dd>Dieser Abschnitt zeigt die Verteilung, die Version und den Codenamen des Hostbetriebssystems sowie den Prozessortyp und die Speicherkapazit��t in GB an.</dd>
-</dlentry><dlentry>
-<dt>Systemstatistik</dt>
-<dd>Dieser Abschnitt zeigt mithilfe von Grafiken Statistiken f��r CPU, Speicher, Platten-E/A und Netz-E/A f��r den Host an. W��hlen Sie <uicontrol>Daten werden nach dem Verlassen dieser Seite gesammelt</uicontrol> aus, um mit der Sammlung von Daten fortzufahren, wenn die Host-Registerkarte nicht angezeigt wird.</dd>
-</dlentry><dlentry>
-<dt>Software-Updates</dt>
-<dd>Dieser Abschnitt zeigt Informationen f��r alle Pakete an, bei denen Aktualisierungen verf��gbar sind, einschlie��lich Paketname, Version, Architektur und Repository. Sie k��nnen alle aufgelisteten Pakete aktualisieren, indem Sie <uicontrol>Alle aktualisieren</uicontrol> ausw��hlen. Sie k��nnen nicht einzelne Pakete zur Aktualisierung ausw��hlen.</dd>
-</dlentry><dlentry>
-<dt>Repositorys</dt>
-<dd>Dieser Abschnitt zeigt Repositorys an, die dem Hostsystem zugeordnet sind. Sie k��nnen Repositorys hinzuf��gen, aktivieren, bearbeiten oder entfernen. Beim Hinzuf��gen wird ein Repository dem Hostsystem zugeordnet. Das Aktivieren eines Repositorys dagegen erm��glicht dem Host den Zugriff auf das Repository. Wenn Ihr System Red Hat Enterprise
-Linux oder Fedora ist, k��nnen Sie <filepath>yum</filepath>-Repositorys hinzuf��gen.
-Wenn Ihr System Ubuntu oder Debian ist, f��gen Sie <filepath>deb</filepath>-Repositorys hinzu.<p>Wenn Sie mit yum-Repositorys arbeiten, k��nnen Sie eine GPG-Pr��fung hinzuf��gen, um sicherzustellen, dass ein Paket aus diesem Repository nicht besch��digt wurde.
-W��hlen Sie ein Repository und dann <uicontrol>Bearbeiten</uicontrol> aus. W��hlen Sie <uicontrol>Ja</uicontrol> aus, um die GPG-Pr��fung zu aktivieren, und geben Sie dann ein URL zur GPG-Schl��sseldatei f��r das Repository ein.</p></dd>
-</dlentry><dlentry>
-<dt>Debugberichte</dt>
-<dd>Dieser Abschnitt zeigt Debugberichte, einschlie��lich Name und Dateipfad, an.
-Sie haben die M��glichkeit, einen neuen Bericht zu erstellen oder einen bestehenden Bericht umzubenennen, zu entfernen oder herunterzuladen.<p>Der Debugbericht wird w��hrend des Befehls <cmdname>sosreport</cmdname> generiert. Er ist verf��gbar f��r Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>-, Fedora-
-und Ubuntu-Verteilungen. Der Befehl generiert eine .tar-Datei, die Konfigurations- und Diagnoseinformationen enth��lt, wie zum Beispiel Kernelversion, geladene Module sowie System- und Servicekonfigurationdateien.
-Der Befehl f��hrt zudem externe Programme aus, um weitere Informationen zu sammeln, und speichert diese Ausgabe im resultierenden Archiv.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/en_US/host.dita b/plugins/kimchi/ui/pages/help/en_US/host.dita
deleted file mode 100644
index 0dcb670..0000000
--- a/plugins/kimchi/ui/pages/help/en_US/host.dita
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-<?Pub Sty _display FontColor="red"?>
-<?Pub Inc?>
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="en-us">
-<title>Host</title>
-<shortdesc>The <wintitle>Host</wintitle> page shows information about
-the host system, and allows you to shut down, restart, and connect
-to the host.</shortdesc>
-<csbody>
-<p>You can perform the following actions on the host:<ul>
-<li>Select <uicontrol>Shut down</uicontrol> to shut down the host
-system.</li>
-<li>Select <uicontrol>Restart</uicontrol> to restart the host system.</li>
-<li>Select <uicontrol>Connect</uicontrol> to open a VNC connection
-to the host system, if it is not already connected.</li>
-</ul></p>
-<p>Click the following sections to display information about the host:<dl>
-<dlentry>
-<dt>Basic information</dt>
-<dd>This section displays the host operating system distribution,
-version, and code name, as well as the processor type, the number of
-online CPUs and amount of memory in GB.</dd>
-</dlentry><dlentry>
-<dt>System statistics</dt>
-<dd>This section displays graphs to show statistics for CPU, memory,
-disk I/O, and network I/O for the host. Select <uicontrol>Collecting
-data after leaving this page</uicontrol> to continue collecting data
-when the host tab is out of view.</dd>
-</dlentry><dlentry>
-<dt>Software Updates</dt>
-<dd>This section displays information for all of the packages that
-have updates available, including package name, version, architecture,
-and repository. You can update all of the packages listed by selecting <uicontrol>Update
-All</uicontrol>. You cannot select individual packages for updates.</dd>
-</dlentry><dlentry>
-<dt>Repositories</dt>
-<dd>This section displays repositories that are associated with the
-host system. You can add, enable, edit, or remove repositories. Adding
-a repository associates it with the host system while enabling a repository
-allows the host to access it. If your system is Red Hat Enterprise
-Linux or Fedora, you can add <filepath>yum</filepath> repositories.
-If your system is Ubuntu or Debian, then add <filepath>deb</filepath> repositories.<p>If
-you are working with yum repositories, you can add a GPG check to
-verify that a package from this repository have not been corrupted.
-Select a repository and then <uicontrol>Edit</uicontrol>. Select <uicontrol>Yes</uicontrol> to
-enable GPG Check and then enter a URL to the GPG key file for the
-repository.</p><?Pub Caret 156?></dd>
-</dlentry><dlentry>
-<dt>Debug reports</dt>
-<dd>This section displays debug reports, including name and file path.
-You can select from options to generate a new report, or rename, remove,
-or download an existing report.<p>The debug report is generated using
-the <cmdname>sosreport</cmdname> command. It is available for Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora,
-and Ubuntu distributions. The command generates a .tar file that contains
-configuration and diagnostic information, such as the running kernel
-version, loaded modules, and system and service configuration files.
-The command also runs external programs to collect further information
-and stores this output in the resulting archive.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-<?Pub *0000003492?>
diff --git a/plugins/kimchi/ui/pages/help/es_ES/host.dita b/plugins/kimchi/ui/pages/help/es_ES/host.dita
deleted file mode 100644
index 7734244..0000000
--- a/plugins/kimchi/ui/pages/help/es_ES/host.dita
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="es-es">
-<title>Host</title>
-<shortdesc>La p��gina <wintitle>Host</wintitle> muestra informaci��n sobre el sistema host y le permite concluir, reiniciar y conectar con el sistema principal.</shortdesc>
-<csbody>
-<p>Puede realizar las acciones siguientes en el host:<ul>
-<li>Seleccione <uicontrol>Concluir</uicontrol> para concluir el sistema host.</li>
-<li>Seleccione <uicontrol>Reiniciar</uicontrol> para reiniciar el sistema host.</li>
-<li>Seleccione <uicontrol>Conectar</uicontrol> para abrir una conexi��n VNC al sistema host, si no est�� conectado a��n.</li>
-</ul></p>
-<p>Pulse en las secciones siguientes para visualizar informaci��n acerca del host:<dl>
-<dlentry>
-<dt>Informaci��n b��sica</dt>
-<dd>Esta secci��n muestra la distribuci��n del sistema operativo de host, la versi��n y el nombre de c��digo, as�� como el tipo de procesador y la cantidad de memoria en GB.</dd>
-</dlentry><dlentry>
-<dt>Estad��sticas del sistema</dt>
-<dd>Esta secci��n muestra gr��ficos para mostrar estad��sticas para CPU, memoria, E/S de disco y E/S de red para el host. Seleccione <uicontrol>Recoger datos despu��s de salir de esta p��gina</uicontrol> para continuar la recogida de datos cuando la pesta��a principal ya no est�� a la vista.</dd>
-</dlentry><dlentry>
-<dt>Actualizaciones de software</dt>
-<dd>En esta secci��n se muestra informaci��n para todos los paquetes que tienen actualizaciones disponibles, incluido el nombre de paquete, versi��n, arquitectura y repositorio. Puede actualizar todos los paquetes listados seleccionando <uicontrol>Actualizar todo</uicontrol>. No puede seleccionar paquetes individuales para las actualizaciones.</dd>
-</dlentry><dlentry>
-<dt>Repositorios</dt>
-<dd>En esta secci��n se muestran los repositorios que est��n asociados con el sistema host. Puede a��adir, habilitar, editar o eliminar repositorios. A��adir un repositorio lo asocia con el sistema host mientras que habilitar un repositorio permite que el host acceda a ��l. Si el sistema es Red Hat Enterprise
-Linux o Fedora, puede a��adir repositorios <filepath>yum</filepath>.
-Si el sistema es Ubuntu o Debian, a��ada repositorios <filepath>deb</filepath>.<p>Si est�� trabajando con repositorios yum, puede a��adir una comprobaci��n GPG para verificar que un paquete de este repositorio no ha resultado da��ado.
-Seleccione un repositorio y, a continuaci��n, <uicontrol>Editar</uicontrol>. Seleccione <uicontrol>S��</uicontrol> para habilitar la comprobaci��n GPG y, a continuaci��n, especifique un URL al archivo de claves GPG para el repositorio.</p></dd>
-</dlentry><dlentry>
-<dt>Informes de depuraci��n</dt>
-<dd>En esta secci��n se muestran informes de depuraci��n, incluido el nombre y la ruta de archivo.
-Puede seleccionar entre opciones para generar un informe nuevo, o bien redenominar, eliminar o descargar un informe existente.<p>El informe de depuraci��n se genera utilizando el mandato <cmdname>sosreport</cmdname>. Est�� disponible para distribuciones de Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora y Ubuntu. El mandato genera un archivo .tar que contiene la informaci��n de configuraci��n y de diagn��stico, como la versi��n de kernel en ejecuci��n, los m��dulos de carga y los archivos de configuraci��n del sistema y servicio.
-El mandato tambi��n ejecuta programas externos para recopilar informaci��n adicional y almacena esta salida en el archivo resultante.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/fr_FR/host.dita b/plugins/kimchi/ui/pages/help/fr_FR/host.dita
deleted file mode 100644
index f4c330b..0000000
--- a/plugins/kimchi/ui/pages/help/fr_FR/host.dita
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="fr-fr">
-<title>H��te</title>
-<shortdesc>La page <wintitle>H��te</wintitle> affiche des informations
-sur le syst��me h��te et vous permet d'arr��ter, de red��marrer et de vous
-connecter �� l'h��te.</shortdesc>
-<csbody>
-<p>Vous pouvez effectuer les actions suivantes sur l'h��te :<ul>
-<li>S��lectionnez <uicontrol>Arr��ter</uicontrol> pour arr��ter le syst��me h��te.</li>
-<li>S��lectionnez <uicontrol>Red��marrer</uicontrol> pour red��marrer le syst��me h��te.</li>
-<li>S��lectionnez <uicontrol>Connexion</uicontrol> pour ouvrir une connexion VNC
-au syst��me h��te, si celui-ci n'est pas d��j�� connect��.</li>
-</ul></p>
-<p>Cliquez sur les sections suivantes pour afficher des informations sur l'h��te :<dl>
-<dlentry>
-<dt>Informations de base</dt>
-<dd>Cette section affiche la distribution, la version et le nom de code
-du syst��me d'exploitation h��te, ainsi que le type de processeur et la quantit��
-de m��moire en Go.</dd>
-</dlentry><dlentry>
-<dt>Statistiques syst��me</dt>
-<dd>Cette section affiche les graphiques des statistiques pour l'UC, m��moire, ainsi que
-les E-S disque et E-S r��seau pour l'h��te. S��lectionnez <uicontrol>Collecte des donn��es une fois la page quitt��e</uicontrol>
-pour continuer la collecte de donn��es lorsque l'onglet h��te n'est plus visible.</dd>
-</dlentry><dlentry>
-<dt>Mises �� jour logicielles</dt>
-<dd>Cette section affiche des informations pour tous les modules qui
-disposent de mises �� jour disponibles, y compris le nom de module, la version, l'architecture
-et le r��f��rentiel. Vous pouvez mettre �� jour toutes les modules r��pertori��s en s��lectionnant <uicontrol>Tout
-mettre �� jour</uicontrol>. Vous ne pouvez pas s��lectionner des modules individuels pour les mises �� jour.</dd>
-</dlentry><dlentry>
-<dt>R��f��rentiels</dt>
-<dd>Cette section affiche les r��f��rentiels associ��s au syst��me h��te. Vous pouvez ajouter, activer, ��diter ou retirer des r��f��rentiels. L'ajout d'un r��f��rentiel associe celui-ci au syst��me h��te,
-tandis que l'activation d'un r��f��rentiel permet �� l'h��te d'y acc��der. Si votre syst��me est Red Hat Enterprise Linux ou Fedora,
-vous pouvez ajouter des r��f��rentiels <filepath>yum</filepath>.
-Si votre syst��me est de type Ubuntu ou Debian, ajoutez des r��f��rentiels
-<filepath>deb</filepath>.<p>Si vous travaillez avec des r��f��rentiels yum, vous pouvez ajouter un contr��le GPG
-afin de v��rifier qu'un module provenant de ce r��f��rentiel n'a pas ��t�� endommag��.
-S��lectionnez un r��f��rentiel puis cliquez sur <uicontrol>Editer</uicontrol>. S��lectionnez <uicontrol>Oui</uicontrol> pour activer le contr��le GPG,
-puis entrez une URL pour le fichier de cl��s GPG du r��f��rentiel.</p></dd>
-</dlentry><dlentry>
-<dt>Rapports de d��bogage</dt>
-<dd>Cette section affiche les rapports de d��bogage, y compris le nom et le chemin du fichier.
-Vous pouvez faire un choix parmi les options afin de g��n��rer un nouveau rapport, ou renommer, supprimer,
-ou t��l��charger un rapport existant.<p>Le rapport de d��bogage est g��n��r�� ��
-l'aide de la commande <cmdname>sosreport</cmdname>. Cette option est disponible pour les distributions
-Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora et Ubuntu. La commande g��n��re un fichier .tar contenant la configuration et des informations de diagnostic,
-telles que la version du noyau d'ex��cution, les modules charg��s, ainsi que les fichiers de configuration
-du syst��me et de la maintenance.
-La commande ex��cute ��galement des programmes externes pour collecter des informations
-suppl��mentaires et stocke cette sortie dans l'archive r��sultante.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/it_IT/host.dita b/plugins/kimchi/ui/pages/help/it_IT/host.dita
deleted file mode 100644
index 63d3367..0000000
--- a/plugins/kimchi/ui/pages/help/it_IT/host.dita
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="it-it">
-<title>Host</title>
-<shortdesc>La pagina <wintitle>Host</wintitle> visualizza le informazioni sul sistema host e consente di arrestarlo, riavviarlo e connettersi ad esso.</shortdesc>
-<csbody>
-<p>�� possibile effettuare le seguenti operazioni sull'host:<ul>
-<li>Selezionare <uicontrol>Arresta</uicontrol> per arrestare il sistema host.</li>
-<li>Selezionare <uicontrol>Riavvia</uicontrol> per riavviare il sistema host.</li>
-<li>Selezionare <uicontrol>Connetti</uicontrol> per aprire una connessione VNC al sistema host, se non �� gi�� connesso.</li>
-</ul></p>
-<p>Fare clic sulle seguenti sezioni per visualizzare le informazioni sull'host:<dl>
-<dlentry>
-<dt>Informazioni di base</dt>
-<dd>Questa sezione visualizza il nome codice, la versione e la distribuzione del sistema operativo, come pure il tipo di processore e la quantit�� di memoria in GB.</dd>
-</dlentry><dlentry>
-<dt>Statistiche di sistema</dt>
-<dd>Questa sezione visualizza i grafici che mostrano le statistiche per la CPU, la memoria, l'I/O disco e di rete per l'host. Selezionare <uicontrol>Raccolta dati all'uscita dalla pagina</uicontrol> per continuare la raccolta dei dati quando la scheda host non �� pi�� visibile.</dd>
-</dlentry><dlentry>
-<dt>Aggiornamenti del software</dt>
-<dd>Questa sezione visualizza le informazioni per tutti i pacchetti per cui sono disponibili gli aggiornamenti, incluso il nome, la versione, l'architettura e il repository del pacchetto. �� possibile aggiornare tutti i pacchetti elencati, selezionando <uicontrol>Aggiorna tutto</uicontrol>. Non �� possibile selezionare singoli pacchetti per gli aggiornamenti.</dd>
-</dlentry><dlentry>
-<dt>Repository</dt>
-<dd>Questa sezione visualizza i repository associati al sistema host. �� possibile aggiungere, abilitare, modificare o rimuovere i repository. L'aggiunta di un repository lo associa al sistema host, mentre l'abilitazione di un repository
-consente all'host di accedervi. Se il sistema �� Red Hat Enterprise
-Linux o Fedora, �� possibile aggiungere i repository <filepath>yum</filepath>.
-Se il sistema �� Ubuntu o Debian, aggiungere i repository <filepath>deb</filepath>.<p>Se si stanno utilizzando i repository yum, �� possibile aggiungere un controllo GPG per verificare che un pacchetto da questo repository non sia stato corrotto.
-Selezionare un repository, quindi <uicontrol>Modifica</uicontrol>. Selezionare <uicontrol>S��</uicontrol> per abilitare il controllo GPG, quindi immettere un URL al file di chiavi GPG per il
-repository.</p></dd>
-</dlentry><dlentry>
-<dt>Report di debug</dt>
-<dd>Questa sezione visualizza i report di debug, incluso il nome e il percorso file.
-Le opzioni disponibili consentono di generare un nuovo report oppure ridenominare, rimuovere o scaricare un report esistente.<p>Il report di debug viene generato utilizzando il comando <cmdname>sosreport</cmdname>. �� disponibile per le distribuzioni Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora e Ubuntu. Il comando genera un file .tar che contiene informazioni di diagnostica e configurazione, come la versione del kernel in esecuzione, i moduli caricati e i file di configurazione del servizio e del sistema.
-Il comando esegue anche programmi esterni per raccogliere ulteriori informazioni e memorizza l'output nell'archivio risultante.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/ja_JP/host.dita b/plugins/kimchi/ui/pages/help/ja_JP/host.dita
deleted file mode 100644
index 3a0141c..0000000
--- a/plugins/kimchi/ui/pages/help/ja_JP/host.dita
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="ja-jp">
-<title>���������</title>
-<shortdesc><wintitle>���������������</wintitle>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
-</shortdesc>
-<csbody>
-<p>���������������������������������������������������������������������
-<ul>
-<li>������������������������������������������������������������<uicontrol>���������������������������</uicontrol>���������������������
-</li>
-<li>������������������������������������������������<uicontrol>���������������</uicontrol>���������������������
-</li>
-<li>������������������������������ VNC ��������� (���������������������������������������) ���������������������������<uicontrol>������������</uicontrol>���������������������
-</li>
-</ul></p>
-<p>������������������������������������������������������������������������������������������������������������
-<dl>
-<dlentry>
-<dt>������������</dt>
-<dd>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ (GB ������) ������������������������
-</dd>
-</dlentry><dlentry>
-<dt>������������������������</dt>
-<dd>������������������������������������������ CPU���������������������������������������������������������������������������������������������������������������������������������������
-���������������������������������������������������������������������������������<uicontrol>���������������������������������������������������������������</uicontrol>������������������������������
-</dd>
-</dlentry><dlentry>
-<dt>������������������������</dt>
-<dd>���������������������������������������������������������������������������������������������
-(������������������������������������������������������������������������������������������) ������������������������
-<uicontrol>���������������������</uicontrol>���������������������������������������������������������������������������������������������
-���������������������������������������������������������������������������������������������
-</dd>
-</dlentry><dlentry>
-<dt>������������������</dt>
-<dd>������������������������������������������������������������������������������������������������������������������������������
-������������������������������������������������������������������������������������������������������������������
-������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
-��������������� Red Hat Enterprise Linux ��������� Fedora ���������������<filepath>yum</filepath> ������������������������������������������
-��������������� Ubuntu ��������� Debian ���������������<filepath>deb</filepath> ������������������������������������������������
-<p>yum ������������������������������������������������������������������������������������������������������������������������������������������������������������GPG ������������������������������������
-���������������������������������<uicontrol>������������</uicontrol>������������������������������������
-<uicontrol>������������</uicontrol>��������������� GPG ������������������������������������������������������������������ GPG ������������������ URL ������������������������������
-</p></dd>
-</dlentry><dlentry>
-<dt>���������������������������</dt>
-<dd>��������������������������������������������������������� (������������������������������������) ������������������������
-������������������������������������������������������������������������������������������������������������������������������������������������������������������
-<p>���������������������������������<cmdname>sosreport</cmdname> ������������������������������������
-������������Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>���Fedora������������ Ubuntu ���������������������������������������������������������������
-��������������������������������������������������� (������������������������������������������������������������������������������������������������������������������������������������������������) ������������ .tar ���������������������������������
-������������������������������������������������������������������������������������������������������������������������������������������������������������
-</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 227 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 1 -->
diff --git a/plugins/kimchi/ui/pages/help/ko_KR/host.dita b/plugins/kimchi/ui/pages/help/ko_KR/host.dita
deleted file mode 100644
index ee4a9c3..0000000
--- a/plugins/kimchi/ui/pages/help/ko_KR/host.dita
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="ko-kr">
-<title>���������</title>
-<shortdesc><wintitle>���������</wintitle> ��������������� ��������� ������������ ������ ��������� ������������ ��� ������������ ������������ ������������ ������ ��� ������ ��������������� ������������ ��������� ��� ������������.</shortdesc>
-<csbody>
-<p>������������ ������ ������ ��������� ��������� ��� ������������.<ul>
-<li>��������� ������������ ��������������� <uicontrol>��������� ������</uicontrol>��� ���������������.</li>
-<li>��������� ������������ ������ ��������������� <uicontrol>������ ������</uicontrol>��� ���������������.</li>
-<li>������ ������������ ������ ������ ������, ��������� ������������ ������ VNC ��������� ��������������� <uicontrol>������</uicontrol>��� ���������������.</li>
-</ul></p>
-<p>������������ ������ ��������� ��������������� ������ ��������� ������������������.<dl>
-<dlentry>
-<dt>������ ������</dt>
-<dd>��� ������������ ��������� ������ ������ ������, ������, ������ ������, ������������ ������, ��������� ������(GB) ������ ���������������.</dd>
-</dlentry><dlentry>
-<dt>��������� ������</dt>
-<dd>��� ������������ ������������ CPU, ���������, ��������� I/O, ������������ I/O��� ������ ��������� ������������ ������������ ���������������. ��������� ������ ��������� ��� ��������� ��������� ��������������� <uicontrol>��� ������������ ������ ������ ��������� ������</uicontrol>��� ���������������.</dd>
-</dlentry><dlentry>
-<dt>��������������� ������������</dt>
-<dd>��� ������������ ��������� ������, ������, ������������, ������������ ������������ ������ ��������� ��������������� ������ ������ ������������ ������ ��������� ���������������. <uicontrol>������ ������������</uicontrol>��� ������������ ��������� ������ ������������ ��������������� ��� ������������. ��������������� ������ ������ ������������ ��������� ������ ������������.</dd>
-</dlentry><dlentry>
-<dt>���������</dt>
-<dd>��� ������������ ��������� ������������ ��������� ������������ ���������������. ������������ ���������������, ������������ ���������������, ���������������, ��������� ��� ������������. ������������ ������������ ������������ ��������� ������������ ������������, ������������ ������������ ������������ ������������ ������������ ������������ ��� ������������. ������ ������������ Red Hat Enterprise Linux ������ Fedora��� ������, <filepath>yum</filepath> ������������ ��������� ��� ������������.
-������ ������������ Ubuntu ������ Debian��� ������, <filepath>deb</filepath> ������������ ������������������.<p>yum ������������ ������������ ������, GPG ��������� ������������ ��� ������������ ������������ ������������ ������������ ��������� ��� ������������.
-������������ ��������� ��� <uicontrol>������</uicontrol>��� ������������������. <uicontrol>���</uicontrol>��� ������������ GPG ��������� ������������ ��������� ��� ������������ ������ GPG ��� ��������� URL��� ������������������.</p></dd>
-</dlentry><dlentry>
-<dt>��������� ���������</dt>
-<dd>��� ������������ ������ ��� ������ ��������� ��������� ��������� ������������ ���������������.
-��� ��������� ������, ������ ��������� ������ ���������, ������, ������������ ������ ������ ��������� ��������� ��� ������������.<p>��������� ������������ <cmdname>sosreport</cmdname> ��������� ������������ ���������������. ������ Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora ��� Ubuntu ������������ ������ ���������������. ��� ��������� ������ ��� ������ ������(���: ������ ������ ������ ������, ��������� ������, ��������� ��� ��������� ������ ������)��� ������������ .tar ��������� ���������������.
-������ ��� ��������� ������ ��������������� ������������ ������ ��������� ������������ ������ ��������������� ��� ��������� ���������������.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/pt_BR/host.dita b/plugins/kimchi/ui/pages/help/pt_BR/host.dita
deleted file mode 100644
index 88f7eb2..0000000
--- a/plugins/kimchi/ui/pages/help/pt_BR/host.dita
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="pt-br">
-<title>Host</title>
-<shortdesc>A p��gina <wintitle>Host</wintitle> mostra informa����es sobre
-o sistema host e permite encerrar, reiniciar e conectar
-ao host.</shortdesc>
-<csbody>
-<p>�� poss��vel executar as a����es a segur no host:<ul>
-<li>Selecione <uicontrol>Encerrar</uicontrol> para encerrar o sistema
-host.</li>
-<li>Selecione <uicontrol>Reiniciar</uicontrol> para reiniciar o sistema host.</li>
-<li>Selecione <uicontrol>Conectar</uicontrol> para abrir uma conex��o VNC
-para o sistema host, se ele j�� n��o estiver conectado.</li>
-</ul></p>
-<p>Clique nas se����es a seguir para exibir informa����es sobre o host:<dl>
-<dlentry>
-<dt>Informa����es b��sicas</dt>
-<dd>Esta se����o exibe a distribui����o do sistema operacional do host,
-a vers��o e o nome do c��digo, bem como o tipo de processador e quantia de
-mem��ria em GB.</dd>
-</dlentry><dlentry>
-<dt>Estat��sticas do sistema</dt>
-<dd>Esta se����o exibe gr��ficos para mostrar estat��sticas para CPU, mem��ria,
-E/S de disco e E/S de rede para o host. Selecione <uicontrol>Coletando
-dados depois de sair desta p��gina</uicontrol> para continuar a coletar dados
-quando a guia do host estiver fora de visualiza����o.</dd>
-</dlentry><dlentry>
-<dt>Atualiza����es de software</dt>
-<dd>Esta se����o exibe informa����es de todos os pacotes que
-possuem atualiza����es dispon��veis, incluindo nome do pacote, vers��o, arquitetura
-e reposit��rio. �� poss��vel atualizar todos os pacotes listados selecionando <uicontrol>Atualizar
-todos</uicontrol>. N��o �� poss��vel selecionar pacotes individuais para atualiza����es.</dd>
-</dlentry><dlentry>
-<dt>Reposit��rios</dt>
-<dd>Esta se����o exibe reposit��rios que est��o associados ao
-sistema host. �� poss��vel incluir, ativar, editar ou remover reposit��rios. Incluir
-um reposit��rio o associa com o sistema host enquanto ativar um reposit��rio
-permite que o host o acesse. Se o seu sistema for Red Hat Enterprise
-Linux ou Fedora, ser�� poss��vel incluir reposit��rios <filepath>yum</filepath>.
-Se o seu sistema for Ubuntu ou Debian, inclua reposit��rios <filepath>deb</filepath>.<p>Se
-voc�� estiver trabalhando com reposit��rios yum, ser�� poss��vel incluir uma verifica����o de GPG para
-verificar se um pacote desse reposit��rio n��o foi corrompido.
-Selecione um reposit��rio e, em seguida, <uicontrol>Editar</uicontrol>. Selecione <uicontrol>Sim</uicontrol> para
-ativar a Verifica����o de GPG e, em seguida, insira uma URL no arquivo-chave de GPG para o
-reposit��rio.</p></dd>
-</dlentry><dlentry>
-<dt>Relat��rios de depura����o</dt>
-<dd>Esta se����o exibe relat��rios de depura����o, incluindo nome e caminho do arquivo.
-�� poss��vel selecionar a partir das op����es para gerar um novo relat��rio ou renomear, remover
-ou fazer o download de um relat��rio existente.<p>O relat��rio de depura����o �� gerado usando
-o comando <cmdname>sosreport</cmdname>. Ele est�� dispon��vel para distribui����es
-Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora
-e Ubuntu. O comando gera um arquivo .tar que cont��m
-informa����es de configura����o e de diagn��stico, como vers��o do kernel
-em execu����o, m��dulos carregados e arquivos de configura����o de sistema e de servi��o.
-O comando tamb��m executa programas externos para coletar informa����es adicionais
-e armazena essa sa��da no archive resultante.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/ru_RU/host.dita b/plugins/kimchi/ui/pages/help/ru_RU/host.dita
deleted file mode 100644
index fb72c21..0000000
--- a/plugins/kimchi/ui/pages/help/ru_RU/host.dita
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="ru-ru">
-<title>��������</title>
-<shortdesc>���������������� <wintitle>��������</wintitle> �������������������� �������������������� �� �������������� ���������� �� ������������������ �������������������������� ��������, �������������������������� �������� �� ������������������������ �� ��������.</shortdesc>
-<csbody>
-<p>���� ���������� ���������� ������������������ ������������������ ����������������:<ul>
-<li><uicontrol>������������������ ������������</uicontrol> - �������������������� �������������� ����������.</li>
-<li><uicontrol>��������������������������</uicontrol> - �������������������������� �������������� ����������.</li>
-<li><uicontrol>������������������������</uicontrol> - �������������� �������������������� VNC �� ���������������� ����������, �������� ������ ������ ���� ����������������������.</li>
-</ul></p>
-<p>���������������� ���� ������������������ ���������������� ������ ������������������ �������������������� �� ����������:<dl>
-<dlentry>
-<dt>�������������� ��������������������</dt>
-<dd>�� �������� �������������� ������������������������ �������������� ������������������������ ��������������, ������ ������������ �� �������������� ������, �� ���������� ������ �������������������� �� ���������� ������������ �� ����.</dd>
-</dlentry><dlentry>
-<dt>������������������ ��������������������</dt>
-<dd>�� �������� �������������� ������������������������ ��������������, �������������������� ���������������������������� �������������������� �� ��������������������, ������������, ���������������� ����������-������������ �� �������������� ����������-������������ ������ ����������. ���������������� <uicontrol>�������� ������������ ���������� ���������������� �������� ����������������</uicontrol>, ���������� �������� ������������ ���������������������� ���������� ���������������� �������������� ��������.</dd>
-</dlentry><dlentry>
-<dt>�������������������� ������������������������ ����������������������</dt>
-<dd>�� �������� �������������� ������������������������ �������������������� ������ �������� ��������������, ������ �������������� ���������������� ��������������������, �������������� ������ ������������, ������������, ���������������������� �� ������������������. ���������� ���������������� ������ ������������ �� ������������ �������������� ���� <uicontrol>���������������� ������</uicontrol>. ������������������ ������������ ������ �������������������� �������������� ������������.</dd>
-</dlentry><dlentry>
-<dt>������������������</dt>
-<dd>�� �������� �������������� ������������������������ ������������������, ������������������ �� ���������������� ����������. ������������������ ���������� ������������������, ������������������������, ���������������� �� ��������������. ������ �������������������� ������������������ ���������������������� �� ���������������� ����������, ������ ������������������ ������������������ �������������������� ������������������ ������ ����������. �������� �������������� - Red Hat Enterprise Linux ������ Fedora, ���������� ���������������� ������������������ <filepath>yum</filepath>.
-�������� �������������� - Ubuntu ������ Debian, ���������������� ������������������ <filepath>deb</filepath>.<p>������ ������������ �� ���������������������� yum ���������� ���������������� ���������������� GPG ������ ���������������� ���������������������� �������������� ���� �������������� ������������������.
-���������������� ������������������ �� ���������������� ���� <uicontrol>����������������</uicontrol>. ���������������� <uicontrol>����</uicontrol>, ���������� ���������������� ���������������� GPG, �� �������������� URL ���������� ������������ GPG ������ ������������������.</p></dd>
-</dlentry><dlentry>
-<dt>�������������������� ������������</dt>
-<dd>�� �������� �������������� ������������������������ �������������������� ������������, �������������� ������ �� ��������.
-���������������� �������������� ������ ����������������, ����������������������������, ���������������� �� ���������������� ��������������.<p>�������������������� ���������� ������������������ ���������������� <cmdname>sosreport</cmdname>. ���� ���������������� ������ Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora �� Ubuntu. �������������� �������������� �������� .tar �� �������������������������������� �� ������������������������������ ����������������������, ���������� ������ ������������ ��������, ���������������������� ������������ �� ���������� ������������������������ �������������� �� ����������.
-�������������� ���������� ������������������ �������������� ������������������ ������ ���������� ���������������������������� �������������������� �� ������������������ ���� ���������� �� ���������������������������� ������������.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/zh_CN/host.dita b/plugins/kimchi/ui/pages/help/zh_CN/host.dita
deleted file mode 100644
index 78a89c3..0000000
--- a/plugins/kimchi/ui/pages/help/zh_CN/host.dita
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="zh-cn">
-<title>������</title>
-<shortdesc>���<wintitle>������</wintitle>������������������������������������������������������������������������������������������������������</shortdesc>
-<csbody>
-<p>���������������������������������<ul>
-<li>������<uicontrol>������</uicontrol>������������������������</li>
-<li>������<uicontrol>������������</uicontrol>������������������������������</li>
-<li>������<uicontrol>������</uicontrol>��������������������������� VNC ���������������������������������</li>
-</ul></p>
-<p>���������������������������������������������������<dl>
-<dlentry>
-<dt>������������</dt>
-<dd>��������������������������������������������������������������������������������������������������������� GB ���������</dd>
-</dlentry><dlentry>
-<dt>������������������</dt>
-<dd>��������������������������������������������� CPU������������������ I/O ��������� I/O ������������������������<uicontrol>���������������������������������</uicontrol>������������������������������������������������������������</dd>
-</dlentry><dlentry>
-<dt>������������</dt>
-<dd>���������������������������������������������������������������������������������������������������������������������������������������������<uicontrol>������������</uicontrol>���������������������������������������������������������������������������������</dd>
-</dlentry><dlentry>
-<dt>���������</dt>
-<dd>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Red Hat Enterprise Linux ��� Fedora������������������ <filepath>yum</filepath> ��������������������������������� Ubuntu ��� Debian������������������ <filepath>deb</filepath> ������������<p>��������������� Yum ��������������������������� GPG ������������������������������������������������������������������������������������������������<uicontrol>������</uicontrol>���������<uicontrol>���</uicontrol>��������� GPG ��������������������������������� GPG ��������������� URL���</p></dd>
-</dlentry><dlentry>
-<dt>������������</dt>
-<dd>���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<p>���������������������
-<cmdname>sosreport</cmdname> ��������������������������������� Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>���Fedora ��� Ubuntu ������������������������������������������������������������ .tar ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/zh_TW/host.dita b/plugins/kimchi/ui/pages/help/zh_TW/host.dita
deleted file mode 100644
index a55aae4..0000000
--- a/plugins/kimchi/ui/pages/help/zh_TW/host.dita
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="zh-tw">
-<title>������</title>
-<shortdesc>���<wintitle>������</wintitle>���������������������������������������������������������������������������������������������������������</shortdesc>
-<csbody>
-<p>������������������������������������������<ul>
-<li>������<uicontrol>������</uicontrol>������������������������</li>
-<li>������<uicontrol>������������</uicontrol>������������������������������</li>
-<li>������<uicontrol>������</uicontrol>��������������������������� VNC ������������������������������������������������</li>
-</ul></p>
-<p>������������������������������������������������������<dl>
-<dlentry>
-<dt>������������</dt>
-<dd>������������������������������������������������������������������������������������������������������������������ (GB)���</dd>
-</dlentry><dlentry>
-<dt>������������������</dt>
-<dd>��������������������������������������������������� CPU��������������������� I/O ��������� I/O ������������������������<uicontrol>���������������������������������</uicontrol>���������������������������������������������������������������</dd>
-</dlentry><dlentry>
-<dt>������������</dt>
-<dd>���������������������������������������������������������������������������������������������������������������������������������������������<uicontrol>������������</uicontrol>���������������������������������������������������������������������������</dd>
-</dlentry><dlentry>
-<dt>���������</dt>
-<dd>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
-Red Hat Enterprise Linux ��� Fedora������������������ <filepath>yum</filepath> ���������������������������������
-Ubuntu ��� Debian������������������ <filepath>deb</filepath> ������������<p>���������������������
-yum ��������������������������� GPG ���������������������������������������������������������������������������������������������<uicontrol>������</uicontrol>���������<uicontrol>���</uicontrol>���������
-GPG ��������������������������������� GPG ������������ URL���</p></dd>
-</dlentry><dlentry>
-<dt>������������</dt>
-<dd>���������������������������������������������������������������������������������������������������������������������������������������������������������<p>���������������������
-<cmdname>sosreport</cmdname> ������������������������������������ Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>���Fedora
-��� Ubuntu ��������������������������������� .tar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/tests/Makefile.am | 49 +++++
plugins/gingerbase/tests/run_tests.sh.in | 55 ++++++
plugins/gingerbase/tests/test_config.py.in | 154 ++++++++++++++++
plugins/gingerbase/tests/test_host.py | 152 ++++++++++++++++
plugins/gingerbase/tests/test_model.py | 280 +++++++++++++++++++++++++++++
plugins/gingerbase/tests/utils.py | 261 +++++++++++++++++++++++++++
6 files changed, 951 insertions(+)
create mode 100644 plugins/gingerbase/tests/Makefile.am
create mode 100644 plugins/gingerbase/tests/run_tests.sh.in
create mode 100644 plugins/gingerbase/tests/test_config.py.in
create mode 100644 plugins/gingerbase/tests/test_host.py
create mode 100644 plugins/gingerbase/tests/test_model.py
create mode 100644 plugins/gingerbase/tests/utils.py
diff --git a/plugins/gingerbase/tests/Makefile.am b/plugins/gingerbase/tests/Makefile.am
new file mode 100644
index 0000000..477df12
--- /dev/null
+++ b/plugins/gingerbase/tests/Makefile.am
@@ -0,0 +1,49 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+EXTRA_DIST = \
+ Makefile.am \
+ run_tests.sh.in \
+ test_config.py.in \
+ $(filter-out test_config.py, $(wildcard *.py)) \
+ $(NULL)
+
+noinst_SCRIPTS = run_tests.sh
+
+do_substitution = \
+ sed -e 's,[@]HAVE_PYMOD_UNITTEST[@],$(HAVE_PYMOD_UNITTEST),g' \
+ -e 's,[@]prefix[@],$(prefix),g' \
+ -e 's,[@]datadir[@],$(datadir),g' \
+ -e 's,[@]PYTHON_VERSION[@],$(PYTHON_VERSION),g' \
+ -e 's,[@]wokdir[@],$(pythondir)/wok,g' \
+ -e 's,[@]pkgdatadir[@],$(pkgdatadir),g'
+
+
+run_tests.sh: run_tests.sh.in Makefile
+ $(do_substitution) < $(srcdir)/run_tests.sh.in > run_tests.sh
+ chmod +x run_tests.sh
+
+test_config.py: test_config.py.in Makefile
+ $(do_substitution) < $(srcdir)/test_config.py.in > test_config.py
+
+check-local:
+ ./run_tests.sh
+
+BUILT_SOURCES = test_config.py
+CLEANFILES = run_tests.sh test_config.py
diff --git a/plugins/gingerbase/tests/run_tests.sh.in b/plugins/gingerbase/tests/run_tests.sh.in
new file mode 100644
index 0000000..1a34418
--- /dev/null
+++ b/plugins/gingerbase/tests/run_tests.sh.in
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+HAVE_UNITTEST=@HAVE_PYMOD_UNITTEST@
+PYTHON_VER=@PYTHON_VERSION@
+
+if [ "$1" = "-v" ]; then
+ OPTS="-v"
+ shift
+else
+ OPTS=""
+fi
+
+if [ $# -ne 0 ]; then
+ ARGS="$@"
+else
+ ARGS=`find -name "test_*.py" | xargs -I @ basename @ .py`
+fi
+
+if [ "$HAVE_UNITTEST" != "yes" -o "$PYTHON_VER" == "2.6" ]; then
+ CMD="unit2"
+else
+ CMD="python -m unittest"
+fi
+
+LIST=($ARGS)
+MODEL_LIST=()
+MOCK_LIST=()
+for ((i=0;i<${#LIST[@]};i++)); do
+
+ if [[ ${LIST[$i]} == test_model* ]]; then
+ MODEL_LIST+=(${LIST[$i]})
+ else
+ MOCK_LIST+=(${LIST[$i]})
+ fi
+done
+
+PYTHONPATH=../plugins:../src:../ $CMD $OPTS ${MODEL_LIST[@]} ${MOCK_LIST[@]}
diff --git a/plugins/gingerbase/tests/test_config.py.in b/plugins/gingerbase/tests/test_config.py.in
new file mode 100644
index 0000000..434d60e
--- /dev/null
+++ b/plugins/gingerbase/tests/test_config.py.in
@@ -0,0 +1,154 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+from cherrypy.lib.reprconf import Parser
+from wok.config import Paths
+
+from wok.plugins.gingerbase.config import GingerBasePaths
+
+
+
+get_prefix = None
+
+
+def setUpModule():
+ global get_prefix
+ get_prefix = Paths.get_prefix
+
+
+def tearDownModule():
+ Paths.get_prefix = GingerBasePaths.get_prefix = get_prefix
+
+
+class ConfigTests(unittest.TestCase):
+ def assertInstalledPath(self, actual, expected):
+ if '@pkgdatadir@' != '/usr/share/gingerbase':
+ usr_local = '/usr/local'
+ if not expected.startswith('/usr'):
+ expected = usr_local + expected
+ self.assertEquals(actual, expected)
+
+ def test_installed_paths(self):
+ Paths.get_prefix = lambda self: '@datadir@/wok'
+ paths = Paths()
+ self.assertInstalledPath(paths.state_dir, '/var/lib/wok')
+ self.assertInstalledPath(paths.log_dir, '/var/log/wok')
+ self.assertInstalledPath(paths.conf_dir, '/etc/wok')
+ self.assertInstalledPath(paths.src_dir, '@wokdir@')
+ self.assertInstalledPath(paths.plugins_dir, '@wokdir@/plugins')
+ self.assertInstalledPath(paths.ui_dir, '@datadir@/wok/ui')
+ self.assertInstalledPath(paths.mo_dir, '@prefix@/share/locale')
+
+ def test_uninstalled_paths(self):
+ Paths.get_prefix = lambda self: '/home/user/wok'
+ paths = Paths()
+ self.assertEquals(paths.state_dir, '/home/user/wok/data')
+ self.assertEquals(paths.log_dir, '/home/user/wok/log')
+ self.assertEquals(paths.conf_dir, '/home/user/wok/src')
+ self.assertEquals(paths.src_dir, '/home/user/wok/src/wok')
+ self.assertEquals(paths.plugins_dir, '/home/user/wok/plugins')
+ self.assertEquals(paths.ui_dir, '/home/user/wok/ui')
+ self.assertEquals(paths.mo_dir, '/home/user/wok/mo')
+
+ def test_installed_plugin_paths(self):
+ GingerBasePaths.get_prefix = lambda self: '@datadir@/wok'
+ paths = GingerBasePaths()
+ self.assertInstalledPath(paths.conf_dir, '/etc/wok/plugins.d')
+ self.assertInstalledPath(paths.conf_file,
+ '/etc/wok/plugins.d/gingerbase.conf')
+ self.assertInstalledPath(paths.src_dir, '@wokdir@/plugins/ginger-base')
+ self.assertInstalledPath(paths.ui_dir,
+ '@datadir@/wok/plugins/gingerbase/ui')
+ self.assertInstalledPath(paths.mo_dir, '@prefix@/share/locale')
+
+ def test_uninstalled_plugin_paths(self):
+ GingerBasePaths.get_prefix = lambda self: '/home/user/wok'
+ paths = GingerBasePaths()
+ self.assertEquals(paths.conf_dir, '/home/user/wok/plugins/gingerbase')
+ self.assertEquals(
+ paths.conf_file, '/home/user/wok/plugins/gingerbase/gingerbase.conf')
+ self.assertEquals(paths.src_dir, '/home/user/wok/plugins/gingerbase')
+ self.assertEquals(paths.ui_dir, '/home/user/wok/plugins/gingerbase/ui')
+ self.assertEquals(paths.mo_dir, '/home/user/wok/plugins/gingerbase/mo')
+
+ def test_kimchi_config(self):
+ Paths.get_prefix = GingerBasePaths.get_prefix = get_prefix
+ CACHEEXPIRES = 31536000
+ SESSIONSTIMEOUT = 10
+ configObj = {
+ '/': {
+ 'tools.trailing_slash.on': False,
+ 'request.methods_with_bodies': ('POST', 'PUT'),
+ 'tools.nocache.on': True,
+ 'tools.proxy.on': True,
+ 'tools.sessions.on': True,
+ 'tools.sessions.name': 'wok',
+ 'tools.sessions.secure': True,
+ 'tools.sessions.httponly': True,
+ 'tools.sessions.locking': 'explicit',
+ 'tools.sessions.storage_type': 'ram',
+ 'tools.sessions.timeout': SESSIONSTIMEOUT,
+ 'tools.wokauth.on': False
+ },
+ '/css': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/css' % GingerBasePaths().prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False
+ },
+ '/js': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/js' % GingerBasePaths().prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False
+ },
+ '/libs': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/libs' % GingerBasePaths().prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ },
+ '/images': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/images' % GingerBasePaths().prefix,
+ 'tools.nocache.on': False
+ },
+ '/favicon.ico': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename':
+ '%s/images/logo.ico' % GingerBasePaths().ui_dir
+ },
+ '/robots.txt': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/robots.txt' % GingerBasePaths().ui_dir
+ },
+ '/help': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/pages/help' % GingerBasePaths().prefix,
+ 'tools.staticdir.index': 'en_US/index.html',
+ 'tools.nocache.on': True
+ }
+ }
+
+ kimchi_config = Parser().dict_from_file(GingerBasePaths().conf_file)
+ self.assertEquals(kimchi_config, configObj)
diff --git a/plugins/gingerbase/tests/test_host.py b/plugins/gingerbase/tests/test_host.py
new file mode 100644
index 0000000..6816e90
--- /dev/null
+++ b/plugins/gingerbase/tests/test_host.py
@@ -0,0 +1,152 @@
+# -*- coding: utf-8 -*-
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import os
+import platform
+import psutil
+import tempfile
+import time
+import unittest
+from functools import partial
+
+from wok.plugins.gingerbase.mockmodel import MockModel
+from utils import get_free_port, patch_auth, request, run_server, wait_task
+
+
+test_server = None
+model = None
+host = None
+ssl_port = None
+tmpfile = None
+
+
+def setUpModule():
+ global test_server, model, host, ssl_port, tmpfile
+
+ patch_auth()
+ tmpfile = tempfile.mktemp()
+ model = MockModel(tmpfile)
+ host = '127.0.0.1'
+ port = get_free_port('http')
+ ssl_port = get_free_port('https')
+ cherrypy_port = get_free_port('cherrypy_port')
+ test_server = run_server(host, port, ssl_port, test_mode=True,
+ cherrypy_port=cherrypy_port, model=model)
+
+
+def tearDownModule():
+ test_server.stop()
+ os.unlink(tmpfile)
+
+
+class HostTests(unittest.TestCase):
+ def setUp(self):
+ self.request = partial(request, host, ssl_port)
+
+ def test_hostinfo(self):
+ resp = self.request('/plugins/gingerbase/host').read()
+ info = json.loads(resp)
+ keys = ['os_distro', 'os_version', 'os_codename', 'cpu_model',
+ 'memory', 'cpus']
+ self.assertEquals(sorted(keys), sorted(info.keys()))
+
+ distro, version, codename = platform.linux_distribution()
+ self.assertEquals(distro, info['os_distro'])
+ self.assertEquals(version, info['os_version'])
+ self.assertEquals(unicode(codename, "utf-8"), info['os_codename'])
+ self.assertEquals(psutil.TOTAL_PHYMEM, info['memory'])
+
+ def test_hoststats(self):
+ time.sleep(1)
+ stats_keys = ['cpu_utilization', 'memory', 'disk_read_rate',
+ 'disk_write_rate', 'net_recv_rate', 'net_sent_rate']
+ resp = self.request('/plugins/gingerbase/host/stats').read()
+ stats = json.loads(resp)
+ self.assertEquals(sorted(stats_keys), sorted(stats.keys()))
+
+ cpu_utilization = stats['cpu_utilization']
+ self.assertIsInstance(cpu_utilization, float)
+ self.assertGreaterEqual(cpu_utilization, 0.0)
+ self.assertTrue(cpu_utilization <= 100.0)
+
+ memory_stats = stats['memory']
+ self.assertIn('total', memory_stats)
+ self.assertIn('free', memory_stats)
+ self.assertIn('cached', memory_stats)
+ self.assertIn('buffers', memory_stats)
+ self.assertIn('avail', memory_stats)
+
+ resp = self.request('/plugins/gingerbase/host/stats/history').read()
+ history = json.loads(resp)
+ self.assertEquals(sorted(stats_keys), sorted(history.keys()))
+
+ def test_host_actions(self):
+ def _task_lookup(taskid):
+ return json.loads(self.request('/plugins/gingerbase/tasks/%s' %
+ taskid).read())
+
+ resp = self.request('/plugins/gingerbase/host/shutdown', '{}', 'POST')
+ self.assertEquals(200, resp.status)
+ resp = self.request('/plugins/gingerbase/host/reboot', '{}', 'POST')
+ self.assertEquals(200, resp.status)
+
+ # Test system update
+ resp = self.request('/plugins/gingerbase/host/packagesupdate', None, 'GET')
+ pkgs = json.loads(resp.read())
+ self.assertEquals(3, len(pkgs))
+
+ pkg_keys = ['package_name', 'repository', 'arch', 'version']
+ for p in pkgs:
+ name = p['package_name']
+ resp = self.request('/plugins/gingerbase/host/packagesupdate/' + name,
+ None, 'GET')
+ info = json.loads(resp.read())
+ self.assertEquals(sorted(pkg_keys), sorted(info.keys()))
+
+ resp = self.request('/plugins/gingerbase/host/swupdate', '{}', 'POST')
+ task = json.loads(resp.read())
+ task_params = [u'id', u'message', u'status', u'target_uri']
+ self.assertEquals(sorted(task_params), sorted(task.keys()))
+
+ resp = self.request('/tasks/' + task[u'id'], None, 'GET')
+ task_info = json.loads(resp.read())
+ self.assertEquals(task_info['status'], 'running')
+ wait_task(_task_lookup, task_info['id'])
+ resp = self.request('/tasks/' + task[u'id'], None, 'GET')
+ task_info = json.loads(resp.read())
+ self.assertEquals(task_info['status'], 'finished')
+ self.assertIn(u'All packages updated', task_info['message'])
+ pkgs = model.packagesupdate_get_list()
+ self.assertEquals(0, len(pkgs))
+
+ def test_host_partitions(self):
+ resp = self.request('/plugins/gingerbase/host/partitions')
+ self.assertEquals(200, resp.status)
+ partitions = json.loads(resp.read())
+
+ keys = ['name', 'path', 'type', 'fstype', 'size', 'mountpoint',
+ 'available']
+ for item in partitions:
+ resp = self.request('/plugins/gingerbase/host/partitions/%s' %
+ item['name'])
+ info = json.loads(resp.read())
+ self.assertEquals(sorted(info.keys()), sorted(keys))
+
diff --git a/plugins/gingerbase/tests/test_model.py b/plugins/gingerbase/tests/test_model.py
new file mode 100644
index 0000000..18199e2
--- /dev/null
+++ b/plugins/gingerbase/tests/test_model.py
@@ -0,0 +1,280 @@
+# -*- coding: utf-8 -*-
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+import shutil
+import unittest
+
+import wok.objectstore
+from wok.basemodel import Singleton
+from wok.exception import InvalidParameter, NotFoundError, OperationFailed
+from wok.rollbackcontext import RollbackContext
+from wok.plugins.gingerbase.model import model
+
+# import iso_gen
+# import utils
+
+
+invalid_repository_urls = ['www.fedora.org', # missing protocol
+ '://www.fedora.org', # missing protocol
+ 'http://www.fedora', # invalid domain name
+ 'file:///home/foobar'] # invalid path
+
+TMP_DIR = '/var/lib/kimchi/tests/'
+# UBUNTU_ISO = TMP_DIR + 'ubuntu14.04.iso'
+
+
+def setUpModule():
+ if not os.path.exists(TMP_DIR):
+ os.makedirs(TMP_DIR)
+
+ # iso_gen.construct_fake_iso(UBUNTU_ISO, True, '14.04', 'ubuntu')
+
+ # Some FeatureTests functions depend on server to validate their result.
+ # As CapabilitiesModel is a Singleton class it will get the first result
+ # from FeatureTests which may be wrong when using the Model instance
+ # directly - the case of this test_model.py
+ # So clean Singleton instances to make sure to get the right result when
+ # running the following tests.
+ Singleton._instances = {}
+
+
+def tearDownModule():
+ shutil.rmtree(TMP_DIR)
+
+
+class ModelTests(unittest.TestCase):
+ def setUp(self):
+ self.tmp_store = '/tmp/kimchi-store-test'
+
+ def tearDown(self):
+ # FIXME: Tests using 'test:///default' URI should be moved to
+ # test_rest or test_mockmodel to avoid overriding problems
+ # LibvirtConnection._connections['test:///default'] = {}
+
+ os.unlink(self.tmp_store)
+
+ def test_repository_create(self):
+ inst = model.Model(objstore_loc=self.tmp_store)
+
+ yum_repos = [{'repo_id': 'fedora-fake',
+ 'baseurl': 'http://www.fedora.org'},
+ {'repo_id': 'fedora-updates-fake',
+ 'config':
+ {'mirrorlist': 'http://www.fedoraproject.org'}}]
+
+ deb_repos = [{'baseurl': 'http://archive.ubuntu.com/ubuntu/',
+ 'config': {'dist': 'quantal'}},
+ {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
+ 'config': {'dist': 'quantal', 'comps': ['main']}}]
+
+ yum_invalid_repos = []
+ deb_invalid_repos = []
+
+ for url in invalid_repository_urls:
+ wrong_baseurl = {'repo_id': 'wrong-id', 'baseurl': url}
+ wrong_mirrorlist = {'repo_id': 'wrong-id',
+ 'baseurl': 'www.example.com',
+ 'config': {'mirrorlist': url}}
+ wrong_config_item = {
+ 'repo_id': 'wrong-id',
+ 'baseurl': 'www.example.com',
+ 'config': {
+ 'gpgkey': 'file:///tmp/KEY-fedora-updates-fake-19'}}
+
+ yum_invalid_repos.append(wrong_baseurl)
+ yum_invalid_repos.append(wrong_mirrorlist)
+ yum_invalid_repos.append(wrong_config_item)
+
+ wrong_baseurl['config'] = {'dist': 'tasty'}
+ wrong_config = {'baseurl': deb_repos[0]['baseurl'],
+ 'config': {
+ 'unsupported_item': "a_unsupported_item"}}
+ deb_invalid_repos.append(wrong_baseurl)
+ deb_invalid_repos.append(wrong_config)
+
+ repo_type = inst.capabilities_lookup()['repo_mngt_tool']
+ if repo_type == 'yum':
+ test_repos = yum_repos
+ invalid_repos = yum_invalid_repos
+ elif repo_type == 'deb':
+ test_repos = deb_repos
+ invalid_repos = deb_invalid_repos
+ else:
+ # repository management tool was not recognized by Ginger Base
+ # skip test case
+ return
+
+ # create repositories with invalid data
+ for repo in invalid_repos:
+ self.assertRaises(InvalidParameter, inst.repositories_create, repo)
+
+ for repo in test_repos:
+ system_host_repos = len(inst.repositories_get_list())
+ repo_id = inst.repositories_create(repo)
+ host_repos = inst.repositories_get_list()
+ self.assertEquals(system_host_repos + 1, len(host_repos))
+
+ repo_info = inst.repository_lookup(repo_id)
+ self.assertEquals(repo_id, repo_info['repo_id'])
+ self.assertEquals(True, repo_info.get('enabled'))
+ self.assertEquals(repo.get('baseurl', ''),
+ repo_info.get('baseurl'))
+
+ original_config = repo.get('config', {})
+ config_info = repo_info.get('config', {})
+
+ if repo_type == 'yum':
+ self.assertEquals(original_config.get('mirrorlist', ''),
+ config_info.get('mirrorlist', ''))
+ self.assertEquals(True, config_info['gpgcheck'])
+ else:
+ self.assertEquals(original_config['dist'], config_info['dist'])
+ self.assertEquals(original_config.get('comps', []),
+ config_info.get('comps', []))
+
+ inst.repository_delete(repo_id)
+ self.assertRaises(NotFoundError, inst.repository_lookup, repo_id)
+
+ self.assertRaises(NotFoundError, inst.repository_lookup, 'google')
+
+ def test_repository_update(self):
+ inst = model.Model(objstore_loc=self.tmp_store)
+
+ yum_repo = {'repo_id': 'fedora-fake',
+ 'baseurl': 'http://www.fedora.org'}
+ yum_new_repo = {'baseurl': 'http://www.fedoraproject.org'}
+
+ deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
+ 'config': {'dist': 'quantal'}}
+ deb_new_repo = {'baseurl': 'http://br.archive.canonical.com/ubuntu/',
+ 'config': {'dist': 'utopic'}}
+
+ yum_invalid_repos = []
+ deb_invalid_repos = []
+
+ for url in invalid_repository_urls:
+ wrong_baseurl = {'baseurl': url}
+ wrong_mirrorlist = {'baseurl': 'www.example.com',
+ 'config': {'mirrorlist': url}}
+
+ yum_invalid_repos.append(wrong_baseurl)
+ yum_invalid_repos.append(wrong_mirrorlist)
+
+ wrong_baseurl['config'] = {'dist': 'tasty'}
+ deb_invalid_repos.append(wrong_baseurl)
+
+ repo_type = inst.capabilities_lookup()['repo_mngt_tool']
+ if repo_type == 'yum':
+ repo = yum_repo
+ new_repo = yum_new_repo
+ invalid_repos = yum_invalid_repos
+ elif repo_type == 'deb':
+ repo = deb_repo
+ new_repo = deb_new_repo
+ invalid_repos = deb_invalid_repos
+ else:
+ # repository management tool was not recognized by Ginger Base
+ # skip test case
+ return
+
+ system_host_repos = len(inst.repositories_get_list())
+
+ with RollbackContext() as rollback:
+ repo_id = inst.repositories_create(repo)
+ rollback.prependDefer(inst.repository_delete, repo_id)
+
+ host_repos = inst.repositories_get_list()
+ self.assertEquals(system_host_repos + 1, len(host_repos))
+
+ # update repositories with invalid data
+ for tmp_repo in invalid_repos:
+ self.assertRaises(InvalidParameter, inst.repository_update,
+ repo_id, tmp_repo)
+
+ new_repo_id = inst.repository_update(repo_id, new_repo)
+ repo_info = inst.repository_lookup(new_repo_id)
+
+ self.assertEquals(new_repo_id, repo_info['repo_id'])
+ self.assertEquals(new_repo['baseurl'], repo_info['baseurl'])
+ self.assertEquals(True, repo_info['enabled'])
+ inst.repository_update(new_repo_id, repo)
+
+ def test_repository_disable_enable(self):
+ inst = model.Model(objstore_loc=self.tmp_store)
+
+ yum_repo = {'repo_id': 'fedora-fake',
+ 'baseurl': 'http://www.fedora.org'}
+ deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
+ 'config': {'dist': 'quantal'}}
+
+ repo_type = inst.capabilities_lookup()['repo_mngt_tool']
+ if repo_type == 'yum':
+ repo = yum_repo
+ elif repo_type == 'deb':
+ repo = deb_repo
+ else:
+ # repository management tool was not recognized by Ginger Base
+ # skip test case
+ return
+
+ system_host_repos = len(inst.repositories_get_list())
+
+ repo_id = inst.repositories_create(repo)
+
+ host_repos = inst.repositories_get_list()
+ self.assertEquals(system_host_repos + 1, len(host_repos))
+
+ repo_info = inst.repository_lookup(repo_id)
+ self.assertEquals(True, repo_info['enabled'])
+
+ inst.repository_disable(repo_id)
+ repo_info = inst.repository_lookup(repo_id)
+ self.assertEquals(False, repo_info['enabled'])
+
+ inst.repository_enable(repo_id)
+ repo_info = inst.repository_lookup(repo_id)
+ self.assertEquals(True, repo_info['enabled'])
+
+ # remove files creates
+ inst.repository_delete(repo_id)
+
+
+class BaseModelTests(unittest.TestCase):
+ class FoosModel(object):
+ def __init__(self):
+ self.data = {}
+
+ def create(self, params):
+ self.data.update(params)
+
+ def get_list(self):
+ return list(self.data)
+
+ class TestModel(wok.basemodel.BaseModel):
+ def __init__(self):
+ foo = BaseModelTests.FoosModel()
+ super(BaseModelTests.TestModel, self).__init__([foo])
+
+ def test_root_model(self):
+ t = BaseModelTests.TestModel()
+ t.foos_create({'item1': 10})
+ self.assertEquals(t.foos_get_list(), ['item1'])
+
diff --git a/plugins/gingerbase/tests/utils.py b/plugins/gingerbase/tests/utils.py
new file mode 100644
index 0000000..8517d7d
--- /dev/null
+++ b/plugins/gingerbase/tests/utils.py
@@ -0,0 +1,261 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+import base64
+import cherrypy
+import grp
+import httplib
+import inspect
+import json
+import os
+import socket
+import ssl
+import sys
+import threading
+import time
+import unittest
+from contextlib import closing
+from lxml import etree
+
+import wok.server
+from wok.config import config, PluginPaths
+from wok.auth import User, USER_NAME, USER_GROUPS, USER_ROLES, tabs
+from wok.exception import NotFoundError, OperationFailed
+from wok.utils import wok_log
+
+from wok.plugins.gingerbase import mockmodel
+
+
+_ports = {}
+
+# provide missing unittest decorators and API for python 2.6; these decorators
+# do not actually work, just avoid the syntax failure
+if sys.version_info[:2] == (2, 6):
+ def skipUnless(condition, reason):
+ if not condition:
+ sys.stderr.write('[expected failure] ')
+ raise Exception(reason)
+ return lambda obj: obj
+
+ unittest.skipUnless = skipUnless
+ unittest.expectedFailure = lambda obj: obj
+
+ def assertGreater(self, a, b, msg=None):
+ if not a > b:
+ self.fail('%s not greater than %s' % (repr(a), repr(b)))
+
+ def assertGreaterEqual(self, a, b, msg=None):
+ if not a >= b:
+ self.fail('%s not greater than or equal to %s'
+ % (repr(a), repr(b)))
+
+ def assertIsInstance(self, obj, cls, msg=None):
+ if not isinstance(obj, cls):
+ self.fail('%s is not an instance of %r' % (repr(obj), cls))
+
+ def assertIn(self, a, b, msg=None):
+ if a not in b:
+ self.fail("%s is not in %b" % (repr(a), repr(b)))
+
+ def assertNotIn(self, a, b, msg=None):
+ if a in b:
+ self.fail("%s is in %b" % (repr(a), repr(b)))
+
+ unittest.TestCase.assertGreaterEqual = assertGreaterEqual
+ unittest.TestCase.assertGreater = assertGreater
+ unittest.TestCase.assertIsInstance = assertIsInstance
+ unittest.TestCase.assertIn = assertIn
+ unittest.TestCase.assertNotIn = assertNotIn
+
+
+def get_free_port(name='http'):
+ global _ports
+ if _ports.get(name) is not None:
+ return _ports[name]
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ with closing(sock):
+ try:
+ sock.bind(("0.0.0.0", 0))
+ except:
+ raise Exception("Could not find a free port")
+ _ports[name] = sock.getsockname()[1]
+ return _ports[name]
+
+
+def run_server(host, port, ssl_port, test_mode, cherrypy_port=None,
+ model=None, environment='development'):
+
+ if cherrypy_port is None:
+ cherrypy_port = get_free_port('cherrypy_port')
+
+ if ssl_port is None:
+ ssl_port = get_free_port('https')
+
+ args = type('_', (object,),
+ {'host': host, 'port': port, 'ssl_port': ssl_port,
+ 'cherrypy_port': cherrypy_port, 'max_body_size': '4*1024',
+ 'ssl_cert': '', 'ssl_key': '',
+ 'test': test_mode, 'access_log': '/dev/null',
+ 'error_log': '/dev/null', 'environment': environment,
+ 'log_level': 'debug'})()
+ if model is not None:
+ setattr(args, 'model', model)
+
+ s = wok.server.Server(args)
+ t = threading.Thread(target=s.start)
+ t.setDaemon(True)
+ t.start()
+ cherrypy.engine.wait(cherrypy.engine.states.STARTED)
+ return s
+
+
+def silence_server():
+ """
+ Silence server status messages on stdout
+ """
+ cherrypy.config.update({"environment": "embedded"})
+
+
+def running_as_root():
+ return os.geteuid() == 0
+
+
+def _request(conn, path, data, method, headers):
+ if headers is None:
+ headers = {'Content-Type': 'application/json',
+ 'Accept': 'application/json'}
+ if 'AUTHORIZATION' not in headers.keys():
+ user, pw = mockmodel.fake_user.items()[0]
+ hdr = "Basic " + base64.b64encode("%s:%s" % (user, pw))
+ headers['AUTHORIZATION'] = hdr
+ conn.request(method, path, data, headers)
+ return conn.getresponse()
+
+
+def request(host, port, path, data=None, method='GET', headers=None):
+ # verify if HTTPSConnection has context parameter
+ if "context" in inspect.getargspec(httplib.HTTPSConnection.__init__).args:
+ context = ssl._create_unverified_context()
+ conn = httplib.HTTPSConnection(host, port, context=context)
+ else:
+ conn = httplib.HTTPSConnection(host, port)
+
+ return _request(conn, path, data, method, headers)
+
+
+def get_remote_iso_path():
+ """
+ Get a remote iso with the right arch from the distro files shipped
+ with kimchi.
+ """
+ host_arch = os.uname()[4]
+ remote_path = ''
+ with open(os.path.join(PluginPaths('kimchi').conf_dir, 'distros.d', 'fedora.json')) \
+ as fedora_isos:
+ # Get a list of dicts
+ json_isos_list = json.load(fedora_isos)
+ for iso in json_isos_list:
+ if (iso.get('os_arch')) == host_arch:
+ remote_path = iso.get('path')
+ break
+
+ return remote_path
+
+
+class FakeUser(User):
+ auth_type = "fake"
+ sudo = True
+
+ def __init__(self, username):
+ self.user = {}
+ self.user[USER_NAME] = username
+ self.user[USER_GROUPS] = None
+ self.user[USER_ROLES] = dict.fromkeys(tabs, 'user')
+
+ def get_groups(self):
+ return sorted([group.gr_name for group in grp.getgrall()])[0:3]
+
+ def get_roles(self):
+ if self.sudo:
+ self.user[USER_ROLES] = dict.fromkeys(tabs, 'admin')
+ return self.user[USER_ROLES]
+
+ def get_user(self):
+ return self.user
+
+ @staticmethod
+ def authenticate(username, password, service="passwd"):
+ try:
+ return mockmodel.fake_user[username] == password
+ except KeyError, e:
+ raise OperationFailed("GGBAUTH0001E", {'username': 'username',
+ 'code': e.message})
+
+
+def patch_auth(sudo=True):
+ """
+ Override the authenticate function with a simple test against an
+ internal dict of users and passwords.
+ """
+ config.set("authentication", "method", "fake")
+ FakeUser.sudo = sudo
+
+
+def normalize_xml(xml_str):
+ return etree.tostring(etree.fromstring(xml_str,
+ etree.XMLParser(remove_blank_text=True)))
+
+
+def wait_task(task_lookup, taskid, timeout=10):
+ for i in range(0, timeout):
+ task_info = task_lookup(taskid)
+ if task_info['status'] == "running":
+ wok_log.info("Waiting task %s, message: %s",
+ taskid, task_info['message'])
+ time.sleep(1)
+ else:
+ return
+ wok_log.error("Timeout while process long-run task, "
+ "try to increase timeout value.")
+
+
+# The action functions in model backend raise NotFoundError exception if the
+# element is not found. But in some tests, these functions are called after
+# the element has been deleted if test finishes correctly, then NofFoundError
+# exception is raised and rollback breaks. To avoid it, this wrapper ignores
+# the NotFoundError.
+def rollback_wrapper(func, resource, *args):
+ try:
+ func(resource, *args)
+ except NotFoundError:
+ # VM has been deleted already
+ return
+
+
+# This function is used to test storage volume upload.
+# If we use self.request, we may encode multipart formdata by ourselves
+# requests lib take care of encode part, so use this lib instead
+def fake_auth_header():
+ headers = {'Accept': 'application/json'}
+ user, pw = mockmodel.fake_user.items()[0]
+ hdr = "Basic " + base64.b64encode("%s:%s" % (user, pw))
+ headers['AUTHORIZATION'] = hdr
+ return headers
+
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/model/Makefile.am | 25 ++
plugins/gingerbase/model/__init__.py | 18 ++
plugins/gingerbase/model/cpuinfo.py | 103 ++++++++
plugins/gingerbase/model/debugreports.py | 213 ++++++++++++++++
plugins/gingerbase/model/host.py | 421 +++++++++++++++++++++++++++++++
plugins/gingerbase/model/model.py | 49 ++++
plugins/kimchi/model/debugreports.py | 213 ----------------
7 files changed, 829 insertions(+), 213 deletions(-)
create mode 100644 plugins/gingerbase/model/Makefile.am
create mode 100644 plugins/gingerbase/model/__init__.py
create mode 100644 plugins/gingerbase/model/cpuinfo.py
create mode 100644 plugins/gingerbase/model/debugreports.py
create mode 100644 plugins/gingerbase/model/host.py
create mode 100644 plugins/gingerbase/model/model.py
delete mode 100644 plugins/kimchi/model/debugreports.py
diff --git a/plugins/gingerbase/model/Makefile.am b/plugins/gingerbase/model/Makefile.am
new file mode 100644
index 0000000..80c4e07
--- /dev/null
+++ b/plugins/gingerbase/model/Makefile.am
@@ -0,0 +1,25 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+model_PYTHON = *.py
+
+modeldir = $(pythondir)/wok/plugins/gingerbase/model
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(modeldir)
diff --git a/plugins/gingerbase/model/__init__.py b/plugins/gingerbase/model/__init__.py
new file mode 100644
index 0000000..355a76c
--- /dev/null
+++ b/plugins/gingerbase/model/__init__.py
@@ -0,0 +1,18 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
diff --git a/plugins/gingerbase/model/cpuinfo.py b/plugins/gingerbase/model/cpuinfo.py
new file mode 100644
index 0000000..688d58f
--- /dev/null
+++ b/plugins/gingerbase/model/cpuinfo.py
@@ -0,0 +1,103 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import platform
+
+from wok.exception import InvalidParameter, InvalidOperation
+from wok.utils import run_command
+from ..lscpu import LsCpu
+
+
+ARCH = 'power' if platform.machine().startswith('ppc') else 'x86'
+
+
+class CPUInfoModel(object):
+ """
+ Get information about a CPU for hyperthreading (on x86)
+ or SMT (on POWER) for logic when creating templates and VMs.
+ """
+
+ def __init__(self, **kargs):
+ self.guest_threads_enabled = False
+ self.sockets = 0
+ self.cores_present = 0
+ self.cores_available = 0
+ self.cores_per_socket = 0
+ self.threads_per_core = 0
+ self.max_threads = 0
+ self.lscpu = LsCpu()
+
+ if ARCH == 'power':
+ # IBM PowerPC
+ self.guest_threads_enabled = True
+ out, error, rc = run_command(['ppc64_cpu', '--smt'])
+ if rc or 'on' in out:
+ # SMT has to be disabled for guest to use threads as CPUs.
+ # rc is always zero, whether SMT is off or on.
+ self.guest_threads_enabled = False
+ out, error, rc = run_command(['ppc64_cpu', '--cores-present'])
+ if not rc:
+ self.cores_present = int(out.split()[-1])
+ out, error, rc = run_command(['ppc64_cpu', '--cores-on'])
+ if not rc:
+ self.cores_available = int(out.split()[-1])
+ out, error, rc = run_command(['ppc64_cpu', '--threads-per-core'])
+ if not rc:
+ self.threads_per_core = int(out.split()[-1])
+ self.sockets = self.cores_present/self.threads_per_core
+ if self.sockets == 0:
+ self.sockets = 1
+ self.cores_per_socket = self.cores_present/self.sockets
+ else:
+ # Intel or AMD
+ self.guest_threads_enabled = True
+ self.sockets = int(self.lscpu.get_sockets())
+ self.cores_per_socket = int(self.lscpu.get_cores_per_socket())
+ self.cores_present = self.cores_per_socket * self.sockets
+ self.cores_available = self.cores_present
+ self.threads_per_core = self.lscpu.get_threads_per_core()
+
+ def lookup(self, ident):
+ return {
+ 'guest_threads_enabled': self.guest_threads_enabled,
+ 'sockets': self.sockets,
+ 'cores_per_socket': self.cores_per_socket,
+ 'cores_present': self.cores_present,
+ 'cores_available': self.cores_available,
+ 'threads_per_core': self.threads_per_core,
+ }
+
+ def check_topology(self, vcpus, topology):
+ """
+ param vcpus: should be an integer
+ param iso_path: the path of the guest ISO
+ param topology: {'sockets': x, 'cores': x, 'threads': x}
+ """
+ sockets = topology['sockets']
+ cores = topology['cores']
+ threads = topology['threads']
+
+ if not self.guest_threads_enabled:
+ raise InvalidOperation("GGBCPUINF0003E")
+ if vcpus != sockets * cores * threads:
+ raise InvalidParameter("GGBCPUINF0002E")
+ if vcpus > self.cores_available * self.threads_per_core:
+ raise InvalidParameter("GGBCPUINF0001E")
+ if threads > self.threads_per_core:
+ raise InvalidParameter("GGBCPUINF0002E")
diff --git a/plugins/gingerbase/model/debugreports.py b/plugins/gingerbase/model/debugreports.py
new file mode 100644
index 0000000..76be2b9
--- /dev/null
+++ b/plugins/gingerbase/model/debugreports.py
@@ -0,0 +1,213 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import fnmatch
+import glob
+import logging
+import os
+import shutil
+import subprocess
+import time
+
+from wok.exception import InvalidParameter, NotFoundError, OperationFailed
+from wok.exception import WokException
+from wok.utils import add_task, wok_log
+from wok.utils import run_command
+from wok.model.tasks import TaskModel
+
+from .. import config
+
+
+class DebugReportsModel(object):
+ def __init__(self, **kargs):
+ self.objstore = kargs['objstore']
+ self.task = TaskModel(**kargs)
+
+ def create(self, params):
+ ident = params.get('name').strip()
+ # Generate a name with time and millisec precision, if necessary
+ if ident is None or ident == "":
+ ident = 'report-' + str(int(time.time() * 1000))
+ else:
+ if ident in self.get_list():
+ raise InvalidParameter("GGBDR0008E", {"name": ident})
+ taskid = self._gen_debugreport_file(ident)
+ return self.task.lookup(taskid)
+
+ def get_list(self):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, '*.*')
+ file_lists = glob.glob(file_pattern)
+ file_lists = [os.path.split(file)[1] for file in file_lists]
+ name_lists = [file.split('.', 1)[0] for file in file_lists]
+
+ return name_lists
+
+ def _gen_debugreport_file(self, name):
+ gen_cmd = self.get_system_report_tool()
+
+ if gen_cmd is not None:
+ return add_task('/plugins/gingerbase/debugreports/%s' % name, gen_cmd,
+ self.objstore, name)
+
+ raise OperationFailed("GGBDR0002E")
+
+ @staticmethod
+ def sosreport_generate(cb, name):
+ def log_error(e):
+ log = logging.getLogger('Model')
+ log.warning('Exception in generating debug file: %s', e)
+
+ try:
+ command = ['sosreport', '--batch', '--name=%s' % name]
+ output, error, retcode = run_command(command)
+
+ if retcode != 0:
+ raise OperationFailed("GGBDR0003E", {'name': name,
+ 'err': retcode})
+
+ # SOSREPORT might create file in /tmp or /var/tmp
+ # FIXME: The right way should be passing the tar.xz file directory
+ # though the parameter '--tmp-dir', but it is failing in Fedora 20
+ patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*']
+ reports = []
+ reportFile = None
+ for p in patterns:
+ reports = reports + [f for f in glob.glob(p % name)]
+ for f in reports:
+ if not fnmatch.fnmatch(f, '*.md5'):
+ reportFile = f
+ break
+ # Some error in sosreport happened
+ if reportFile is None:
+ wok_log.error('Debug report file not found. See sosreport '
+ 'output for detail:\n%s', output)
+ fname = (patterns[0] % name).split('/')[-1]
+ raise OperationFailed('GGBDR0004E', {'name': fname})
+
+ md5_report_file = reportFile + '.md5'
+ report_file_extension = '.' + reportFile.split('.', 1)[1]
+ path = config.get_debugreports_path()
+ target = os.path.join(path, name + report_file_extension)
+ # Moving report
+ msg = 'Moving debug report file "%s" to "%s"' % (reportFile,
+ target)
+ wok_log.info(msg)
+ shutil.move(reportFile, target)
+ # Deleting md5
+ msg = 'Deleting report md5 file: "%s"' % (md5_report_file)
+ wok_log.info(msg)
+ with open(md5_report_file) as f:
+ md5 = f.read().strip()
+ wok_log.info('Md5 file content: "%s"', md5)
+ os.remove(md5_report_file)
+ cb('OK', True)
+ return
+
+ except WokException as e:
+ log_error(e)
+ raise
+
+ except OSError as e:
+ log_error(e)
+ raise
+
+ except Exception, e:
+ # No need to call cb to update the task status here.
+ # The task object will catch the exception raised here
+ # and update the task status there
+ log_error(e)
+ raise OperationFailed("GGBDR0005E", {'name': name, 'err': e})
+
+ @staticmethod
+ def get_system_report_tool():
+ # Please add new possible debug report command here
+ # and implement the report generating function
+ # based on the new report command
+ report_tools = ({'cmd': 'sosreport --help',
+ 'fn': DebugReportsModel.sosreport_generate},)
+
+ # check if the command can be found by shell one by one
+ for helper_tool in report_tools:
+ try:
+ retcode = subprocess.call(helper_tool['cmd'], shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ if retcode == 0:
+ return helper_tool['fn']
+ except Exception, e:
+ wok_log.info('Exception running command: %s', e)
+
+ return None
+
+
+class DebugReportModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def lookup(self, name):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name)
+ file_pattern = file_pattern + '.*'
+ try:
+ file_target = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("GGBDR0001E", {'name': name})
+
+ ctime = os.stat(file_target).st_mtime
+ ctime = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(ctime))
+ file_target = os.path.split(file_target)[-1]
+ file_target = os.path.join("plugins/gingerbase/data/debugreports",
+ file_target)
+ return {'uri': file_target,
+ 'ctime': ctime}
+
+ def update(self, name, params):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name + '.*')
+ try:
+ file_source = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("GGBDR0001E", {'name': name})
+
+ file_target = file_source.replace(name, params['name'])
+ if os.path.isfile(file_target):
+ raise InvalidParameter('GGBDR0008E', {'name': params['name']})
+
+ shutil.move(file_source, file_target)
+ wok_log.info('%s renamed to %s' % (file_source, file_target))
+ return params['name']
+
+ def delete(self, name):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name + '.*')
+ try:
+ file_target = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("GGBDR0001E", {'name': name})
+
+ os.remove(file_target)
+
+
+class DebugReportContentModel(object):
+ def __init__(self, **kargs):
+ self._debugreport = DebugReportModel()
+
+ def lookup(self, name):
+ return self._debugreport.lookup(name)
diff --git a/plugins/gingerbase/model/host.py b/plugins/gingerbase/model/host.py
new file mode 100644
index 0000000..173a159
--- /dev/null
+++ b/plugins/gingerbase/model/host.py
@@ -0,0 +1,421 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+import platform
+import psutil
+import time
+from cherrypy.process.plugins import BackgroundTask
+from collections import defaultdict
+import glob
+
+from wok.basemodel import Singleton
+from wok.exception import InvalidOperation
+from wok.exception import OperationFailed
+from wok.utils import add_task, wok_log
+
+
+from .. import disks
+from ..repositories import Repositories
+from ..swupdate import SoftwareUpdate
+from debugreports import DebugReportsModel
+from wok.model.tasks import TaskModel
+from wok.config import config as kconfig
+
+
+HOST_STATS_INTERVAL = 1
+
+
+class HostModel(object):
+ def __init__(self, **kargs):
+ # self.conn = kargs['conn']
+ self.objstore = kargs['objstore']
+ self.task = TaskModel(**kargs)
+ self.host_info = self._get_host_info()
+
+ def _get_ppc_cpu_info(self):
+ res = {}
+ with open('/proc/cpuinfo') as f:
+ for line in f.xreadlines():
+ # Parse CPU, CPU's revision and CPU's clock information
+ for key in ['cpu', 'revision', 'clock']:
+ if key in line:
+ info = line.split(':')[1].strip()
+ if key == 'clock':
+ value = float(info.split('MHz')[0].strip()) / 1000
+ else:
+ value = info.split('(')[0].strip()
+ res[key] = value
+
+ # Power machines show, for each cpu/core, a block with
+ # all cpu information. Here we control the scan of the
+ # necessary information (1st block provides
+ # everything), skipping the function when find all
+ # information.
+ if len(res.keys()) == 3:
+ return "%(cpu)s (%(revision)s) @ %(clock)s GHz\
+ " % res
+
+ return ""
+
+ def _get_host_info(self):
+ res = {}
+ if platform.machine().startswith('ppc'):
+ res['cpu_model'] = self._get_ppc_cpu_info()
+ else:
+ with open('/proc/cpuinfo') as f:
+ for line in f.xreadlines():
+ if "model name" in line:
+ res['cpu_model'] = line.split(':')[1].strip()
+ break
+
+ res['cpus'] = 0
+ res['memory'] = 0L
+
+ # Include IBM PowerKVM name to supported distro names
+ _sup_distros = platform._supported_dists + ('ibm_powerkvm',)
+ # 'fedora' '17' 'Beefy Miracle'
+ distro, version, codename = platform.linux_distribution(
+ supported_dists=_sup_distros)
+ res['os_distro'] = distro
+ res['os_version'] = version
+ res['os_codename'] = unicode(codename, "utf-8")
+
+ return res
+
+ def lookup(self, *name):
+ cpus = psutil.NUM_CPUS
+
+ # psutil is unstable on how to get the number of
+ # cpus, different versions call it differently
+ if hasattr(psutil, 'cpu_count'):
+ cpus = psutil.cpu_count()
+
+ elif hasattr(psutil, '_psplatform'):
+ for method_name in ['_get_num_cpus', 'get_num_cpus']:
+
+ method = getattr(psutil._psplatform, method_name, None)
+ if method is not None:
+ cpus = method()
+ break
+
+ self.host_info['cpus'] = cpus
+ self.host_info['memory'] = psutil.phymem_usage().total
+ return self.host_info
+
+ def swupdate(self, *name):
+ try:
+ swupdate = SoftwareUpdate()
+ except:
+ raise OperationFailed('GGBPKGUPD0004E')
+
+ pkgs = swupdate.getNumOfUpdates()
+ if pkgs == 0:
+ raise OperationFailed('GGBPKGUPD0001E')
+
+ wok_log.debug('Host is going to be updated.')
+ taskid = add_task('/plugins/gingerbase/host/swupdate', swupdate.doUpdate,
+ self.objstore, None)
+ return self.task.lookup(taskid)
+
+ def shutdown(self, args=None):
+ # Check for running vms before shutdown
+ # FIXME : Find alternative way to figure out if any vms running
+ # running_vms = self._get_vms_list_by_state('running')
+ # if len(running_vms) > 0:
+ # raise OperationFailed("GGBHOST0001E")
+
+ wok_log.info('Host is going to shutdown.')
+ os.system('shutdown -h now')
+
+ def reboot(self, args=None):
+ # Find running VMs
+ # FIXME : Find alternative way to figure out if any vms running
+ # running_vms = self._get_vms_list_by_state('running')
+ # if len(running_vms) > 0:
+ # raise OperationFailed("GGBHOST0002E")
+
+ wok_log.info('Host is going to reboot.')
+ os.system('reboot')
+
+ # def _get_vms_list_by_state(self, state):
+ # conn = self.conn.get()
+ # return [dom.name().decode('utf-8')
+ # for dom in conn.listAllDomains(0)
+ # if (DOM_STATE_MAP[dom.info()[0]]) == state]
+
+
+class HostStatsModel(object):
+ __metaclass__ = Singleton
+
+ def __init__(self, **kargs):
+ self.host_stats = defaultdict(list)
+ self.host_stats_thread = BackgroundTask(HOST_STATS_INTERVAL,
+ self._update_host_stats)
+ self.host_stats_thread.start()
+
+ def lookup(self, *name):
+ return {'cpu_utilization': self.host_stats['cpu_utilization'][-1],
+ 'memory': self.host_stats['memory'][-1],
+ 'disk_read_rate': self.host_stats['disk_read_rate'][-1],
+ 'disk_write_rate': self.host_stats['disk_write_rate'][-1],
+ 'net_recv_rate': self.host_stats['net_recv_rate'][-1],
+ 'net_sent_rate': self.host_stats['net_sent_rate'][-1]}
+
+ def _update_host_stats(self):
+ preTimeStamp = self.host_stats['timestamp']
+ timestamp = time.time()
+ # FIXME when we upgrade psutil, we can get uptime by psutil.uptime
+ # we get uptime by float(open("/proc/uptime").readline().split()[0])
+ # and calculate the first io_rate after the OS started.
+ with open("/proc/uptime") as time_f:
+ seconds = (timestamp - preTimeStamp if preTimeStamp else
+ float(time_f.readline().split()[0]))
+
+ self.host_stats['timestamp'] = timestamp
+ self._get_host_disk_io_rate(seconds)
+ self._get_host_network_io_rate(seconds)
+
+ self._get_percentage_host_cpu_usage()
+ self._get_host_memory_stats()
+
+ # store only 60 stats (1 min)
+ for key, value in self.host_stats.iteritems():
+ if isinstance(value, list):
+ if len(value) == 60:
+ self.host_stats[key] = value[10:]
+
+ def _get_percentage_host_cpu_usage(self):
+ # This is cpu usage producer. This producer will calculate the usage
+ # at an interval of HOST_STATS_INTERVAL.
+ # The psutil.cpu_percent works as non blocking.
+ # psutil.cpu_percent maintains a cpu time sample.
+ # It will update the cpu time sample when it is called.
+ # So only this producer can call psutil.cpu_percent in kimchi.
+ self.host_stats['cpu_utilization'].append(psutil.cpu_percent(None))
+
+ def _get_host_memory_stats(self):
+ virt_mem = psutil.virtual_memory()
+ # available:
+ # the actual amount of available memory that can be given
+ # instantly to processes that request more memory in bytes; this
+ # is calculated by summing different memory values depending on
+ # the platform (e.g. free + buffers + cached on Linux)
+ memory_stats = {'total': virt_mem.total,
+ 'free': virt_mem.free,
+ 'cached': virt_mem.cached,
+ 'buffers': virt_mem.buffers,
+ 'avail': virt_mem.available}
+ self.host_stats['memory'].append(memory_stats)
+
+ def _get_host_disk_io_rate(self, seconds):
+ disk_read_bytes = self.host_stats['disk_read_bytes']
+ disk_write_bytes = self.host_stats['disk_write_bytes']
+ prev_read_bytes = disk_read_bytes[-1] if disk_read_bytes else 0
+ prev_write_bytes = disk_write_bytes[-1] if disk_write_bytes else 0
+
+ disk_io = psutil.disk_io_counters(False)
+ read_bytes = disk_io.read_bytes
+ write_bytes = disk_io.write_bytes
+
+ rd_rate = int(float(read_bytes - prev_read_bytes) / seconds + 0.5)
+ wr_rate = int(float(write_bytes - prev_write_bytes) / seconds + 0.5)
+
+ self.host_stats['disk_read_rate'].append(rd_rate)
+ self.host_stats['disk_write_rate'].append(wr_rate)
+ self.host_stats['disk_read_bytes'].append(read_bytes)
+ self.host_stats['disk_write_bytes'].append(write_bytes)
+
+ def _get_host_network_io_rate(self, seconds):
+ net_recv_bytes = self.host_stats['net_recv_bytes']
+ net_sent_bytes = self.host_stats['net_sent_bytes']
+ prev_recv_bytes = net_recv_bytes[-1] if net_recv_bytes else 0
+ prev_sent_bytes = net_sent_bytes[-1] if net_sent_bytes else 0
+
+ net_ios = psutil.network_io_counters(True)
+ recv_bytes = 0
+ sent_bytes = 0
+ for key in set(self.nics() +
+ self.wlans()) & set(net_ios.iterkeys()):
+ recv_bytes = recv_bytes + net_ios[key].bytes_recv
+ sent_bytes = sent_bytes + net_ios[key].bytes_sent
+
+ rx_rate = int(float(recv_bytes - prev_recv_bytes) / seconds + 0.5)
+ tx_rate = int(float(sent_bytes - prev_sent_bytes) / seconds + 0.5)
+
+ self.host_stats['net_recv_rate'].append(rx_rate)
+ self.host_stats['net_sent_rate'].append(tx_rate)
+ self.host_stats['net_recv_bytes'].append(recv_bytes)
+ self.host_stats['net_sent_bytes'].append(sent_bytes)
+
+ def wlans(self):
+ WLAN_PATH = '/sys/class/net/*/wireless'
+ return [b.split('/')[-2] for b in glob.glob(WLAN_PATH)]
+
+
+ # FIXME if we do not want to list usb nic
+ def nics(self):
+ NIC_PATH = '/sys/class/net/*/device'
+ return list(set([b.split('/')[-2] for b in glob.glob(NIC_PATH)]) -
+ set(self.wlans()))
+
+
+class HostStatsHistoryModel(object):
+ def __init__(self, **kargs):
+ self.history = HostStatsModel(**kargs)
+
+ def lookup(self, *name):
+ return {'cpu_utilization': self.history.host_stats['cpu_utilization'],
+ 'memory': self.history.host_stats['memory'],
+ 'disk_read_rate': self.history.host_stats['disk_read_rate'],
+ 'disk_write_rate': self.history.host_stats['disk_write_rate'],
+ 'net_recv_rate': self.history.host_stats['net_recv_rate'],
+ 'net_sent_rate': self.history.host_stats['net_sent_rate']}
+
+
+class CapabilitiesModel(object):
+ __metaclass__ = Singleton
+
+ def __init__(self, **kargs):
+ pass
+
+
+ def lookup(self, *ident):
+ report_tool = DebugReportsModel.get_system_report_tool()
+ try:
+ SoftwareUpdate()
+ except Exception:
+ update_tool = False
+ else:
+ update_tool = True
+
+ try:
+ repo = Repositories()
+ except Exception:
+ repo_mngt_tool = None
+ else:
+ repo_mngt_tool = repo._pkg_mnger.TYPE
+
+ return {
+ 'system_report_tool': bool(report_tool),
+ 'update_tool': update_tool,
+ 'repo_mngt_tool': repo_mngt_tool,
+ 'federation': kconfig.get("server", "federation")
+ }
+
+
+class PartitionsModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def get_list(self):
+ result = disks.get_partitions_names()
+ return result
+
+
+class PartitionModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def lookup(self, name):
+ return disks.get_partition_details(name)
+
+class PackagesUpdateModel(object):
+ def __init__(self, **kargs):
+ try:
+ self.host_swupdate = SoftwareUpdate()
+ except:
+ self.host_swupdate = None
+
+ def get_list(self):
+ if self.host_swupdate is None:
+ raise OperationFailed('GGBPKGUPD0004E')
+
+ return self.host_swupdate.getUpdates()
+
+
+class PackageUpdateModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def lookup(self, name):
+ try:
+ swupdate = SoftwareUpdate()
+ except Exception:
+ raise OperationFailed('GGBPKGUPD0004E')
+
+ return swupdate.getUpdate(name)
+
+
+class RepositoriesModel(object):
+ def __init__(self, **kargs):
+ try:
+ self.host_repositories = Repositories()
+ except:
+ self.host_repositories = None
+
+ def get_list(self):
+ if self.host_repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return sorted(self.host_repositories.getRepositories())
+
+ def create(self, params):
+ if self.host_repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self.host_repositories.addRepository(params)
+
+
+class RepositoryModel(object):
+ def __init__(self, **kargs):
+ try:
+ self._repositories = Repositories()
+ except:
+ self._repositories = None
+
+ def lookup(self, repo_id):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.getRepository(repo_id)
+
+ def enable(self, repo_id):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.enableRepository(repo_id)
+
+ def disable(self, repo_id):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.disableRepository(repo_id)
+
+ def update(self, repo_id, params):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.updateRepository(repo_id, params)
+
+ def delete(self, repo_id):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.removeRepository(repo_id)
diff --git a/plugins/gingerbase/model/model.py b/plugins/gingerbase/model/model.py
new file mode 100644
index 0000000..90331f5
--- /dev/null
+++ b/plugins/gingerbase/model/model.py
@@ -0,0 +1,49 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import inspect
+import os
+
+from wok.basemodel import BaseModel
+from wok.objectstore import ObjectStore
+from wok.utils import import_module, listPathModules
+
+
+class Model(BaseModel):
+ def __init__(self, objstore_loc=None):
+
+ self.objstore = ObjectStore(objstore_loc)
+ kargs = {'objstore': self.objstore}
+
+ this = os.path.basename(__file__)
+ this_mod = os.path.splitext(this)[0]
+
+ models = []
+ for mod_name in listPathModules(os.path.dirname(__file__)):
+ if mod_name.startswith("_") or mod_name == this_mod:
+ continue
+
+ module = import_module('plugins.gingerbase.model.' + mod_name)
+ members = inspect.getmembers(module, inspect.isclass)
+ for cls_name, instance in members:
+ if inspect.getmodule(instance) == module:
+ if cls_name.endswith('Model'):
+ models.append(instance(**kargs))
+
+ return super(Model, self).__init__(models)
diff --git a/plugins/kimchi/model/debugreports.py b/plugins/kimchi/model/debugreports.py
deleted file mode 100644
index 48e6b26..0000000
--- a/plugins/kimchi/model/debugreports.py
+++ /dev/null
@@ -1,213 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import fnmatch
-import glob
-import logging
-import os
-import shutil
-import subprocess
-import time
-
-from wok.exception import InvalidParameter, NotFoundError, OperationFailed
-from wok.exception import WokException
-from wok.utils import add_task, wok_log
-from wok.utils import run_command
-from wok.model.tasks import TaskModel
-
-from .. import config
-
-
-class DebugReportsModel(object):
- def __init__(self, **kargs):
- self.objstore = kargs['objstore']
- self.task = TaskModel(**kargs)
-
- def create(self, params):
- ident = params.get('name').strip()
- # Generate a name with time and millisec precision, if necessary
- if ident is None or ident == "":
- ident = 'report-' + str(int(time.time() * 1000))
- else:
- if ident in self.get_list():
- raise InvalidParameter("KCHDR0008E", {"name": ident})
- taskid = self._gen_debugreport_file(ident)
- return self.task.lookup(taskid)
-
- def get_list(self):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, '*.*')
- file_lists = glob.glob(file_pattern)
- file_lists = [os.path.split(file)[1] for file in file_lists]
- name_lists = [file.split('.', 1)[0] for file in file_lists]
-
- return name_lists
-
- def _gen_debugreport_file(self, name):
- gen_cmd = self.get_system_report_tool()
-
- if gen_cmd is not None:
- return add_task('/plugins/kimchi/debugreports/%s' % name, gen_cmd,
- self.objstore, name)
-
- raise OperationFailed("KCHDR0002E")
-
- @staticmethod
- def sosreport_generate(cb, name):
- def log_error(e):
- log = logging.getLogger('Model')
- log.warning('Exception in generating debug file: %s', e)
-
- try:
- command = ['sosreport', '--batch', '--name=%s' % name]
- output, error, retcode = run_command(command)
-
- if retcode != 0:
- raise OperationFailed("KCHDR0003E", {'name': name,
- 'err': retcode})
-
- # SOSREPORT might create file in /tmp or /var/tmp
- # FIXME: The right way should be passing the tar.xz file directory
- # though the parameter '--tmp-dir', but it is failing in Fedora 20
- patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*']
- reports = []
- reportFile = None
- for p in patterns:
- reports = reports + [f for f in glob.glob(p % name)]
- for f in reports:
- if not fnmatch.fnmatch(f, '*.md5'):
- reportFile = f
- break
- # Some error in sosreport happened
- if reportFile is None:
- wok_log.error('Debug report file not found. See sosreport '
- 'output for detail:\n%s', output)
- fname = (patterns[0] % name).split('/')[-1]
- raise OperationFailed('KCHDR0004E', {'name': fname})
-
- md5_report_file = reportFile + '.md5'
- report_file_extension = '.' + reportFile.split('.', 1)[1]
- path = config.get_debugreports_path()
- target = os.path.join(path, name + report_file_extension)
- # Moving report
- msg = 'Moving debug report file "%s" to "%s"' % (reportFile,
- target)
- wok_log.info(msg)
- shutil.move(reportFile, target)
- # Deleting md5
- msg = 'Deleting report md5 file: "%s"' % (md5_report_file)
- wok_log.info(msg)
- with open(md5_report_file) as f:
- md5 = f.read().strip()
- wok_log.info('Md5 file content: "%s"', md5)
- os.remove(md5_report_file)
- cb('OK', True)
- return
-
- except WokException as e:
- log_error(e)
- raise
-
- except OSError as e:
- log_error(e)
- raise
-
- except Exception, e:
- # No need to call cb to update the task status here.
- # The task object will catch the exception raised here
- # and update the task status there
- log_error(e)
- raise OperationFailed("KCHDR0005E", {'name': name, 'err': e})
-
- @staticmethod
- def get_system_report_tool():
- # Please add new possible debug report command here
- # and implement the report generating function
- # based on the new report command
- report_tools = ({'cmd': 'sosreport --help',
- 'fn': DebugReportsModel.sosreport_generate},)
-
- # check if the command can be found by shell one by one
- for helper_tool in report_tools:
- try:
- retcode = subprocess.call(helper_tool['cmd'], shell=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- if retcode == 0:
- return helper_tool['fn']
- except Exception, e:
- wok_log.info('Exception running command: %s', e)
-
- return None
-
-
-class DebugReportModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name)
- file_pattern = file_pattern + '.*'
- try:
- file_target = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- ctime = os.stat(file_target).st_mtime
- ctime = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(ctime))
- file_target = os.path.split(file_target)[-1]
- file_target = os.path.join("plugins/kimchi/data/debugreports",
- file_target)
- return {'uri': file_target,
- 'ctime': ctime}
-
- def update(self, name, params):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name + '.*')
- try:
- file_source = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- file_target = file_source.replace(name, params['name'])
- if os.path.isfile(file_target):
- raise InvalidParameter('KCHDR0008E', {'name': params['name']})
-
- shutil.move(file_source, file_target)
- wok_log.info('%s renamed to %s' % (file_source, file_target))
- return params['name']
-
- def delete(self, name):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name + '.*')
- try:
- file_target = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- os.remove(file_target)
-
-
-class DebugReportContentModel(object):
- def __init__(self, **kargs):
- self._debugreport = DebugReportModel()
-
- def lookup(self, name):
- return self._debugreport.lookup(name)
--
2.1.0
1
0
[PATCH 06/15] V2 Ginger Base : control, API, config, and INSTALL files
by chandra@linux.vnet.ibm.com 27 Sep '15
by chandra@linux.vnet.ibm.com 27 Sep '15
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/API.json | 175 ++++++++
plugins/gingerbase/INSTALL | 369 ++++++++++++++++
plugins/gingerbase/config.rpath | 672 +++++++++++++++++++++++++++++
plugins/gingerbase/control/Makefile.am | 25 ++
plugins/gingerbase/control/__init__.py | 26 ++
plugins/gingerbase/control/cpuinfo.py | 37 ++
plugins/gingerbase/control/debugreports.py | 61 +++
plugins/gingerbase/control/host.py | 145 +++++++
plugins/kimchi/control/debugreports.py | 61 ---
9 files changed, 1510 insertions(+), 61 deletions(-)
create mode 100644 plugins/gingerbase/API.json
create mode 100644 plugins/gingerbase/INSTALL
create mode 100644 plugins/gingerbase/config.rpath
create mode 100644 plugins/gingerbase/control/Makefile.am
create mode 100644 plugins/gingerbase/control/__init__.py
create mode 100644 plugins/gingerbase/control/cpuinfo.py
create mode 100644 plugins/gingerbase/control/debugreports.py
create mode 100644 plugins/gingerbase/control/host.py
delete mode 100644 plugins/kimchi/control/debugreports.py
diff --git a/plugins/gingerbase/API.json b/plugins/gingerbase/API.json
new file mode 100644
index 0000000..7b77eac
--- /dev/null
+++ b/plugins/gingerbase/API.json
@@ -0,0 +1,175 @@
+{
+ "$schema": "http://json-schema.org/draft-03/schema#",
+ "title": "Ginger Base API",
+ "description": "Json schema for Gigner Base API",
+ "type": "object",
+ "gingerbasetype": {
+ "cpu_info": {
+ "description": "Configure CPU specifics for a VM.",
+ "type": "object",
+ "properties": {
+ "topology": {
+ "description": "Configure the guest CPU topology.",
+ "type": "object",
+ "properties": {
+ "sockets": {
+ "type": "integer",
+ "required": true,
+ "minimum": 1,
+ "error": "GGBHOST0005E"
+ },
+ "cores": {
+ "type": "integer",
+ "required": true,
+ "minimum": 1,
+ "error": "GGBHOST0005E"
+ },
+ "threads": {
+ "type": "integer",
+ "required": true,
+ "minimum": 1,
+ "error": "GGBHOST0005E"
+ }
+ }
+ }
+ }
+ }
+ },
+ "properties": {
+ "debugreports_create": {
+ "type": "object",
+ "error": "GGBDR0006E",
+ "properties": {
+ "name": {
+ "description": "The name for the debug report file.",
+ "type": "string",
+ "pattern": "^[_A-Za-z0-9-]*$",
+ "error": "GGBDR0007E"
+ }
+ }
+ },
+ "debugreport_update": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "New name of debug report",
+ "type": "string",
+ "pattern": "^[_A-Za-z0-9-]*$",
+ "error": "GGBDR0007E"
+ }
+ },
+ "additionalProperties": false
+ },
+ "repositories_create": {
+ "type": "object",
+ "properties": {
+ "repo_id": {
+ "description": "Repository ID used for YUM repository.",
+ "type": "string",
+ "error": "GGBREPOS0001E"
+ },
+ "baseurl": {
+ "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
+ "type": "string",
+ "error": "GGBREPOS0002E"
+ },
+ "config": {
+ "description": "Dictionary containing repository configuration",
+ "type": "object",
+ "error": "GGBREPOS0003E",
+ "properties": {
+ "dist": {
+ "description": "Distribution to DEB repository",
+ "type": "string",
+ "error": "GGBREPOS0004E"
+ },
+ "comps": {
+ "description": "List of components to DEB repository",
+ "type": "array",
+ "error": "GGBREPOS0005E",
+ "uniqueItems": true,
+ "items": {
+ "description": "Component name",
+ "type": "string",
+ "error": "GGBREPOS0006E"
+ }
+ },
+ "repo_name": {
+ "description": "YUM repository name",
+ "type": "string",
+ "error": "GGBREPOS0023E"
+ },
+ "mirrorlist": {
+ "description": "URL to a file containing a list of baseurls",
+ "type": "string",
+ "error": "GGBREPOS0007E"
+ },
+ "metalink": {
+ "description": "URL to a metalink file for the repomd.xml",
+ "type": "string",
+ "error": "GGBREPOS0029E"
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "error": "KCHAPI0001E"
+ },
+ "repository_update": {
+ "type": "object",
+ "properties": {
+ "baseurl": {
+ "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
+ "type": "string",
+ "error": "GGBREPOS0002E"
+ },
+ "config": {
+ "description": "Dictionary containing repository configuration",
+ "type": "object",
+ "error": "GGBREPOS0003E",
+ "properties": {
+ "dist": {
+ "description": "Distribution to DEB repository",
+ "type": "string",
+ "error": "GGBREPOS0004E"
+ },
+ "comps": {
+ "description": "List of components to DEB repository",
+ "type": "array",
+ "error": "GGBREPOS0005E",
+ "uniqueItems": true,
+ "items": {
+ "description": "Component name",
+ "type": "string",
+ "error": "GGBREPOS0006E"
+ }
+ },
+ "repo_name": {
+ "description": "Human-readable string describing the YUM repository.",
+ "type": "string",
+ "error": "GGBREPOS0008E"
+ },
+ "mirrorlist": {
+ "description": "URL to a file containing a list of baseurls for YUM repository",
+ "type": "string",
+ "error": "GGBREPOS0007E"
+ },
+ "gpgcheck": {
+ "description": "Indicates if a GPG signature check on the packages gotten from repository should be performed.",
+ "type": "boolean",
+ "error": "GGBREPOS0009E"
+ },
+ "gpgkey": {
+ "description": "URL pointing to the ASCII-armored GPG key file for the repository.",
+ "type": "string",
+ "error": "GGBREPOS0010E"
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "error": "GGBAPI0001E"
+
+ }
+ }
+}
diff --git a/plugins/gingerbase/INSTALL b/plugins/gingerbase/INSTALL
new file mode 100644
index 0000000..63bf076
--- /dev/null
+++ b/plugins/gingerbase/INSTALL
@@ -0,0 +1,369 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
+Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
+
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
diff --git a/plugins/gingerbase/config.rpath b/plugins/gingerbase/config.rpath
new file mode 100644
index 0000000..17298f2
--- /dev/null
+++ b/plugins/gingerbase/config.rpath
@@ -0,0 +1,672 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2010 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord(a)gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja(a)dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ library_names_spec='$libname.a'
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd1*)
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ nto-qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/plugins/gingerbase/control/Makefile.am b/plugins/gingerbase/control/Makefile.am
new file mode 100644
index 0000000..49da0ae
--- /dev/null
+++ b/plugins/gingerbase/control/Makefile.am
@@ -0,0 +1,25 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+control_PYTHON = *.py
+
+controldir = $(pythondir)/wok/plugins/gingerbase/control
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(controldir)
diff --git a/plugins/gingerbase/control/__init__.py b/plugins/gingerbase/control/__init__.py
new file mode 100644
index 0000000..b4d8dfd
--- /dev/null
+++ b/plugins/gingerbase/control/__init__.py
@@ -0,0 +1,26 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+
+
+from wok.control.utils import load_url_sub_node
+
+
+sub_nodes = load_url_sub_node(os.path.dirname(__file__), __name__)
diff --git a/plugins/gingerbase/control/cpuinfo.py b/plugins/gingerbase/control/cpuinfo.py
new file mode 100644
index 0000000..f992bf5
--- /dev/null
+++ b/plugins/gingerbase/control/cpuinfo.py
@@ -0,0 +1,37 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+from wok.control.base import Resource
+
+
+class CPUInfo(Resource):
+ def __init__(self, model):
+ super(CPUInfo, self).__init__(model)
+ self.admin_methods = ['GET']
+ self.role_key = 'host'
+ self.uri_fmt = "/host/cpuinfo"
+
+ @property
+ def data(self):
+ return {'threading_enabled': self.info['guest_threads_enabled'],
+ 'sockets': self.info['sockets'],
+ 'cores': self.info['cores_available'],
+ 'threads_per_core': self.info['threads_per_core']
+ }
diff --git a/plugins/gingerbase/control/debugreports.py b/plugins/gingerbase/control/debugreports.py
new file mode 100644
index 0000000..2e76654
--- /dev/null
+++ b/plugins/gingerbase/control/debugreports.py
@@ -0,0 +1,61 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from wok.control.base import AsyncCollection, Resource
+from wok.control.utils import internal_redirect
+from wok.control.utils import UrlSubNode
+
+
+@UrlSubNode('debugreports', True)
+class DebugReports(AsyncCollection):
+ def __init__(self, model):
+ super(DebugReports, self).__init__(model)
+ self.resource = DebugReport
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'POST']
+
+ def _get_resources(self, filter_params):
+ res_list = super(DebugReports, self)._get_resources(filter_params)
+ return sorted(res_list, key=lambda x: x.data['time'], reverse=True)
+
+
+class DebugReport(Resource):
+ def __init__(self, model, ident):
+ super(DebugReport, self).__init__(model, ident)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'PUT', 'POST']
+ self.uri_fmt = '/debugreports/%s'
+ self.content = DebugReportContent(model, ident)
+
+ @property
+ def data(self):
+ return {'name': self.ident,
+ 'uri': self.info['uri'],
+ 'time': self.info['ctime']}
+
+
+class DebugReportContent(Resource):
+ def __init__(self, model, ident):
+ super(DebugReportContent, self).__init__(model, ident)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+
+ def get(self):
+ self.lookup()
+ raise internal_redirect(self.info['uri'])
diff --git a/plugins/gingerbase/control/host.py b/plugins/gingerbase/control/host.py
new file mode 100644
index 0000000..b923569
--- /dev/null
+++ b/plugins/gingerbase/control/host.py
@@ -0,0 +1,145 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from wok.control.base import Collection, Resource
+from wok.control.utils import UrlSubNode
+from wok.exception import NotFoundError
+
+from cpuinfo import CPUInfo
+
+
+@UrlSubNode('host', True)
+class Host(Resource):
+ def __init__(self, model, id=None):
+ super(Host, self).__init__(model, id)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'POST']
+ self.uri_fmt = '/host/%s'
+ self.reboot = self.generate_action_handler('reboot')
+ self.shutdown = self.generate_action_handler('shutdown')
+ self.stats = HostStats(self.model)
+ self.partitions = Partitions(self.model)
+ # self.devices = Devices(self.model)
+ self.packagesupdate = PackagesUpdate(self.model)
+ self.repositories = Repositories(self.model)
+ self.swupdate = self.generate_action_handler_task('swupdate')
+ self.cpuinfo = CPUInfo(self.model)
+ self.capabilities = Capabilities(self.model)
+
+ @property
+ def data(self):
+ return self.info
+
+
+class HostStats(Resource):
+ def __init__(self, model, id=None):
+ super(HostStats, self).__init__(model, id)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+ self.history = HostStatsHistory(self.model)
+
+ @property
+ def data(self):
+ return self.info
+
+
+class HostStatsHistory(Resource):
+ @property
+ def data(self):
+ return self.info
+
+
+class Capabilities(Resource):
+ def __init__(self, model, id=None):
+ super(Capabilities, self).__init__(model, id)
+
+ @property
+ def data(self):
+ return self.info
+
+
+class Partitions(Collection):
+ def __init__(self, model):
+ super(Partitions, self).__init__(model)
+ self.role_key = 'storage'
+ self.admin_methods = ['GET']
+ self.resource = Partition
+
+ # Defining get_resources in order to return list of partitions in UI
+ # sorted by their path
+ def _get_resources(self, flag_filter):
+ res_list = super(Partitions, self)._get_resources(flag_filter)
+ res_list = filter(lambda x: x.info['available'], res_list)
+ res_list.sort(key=lambda x: x.info['path'])
+ return res_list
+
+
+class Partition(Resource):
+ def __init__(self, model, id):
+ self.role_key = 'storage'
+ self.admin_methods = ['GET']
+ super(Partition, self).__init__(model, id)
+
+ @property
+ def data(self):
+ if not self.info['available']:
+ raise NotFoundError("GGBPART0001E", {'name': self.info['name']})
+
+ return self.info
+
+
+class PackagesUpdate(Collection):
+ def __init__(self, model):
+ super(PackagesUpdate, self).__init__(model)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+ self.resource = PackageUpdate
+
+
+class PackageUpdate(Resource):
+ def __init__(self, model, id=None):
+ super(PackageUpdate, self).__init__(model, id)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+
+ @property
+ def data(self):
+ return self.info
+
+
+class Repositories(Collection):
+ def __init__(self, model):
+ super(Repositories, self).__init__(model)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'POST']
+ self.resource = Repository
+
+
+class Repository(Resource):
+ def __init__(self, model, id):
+ super(Repository, self).__init__(model, id)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'PUT', 'POST', 'DELETE']
+ self.uri_fmt = "/host/repositories/%s"
+ self.enable = self.generate_action_handler('enable')
+ self.disable = self.generate_action_handler('disable')
+
+ @property
+ def data(self):
+ return self.info
diff --git a/plugins/kimchi/control/debugreports.py b/plugins/kimchi/control/debugreports.py
deleted file mode 100644
index b5a3072..0000000
--- a/plugins/kimchi/control/debugreports.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-from wok.control.base import AsyncCollection, Resource
-from wok.control.utils import internal_redirect
-from wok.control.utils import UrlSubNode
-
-
-@UrlSubNode('debugreports', True)
-class DebugReports(AsyncCollection):
- def __init__(self, model):
- super(DebugReports, self).__init__(model)
- self.resource = DebugReport
- self.role_key = 'host'
- self.admin_methods = ['GET', 'POST']
-
- def _get_resources(self, filter_params):
- res_list = super(DebugReports, self)._get_resources(filter_params)
- return sorted(res_list, key=lambda x: x.data['time'], reverse=True)
-
-
-class DebugReport(Resource):
- def __init__(self, model, ident):
- super(DebugReport, self).__init__(model, ident)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'PUT', 'POST']
- self.uri_fmt = '/debugreports/%s'
- self.content = DebugReportContent(model, ident)
-
- @property
- def data(self):
- return {'name': self.ident,
- 'uri': self.info['uri'],
- 'time': self.info['ctime']}
-
-
-class DebugReportContent(Resource):
- def __init__(self, model, ident):
- super(DebugReportContent, self).__init__(model, ident)
- self.role_key = 'host'
- self.admin_methods = ['GET']
-
- def get(self):
- self.lookup()
- raise internal_redirect(self.info['uri'])
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/m4/ac_python_module.m4 | 30 ++
plugins/gingerbase/m4/gettext.m4 | 383 +++++++++++++++
plugins/gingerbase/m4/iconv.m4 | 214 +++++++++
plugins/gingerbase/m4/intlmacosx.m4 | 51 ++
plugins/gingerbase/m4/lib-ld.m4 | 110 +++++
plugins/gingerbase/m4/lib-link.m4 | 774 ++++++++++++++++++++++++++++++
plugins/gingerbase/m4/lib-prefix.m4 | 224 +++++++++
plugins/gingerbase/m4/nls.m4 | 32 ++
plugins/gingerbase/m4/po.m4 | 449 +++++++++++++++++
plugins/gingerbase/m4/progtest.m4 | 92 ++++
10 files changed, 2359 insertions(+)
create mode 100644 plugins/gingerbase/m4/ac_python_module.m4
create mode 100644 plugins/gingerbase/m4/gettext.m4
create mode 100644 plugins/gingerbase/m4/iconv.m4
create mode 100644 plugins/gingerbase/m4/intlmacosx.m4
create mode 100644 plugins/gingerbase/m4/lib-ld.m4
create mode 100644 plugins/gingerbase/m4/lib-link.m4
create mode 100644 plugins/gingerbase/m4/lib-prefix.m4
create mode 100644 plugins/gingerbase/m4/nls.m4
create mode 100644 plugins/gingerbase/m4/po.m4
create mode 100644 plugins/gingerbase/m4/progtest.m4
diff --git a/plugins/gingerbase/m4/ac_python_module.m4 b/plugins/gingerbase/m4/ac_python_module.m4
new file mode 100644
index 0000000..32b9d72
--- /dev/null
+++ b/plugins/gingerbase/m4/ac_python_module.m4
@@ -0,0 +1,30 @@
+dnl @synopsis AC_PYTHON_MODULE(modname[, fatal])
+dnl
+dnl Checks for Python module.
+dnl
+dnl If fatal is non-empty then absence of a module will trigger an
+dnl error.
+dnl
+dnl @category InstalledPackages
+dnl @author Andrew Collier <colliera(a)nu.ac.za>.
+dnl @version 2004-07-14
+dnl @license AllPermissive
+
+AC_DEFUN([AC_PYTHON_MODULE],[
+ AC_MSG_CHECKING(python module: $1)
+ python -c "import $1" 2>/dev/null
+ if test $? -eq 0;
+ then
+ AC_MSG_RESULT(yes)
+ eval AS_TR_CPP(HAVE_PYMOD_$1)=yes
+ else
+ AC_MSG_RESULT(no)
+ eval AS_TR_CPP(HAVE_PYMOD_$1)=no
+ #
+ if test -n "$2"
+ then
+ AC_MSG_ERROR(failed to find required module $1)
+ exit 1
+ fi
+ fi
+])
diff --git a/plugins/gingerbase/m4/gettext.m4 b/plugins/gingerbase/m4/gettext.m4
new file mode 100644
index 0000000..f84e6a5
--- /dev/null
+++ b/plugins/gingerbase/m4/gettext.m4
@@ -0,0 +1,383 @@
+# gettext.m4 serial 63 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper(a)cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible(a)clisp.cons.org>, 2000-2006, 2008-2010.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+ [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH([included-gettext],
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE([ENABLE_NLS], [1],
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE([HAVE_GETTEXT], [1],
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE([HAVE_DCGETTEXT], [1],
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST([BUILD_INCLUDED_LIBINTL])
+ AC_SUBST([USE_INCLUDED_LIBINTL])
+ AC_SUBST([CATOBJEXT])
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST([DATADIRNAME])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST([INSTOBJEXT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST([GENCAT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST([INTLOBJS])
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST([INTLLIBS])
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_SUBST([POSUB])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/plugins/gingerbase/m4/iconv.m4 b/plugins/gingerbase/m4/iconv.m4
new file mode 100644
index 0000000..e2041b9
--- /dev/null
+++ b/plugins/gingerbase/m4/iconv.m4
@@ -0,0 +1,214 @@
+# iconv.m4 serial 11 (gettext-0.18.1)
+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ [am_cv_func_iconv=yes])
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ [am_cv_lib_iconv=yes]
+ [am_cv_func_iconv=yes])
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+ dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE([HAVE_ICONV], [1],
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST([LIBICONV])
+ AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl warnings.
+m4_define([gl_iconv_AC_DEFUN],
+ m4_version_prereq([2.64],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [[AC_DEFUN(
+ [$1], [$2])]]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL([am_cv_proto_iconv], [
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([
+ $am_cv_proto_iconv])
+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+ [Define as const if the declaration of iconv() needs const.])
+ fi
+])
diff --git a/plugins/gingerbase/m4/intlmacosx.m4 b/plugins/gingerbase/m4/intlmacosx.m4
new file mode 100644
index 0000000..dd91025
--- /dev/null
+++ b/plugins/gingerbase/m4/intlmacosx.m4
@@ -0,0 +1,51 @@
+# intlmacosx.m4 serial 3 (gettext-0.18)
+dnl Copyright (C) 2004-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in MacOS X 10.2.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ [gt_cv_func_CFPreferencesCopyAppValue],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+ [CFPreferencesCopyAppValue(NULL, NULL)],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+ [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Check for API introduced in MacOS X 10.3.
+ AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+ [gt_cv_func_CFLocaleCopyCurrent=yes],
+ [gt_cv_func_CFLocaleCopyCurrent=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
+ [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/plugins/gingerbase/m4/lib-ld.m4 b/plugins/gingerbase/m4/lib-ld.m4
new file mode 100644
index 0000000..ebb3052
--- /dev/null
+++ b/plugins/gingerbase/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by GCC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ [re_direlt='/[^/][^/]*/\.\./']
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT([$LD])
+else
+ AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/plugins/gingerbase/m4/lib-link.m4 b/plugins/gingerbase/m4/lib-link.m4
new file mode 100644
index 0000000..c73bd8e
--- /dev/null
+++ b/plugins/gingerbase/m4/lib-link.m4
@@ -0,0 +1,774 @@
+# lib-link.m4 serial 21 (gettext-0.18)
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+ dnl because these -l options might require -L options that are present in
+ dnl LIBS. -l options benefit only from the -L options listed before it.
+ dnl Otherwise, add it to the front of LIBS, because it may be a static
+ dnl library that depends on another static library that is present in LIBS.
+ dnl Static libraries benefit only from the static libraries listed after
+ dnl it.
+ case " $LIB[]NAME" in
+ *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+ *) LIBS="$LIB[]NAME $LIBS" ;;
+ esac
+ AC_TRY_LINK([$3], [$4],
+ [ac_cv_lib[]Name=yes],
+ [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE([rpath],
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_ARG_WITH(P_A_C_K[-prefix],
+[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+ dnl computed. So it has to be reset here.
+ HAVE_LIB[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+ popdef([P_A_C_K])
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
diff --git a/plugins/gingerbase/m4/lib-prefix.m4 b/plugins/gingerbase/m4/lib-prefix.m4
new file mode 100644
index 0000000..1601cea
--- /dev/null
+++ b/plugins/gingerbase/m4/lib-prefix.m4
@@ -0,0 +1,224 @@
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64.
+ dnl On glibc systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+ dnl the compiler's default mode by looking at the compiler's library search
+ dnl path. If at least one of its elements ends in /lib64 or points to a
+ dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+ dnl Otherwise we use the default, namely "lib".
+ dnl On Solaris systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+ dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+ dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+ dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+ dnl symlink is missing, so we set acl_libdirstem2 too.
+ AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+ [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+ ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+ ])
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
diff --git a/plugins/gingerbase/m4/nls.m4 b/plugins/gingerbase/m4/nls.m4
new file mode 100644
index 0000000..003704c
--- /dev/null
+++ b/plugins/gingerbase/m4/nls.m4
@@ -0,0 +1,32 @@
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper(a)cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible(a)clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
diff --git a/plugins/gingerbase/m4/po.m4 b/plugins/gingerbase/m4/po.m4
new file mode 100644
index 0000000..8bc921d
--- /dev/null
+++ b/plugins/gingerbase/m4/po.m4
@@ -0,0 +1,449 @@
+# po.m4 serial 17 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper(a)cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible(a)clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl defined by autoconf
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[ ]*VARIABLE[ ]*=/{
+ # Seen the first line of the variable definition.
+ s/^[ ]*VARIABLE[ ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+ @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+ @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/plugins/gingerbase/m4/progtest.m4 b/plugins/gingerbase/m4/progtest.m4
new file mode 100644
index 0000000..2d804ac
--- /dev/null
+++ b/plugins/gingerbase/m4/progtest.m4
@@ -0,0 +1,92 @@
+# progtest.m4 serial 6 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper(a)cygnus.com>, 1996.
+
+AC_PREREQ([2.50])
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL([ac_cv_path_$1],
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$][$1])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([$1])dnl
+])
--
2.1.0
1
0
[PATCH 04/15] V2 Ginger Base : base plugin build-aix and contrib
by chandra@linux.vnet.ibm.com 27 Sep '15
by chandra@linux.vnet.ibm.com 27 Sep '15
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/build-aux/config.rpath | 672 +++++++++++++++++++++
plugins/gingerbase/build-aux/genChangelog | 25 +
plugins/gingerbase/build-aux/pkg-version | 59 ++
plugins/gingerbase/contrib/DEBIAN/Makefile.am | 17 +
plugins/gingerbase/contrib/DEBIAN/control.in | 14 +
plugins/gingerbase/contrib/Makefile.am | 35 ++
plugins/gingerbase/contrib/check_i18n.py | 82 +++
.../gingerbase/contrib/gingerbase.spec.fedora.in | 68 +++
plugins/gingerbase/contrib/gingerbase.spec.suse.in | 62 ++
plugins/gingerbase/contrib/make-deb.sh.in | 15 +
10 files changed, 1049 insertions(+)
create mode 100644 plugins/gingerbase/build-aux/config.rpath
create mode 100755 plugins/gingerbase/build-aux/genChangelog
create mode 100755 plugins/gingerbase/build-aux/pkg-version
create mode 100644 plugins/gingerbase/contrib/DEBIAN/Makefile.am
create mode 100644 plugins/gingerbase/contrib/DEBIAN/control.in
create mode 100644 plugins/gingerbase/contrib/Makefile.am
create mode 100755 plugins/gingerbase/contrib/check_i18n.py
create mode 100644 plugins/gingerbase/contrib/gingerbase.spec.fedora.in
create mode 100644 plugins/gingerbase/contrib/gingerbase.spec.suse.in
create mode 100644 plugins/gingerbase/contrib/make-deb.sh.in
diff --git a/plugins/gingerbase/build-aux/config.rpath b/plugins/gingerbase/build-aux/config.rpath
new file mode 100644
index 0000000..17298f2
--- /dev/null
+++ b/plugins/gingerbase/build-aux/config.rpath
@@ -0,0 +1,672 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2010 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord(a)gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja(a)dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ library_names_spec='$libname.a'
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd1*)
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ nto-qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/plugins/gingerbase/build-aux/genChangelog b/plugins/gingerbase/build-aux/genChangelog
new file mode 100755
index 0000000..803f24e
--- /dev/null
+++ b/plugins/gingerbase/build-aux/genChangelog
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# This script is based on code from the Kandan project:
+# https://github.com/kandanapp/kandan/blob/master/gen-changelog.sh
+
+echo "CHANGELOG"
+echo "========="
+echo
+git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags | tac |grep -v '^$' | while read TAG ; do
+ if [ $NEXT ]; then
+ echo "#### [$NEXT] ####"
+ elif [ "$1" != "--release" ]; then
+ echo "#### [Current] ####"
+ else
+ NEXT=$TAG
+ continue
+ fi
+ GIT_PAGER=cat git log --pretty=format:" * [%h] %<(78,trunc)%s (%an)" $TAG..$NEXT
+ NEXT=$TAG
+ echo; echo
+done
+FIRST=$(git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags | head -1)
+
+echo "#### [$FIRST] ####"
+GIT_PAGER=cat git log --pretty=format:" * [%h] %<(78,trunc)%s (%an)" $FIRST
diff --git a/plugins/gingerbase/build-aux/pkg-version b/plugins/gingerbase/build-aux/pkg-version
new file mode 100755
index 0000000..749cf6c
--- /dev/null
+++ b/plugins/gingerbase/build-aux/pkg-version
@@ -0,0 +1,59 @@
+#!/bin/sh
+#
+# Copyright 2008-2012 Red Hat, Inc.
+#
+# 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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# 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
+
+# tags and output versions:
+# - 4.9.0 => 4.9.0 (upstream clean)
+# - 4.9.0-1 => 4.9.0 (downstream clean)
+# - 4.9.0-2-g34e62f => 4.9.0 (upstream dirty)
+# - 4.9.0-1-2-g34e62f => 4.9.0 (downstream dirty)
+AWK_VERSION='
+ BEGIN { FS="-" }
+ /^[0-9]/ {
+ print $1
+ }'
+
+# tags and output releases:
+# - 4.9.0 => 0 (upstream clean)
+# - 4.9.0-1 => 1 (downstream clean)
+# - 4.9.0-2-g34e62f1 => 2.git34e62f1 (upstream dirty)
+# - 4.9.0-1-2-g34e62f1 => 1.2.git34e62f1 (downstream dirty)
+AWK_RELEASE='
+ BEGIN { FS="-"; OFS="." }
+ /^[0-9]/ {
+ if (NF == 1) print 0
+ else if (NF == 2) print $2
+ else if (NF == 3) print $2, "git" substr($3, 2)
+ else if (NF == 4) print $2, $3, "git" substr($4, 2)
+ }'
+
+if [ ! -d .git ]; then
+ PKG_VERSION=`cat VERSION`
+else
+ PKG_VERSION=`git describe --tags --match "[0-9]*" || cat VERSION`
+fi
+
+if test "x$1" = "x--full"; then
+ echo $PKG_VERSION | tr -d '[:space:]'
+elif test "x$1" = "x--version"; then
+ echo $PKG_VERSION | awk "$AWK_VERSION" | tr -cd '[:alnum:].'
+elif test "x$1" = "x--release"; then
+ echo $PKG_VERSION | awk "$AWK_RELEASE" | tr -cd '[:alnum:].'
+else
+ echo "usage: $0 [--full|--version|--release]"
+ exit 1
+fi
diff --git a/plugins/gingerbase/contrib/DEBIAN/Makefile.am b/plugins/gingerbase/contrib/DEBIAN/Makefile.am
new file mode 100644
index 0000000..43e19ab
--- /dev/null
+++ b/plugins/gingerbase/contrib/DEBIAN/Makefile.am
@@ -0,0 +1,17 @@
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+CLEANFILES = control
diff --git a/plugins/gingerbase/contrib/DEBIAN/control.in b/plugins/gingerbase/contrib/DEBIAN/control.in
new file mode 100644
index 0000000..aacf946
--- /dev/null
+++ b/plugins/gingerbase/contrib/DEBIAN/control.in
@@ -0,0 +1,14 @@
+Package: @PACKAGE_NAME@
+Version: @PACKAGE_VERSION@
+Section: base
+Priority: optional
+Architecture: all
+Depends: wok,
+ python-psutil (>= 0.6.0),
+ sosreport,
+Build-Depends: libxslt,
+ python-lxml
+Maintainer: Daniel Henrique Barboza <danielhb(a)linux.vnet.ibm.com>
+Description: Ginger Base is an open source base host management plugin for Wok
+(Webserver Originated from Kimchi), that provides an intuitive web panel with
+common tools for configuring and managing the Linux systems.
diff --git a/plugins/gingerbase/contrib/Makefile.am b/plugins/gingerbase/contrib/Makefile.am
new file mode 100644
index 0000000..8e02cfd
--- /dev/null
+++ b/plugins/gingerbase/contrib/Makefile.am
@@ -0,0 +1,35 @@
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SUBDIRS = DEBIAN
+
+EXTRA_DIST = \
+ check_i18n.py \
+ gingerbase.spec.fedora.in \
+ gingerbase.spec.suse.in \
+ make-deb.sh.in \
+ $(NULL)
+
+make-deb.sh: make-deb.sh.in $(top_builddir)/config.status
+ $(AM_V_GEN)sed \
+ -e 's|[@]PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \
+ -e 's|[@]PACKAGE_RELEASE[@]|$(PACKAGE_RELEASE)|g' \
+ < $< > $@-t && \
+ chmod a+x $@-t && \
+ mv $@-t $@
+BUILT_SOURCES = make-deb.sh
+
+CLEANFILES = gingerbase.spec.fedora gingerbase.spec.suse gingerbase.spec make-deb.sh
diff --git a/plugins/gingerbase/contrib/check_i18n.py b/plugins/gingerbase/contrib/check_i18n.py
new file mode 100755
index 0000000..fe1fc0b
--- /dev/null
+++ b/plugins/gingerbase/contrib/check_i18n.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python2
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import imp
+import os
+import re
+import sys
+
+
+# Match all conversion specifier with mapping key
+PATTERN = re.compile(r'''%\([^)]+\) # Mapping key
+ [#0\-+]? # Conversion flags (optional)
+ (\d+|\*)? # Minimum field width (optional)
+ (\.(\d+|\*))? # Precision (optional)
+ [lLh]? # Length modifier (optional)
+ [cdeEfFgGioursxX%] # Conversion type''',
+ re.VERBOSE)
+BAD_PATTERN = re.compile(r"%\([^)]*?\)")
+
+
+def load_i18n_module(i18nfile):
+ path = os.path.dirname(i18nfile)
+ mname = i18nfile.replace("/", "_").rstrip(".py")
+ mobj = imp.find_module("i18n", [path])
+ return imp.load_module(mname, *mobj)
+
+
+def check_string_formatting(messages):
+ for k, v in messages.iteritems():
+ if BAD_PATTERN.findall(PATTERN.sub(" ", v)):
+ print "bad i18n string formatting:"
+ print " %s: %s" % (k, v)
+ exit(1)
+
+
+def check_obsolete_messages(path, messages):
+ def find_message_key(path, k):
+ for root, dirs, files in os.walk(path):
+ for f in files:
+ fname = os.path.join(root, f)
+ if (not fname.endswith("i18n.py") and fname.endswith(".py") or
+ fname.endswith(".json")):
+ with open(fname) as f:
+ string = "".join(f.readlines())
+ if k in string:
+ return True
+ return False
+
+ for k in messages.iterkeys():
+ if not find_message_key(path, k):
+ print " %s is obsolete, it is no longer in use" % k
+ exit(1)
+
+
+def main():
+ print "Checking for invalid i18n string..."
+ for f in sys.argv[1:]:
+ messages = load_i18n_module(f).messages
+ check_string_formatting(messages)
+ check_obsolete_messages(os.path.dirname(f), messages)
+ print "Checking for invalid i18n string successfully"
+
+
+if __name__ == '__main__':
+ main()
diff --git a/plugins/gingerbase/contrib/gingerbase.spec.fedora.in b/plugins/gingerbase/contrib/gingerbase.spec.fedora.in
new file mode 100644
index 0000000..a4ffb66
--- /dev/null
+++ b/plugins/gingerbase/contrib/gingerbase.spec.fedora.in
@@ -0,0 +1,68 @@
+Name: Ginger Base
+Version: @PACKAGE_VERSION@
+Release: @PACKAGE_RELEASE@%{?dist}
+Summary: Wok plugin for base host management
+BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
+BuildArch: noarch
+Group: System Environment/Base
+License: LGPL/ASL2
+Source0: %{name}-%{version}.tar.gz
+Requires: wok
+Requires: python-psutil >= 0.6.0
+Requires: sos
+BuildRequires: libxslt
+BuildRequires: python-lxml
+
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
+%global with_systemd 1
+%endif
+
+%if 0%{?rhel} == 6
+Requires: python-ordereddict
+BuildRequires: python-unittest2
+%endif
+
+%description
+Ginger Base is an open source base host management plugin for Wok
+(Webserver Originated from Kimchi), that provides an intuitive web panel with
+common tools for configuring and managing the Linux systems.
+
+%prep
+
+
+%build
+%configure
+make
+
+
+%install
+rm -rf %{buildroot}
+make DESTDIR=%{buildroot} install
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%attr(-,root,root)
+%{python_sitelib}/wok/plugins/gingerbase/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/control/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/model/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/API.json
+%{python_sitelib}/wok/plugins/gingerbase/
+%{_datadir}/wok/plugins/gingerbase/doc/API.md
+%{_datadir}/wok/plugins/gingerbase/doc/README.md
+%{_datadir}/wok/plugins/gingerbase/doc/README-federation.md
+%{_prefix}/share/locale/*/LC_MESSAGES/gingerbase.mo
+%{_datadir}/wok/plugins/gingerbase/ui/config/*.xml
+%{_datadir}/wok/plugins/gingerbase/ui/
+%{_datadir}/wok/plugins/gingerbase
+%{_sysconfdir}/wok/plugins.d/gingerbase.conf
+%{_sysconfdir}/wok/
+%{_sharedstatedir}/wok/debugreports/
+%{_sharedstatedir}/wok/
+
+
+%changelog
+* Thu Aug 25 2015 Chandra Shehkhar Reddy Potula <chandra(a)linux.vnet.ibm.com> 0.0-1s
+- First build
diff --git a/plugins/gingerbase/contrib/gingerbase.spec.suse.in b/plugins/gingerbase/contrib/gingerbase.spec.suse.in
new file mode 100644
index 0000000..ba92606
--- /dev/null
+++ b/plugins/gingerbase/contrib/gingerbase.spec.suse.in
@@ -0,0 +1,62 @@
+Name: Ginger Base
+Version: @PACKAGE_VERSION@
+Release: @PACKAGE_RELEASE@%{?dist}
+Summary: Wok plugin for base host management
+BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
+BuildArch: noarch
+Group: System Environment/Base
+License: LGPL/ASL2
+Source0: %{name}-%{version}.tar.gz
+Requires: wok
+Requires: python-psutil >= 0.6.0
+BuildRequires: libxslt-tools
+BuildRequires: python-lxml
+
+%if 0%{?suse_version} == 1100
+Requires: python-ordereddict
+%endif
+
+%if 0%{?suse_version} > 1140
+%global with_systemd 1
+%endif
+
+%description
+Ginger Base is an open source base host management plugin for Wok
+(Webserver Originated from Kimchi), that provides an intuitive web panel with
+common tools for configuring and managing the Linux systems.
+
+%prep
+%setup
+
+%install
+rm -rf %{buildroot}
+make DESTDIR=%{buildroot} install
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%attr(-,root,root)
+%{python_sitelib}/wok/plugins/gingerbase/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/control/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/model/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/API.json
+%{python_sitelib}/wok/plugins/gingerbase/
+%{_datadir}/wok/plugins/gingerbase/doc/API.md
+%{_datadir}/wok/plugins/gingerbase/doc/README.md
+%{_datadir}/wok/plugins/gingerbase/doc/README-federation.md
+%{_prefix}/share/locale/*/LC_MESSAGES/gingerbase.mo
+%{_datadir}/wok/plugins/gingerbase/ui/config/*.xml
+%{_datadir}/wok/plugins/gingerbase/ui/
+%{_datadir}/wok/plugins/gingerbase
+%{_sysconfdir}/wok/plugins.d/gingerbase.conf
+%{_sysconfdir}/wok/
+%{_var}/lib/wok/debugreports/
+%{_var}/lib/wok/
+
+
+
+%changelog
+* Thu Aug 25 2015 Chandra Shehkhar Reddy Potula <chandra(a)linux.vnet.ibm.com> 0.0-1
+- First build
diff --git a/plugins/gingerbase/contrib/make-deb.sh.in b/plugins/gingerbase/contrib/make-deb.sh.in
new file mode 100644
index 0000000..a4c92bf
--- /dev/null
+++ b/plugins/gingerbase/contrib/make-deb.sh.in
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+VERSION="@PACKAGE_VERSION@"
+RELEASE="@PACKAGE_RELEASE@"
+
+if [ ! -f configure ]; then
+ echo "Please run this script from the top of the package tree"
+ exit 1
+fi
+
+TMPDIR=`mktemp -d`
+
+make DESTDIR=$TMPDIR install-deb
+dpkg-deb -b $TMPDIR gingerbase-${VERSION}-${RELEASE}.noarch.deb
+rm -rf $TMPDIR
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/README.md | 1 +
plugins/gingerbase/docs/API.md | 316 ++++++++++++++++++++++++
plugins/gingerbase/docs/Makefile.am | 26 ++
plugins/gingerbase/docs/README.md | 183 ++++++++++++++
plugins/gingerbase/docs/gingerbase-host-tab.png | Bin 0 -> 79669 bytes
plugins/gingerbase/docs/kimchi-login.png | Bin 0 -> 318041 bytes
6 files changed, 526 insertions(+)
create mode 120000 plugins/gingerbase/README.md
create mode 100644 plugins/gingerbase/docs/API.md
create mode 100644 plugins/gingerbase/docs/Makefile.am
create mode 100644 plugins/gingerbase/docs/README.md
create mode 100644 plugins/gingerbase/docs/gingerbase-host-tab.png
create mode 100644 plugins/gingerbase/docs/kimchi-login.png
diff --git a/plugins/gingerbase/README.md b/plugins/gingerbase/README.md
new file mode 120000
index 0000000..0e01b43
--- /dev/null
+++ b/plugins/gingerbase/README.md
@@ -0,0 +1 @@
+docs/README.md
\ No newline at end of file
diff --git a/plugins/gingerbase/docs/API.md b/plugins/gingerbase/docs/API.md
new file mode 100644
index 0000000..2c72f3b
--- /dev/null
+++ b/plugins/gingerbase/docs/API.md
@@ -0,0 +1,316 @@
+## Project Gigner Base REST API Specification
+
+The Ginger Base API provides all functionality to the application and may be used
+directly by external tools. In the following sections you will find the
+specification of all Collections and Resource types that are supported and the
+URIs where they can be accessed. In order to use the API effectively, please
+the following general conventions:
+
+* The **Content Type** of the API is JSON. When making HTTP requests to this
+ API you should specify the following headers:
+ * Accept: application/json
+ * Content-type: application/json
+* A **Collection** is a group of Resources of a given type.
+ * A **GET** request retrieves a list of summarized Resource representations
+ This summary *may* include all or some of the Resource properties but
+ *must* include a link to the full Resource representation.
+ * A **POST** request will create a new Resource in the Collection. The set
+ of Resource properties *must* be specified as a JSON object in the request
+ body.
+ * No other HTTP methods are supported for Collections
+* A **Resource** is a representation of a singular object in the API (eg.
+ Virtual Machine).
+ * A **GET** request retrieves the full Resource representation.
+ * A **DELETE** request will delete the Resource. This request *may* contain
+ a JSON object which specifies optional parameters.
+ * A **PUT** request is used to modify the properties of a Resource (eg.
+ Change the name of a Virtual Machine). This kind of request *must not*
+ alter the live state of the Resource. Only *actions* may alter live state.
+ * A **POST** request commits an *action* upon a Resource (eg. Start a
+ Virtual Machine). This request is made to a URI relative to the Resource
+ URI. Available *actions* are described within the *actions* property of a
+ Resource representation. The request body *must* contain a JSON object
+ which specifies parameters.
+* URIs begin with '/plugins/gingerbase' to indicate the root of gingerbase plugin.
+ * Variable segments in the URI begin with a ':' and should replaced with the
+ appropriate resource identifier.
+
+#### Collection: Debug Reports
+
+**URI:** /plugins/gingerbase/debugreports
+
+**Methods:**
+
+* **GET**: Retrieve a summarized list of all available Debug Reports
+* **POST**: Create a new Debug Report. This POST method is different
+ from the other ones. The return resource is a task resource which
+ is identified by the url below
+ * task resource. * See Resource: Task *
+
+### Resource: Debug Report
+
+**URI:** /plugins/gingerbase/debugreports/*:name*
+
+A Debug Report is an archive of logs and other information about the host that
+is used to diagnose and debug problems. The exact format and contents are
+specific to the low level collection tool being used.
+
+**Methods:**
+
+* **GET**: Retrieve the full description of Debug Report
+ * name: The debug report name used to identify the report
+ * uri: The URI path to download a debug report
+ * time: The time when the debug report is created
+
+* **PUT**: rename an existed debug report
+ * name: The new name for this debug report
+
+* **DELETE**: Remove the Debug Report
+ * name: The debug report name used to identify the report
+
+* **POST**: *See Debug Report Actions*
+
+**Actions (POST):**
+
+*No actions defined*
+
+### Sub-resource: Debug Report content
+
+**URI:** /plugins/gingerbase/debugreports/*:name*/content
+
+It is the sub-resource of Debug Report and the client use it to get the real content
+of the Debug Report file from the server
+
+* **GET**: Retrieve the content of a Debug Report file
+
+**Actions (POST):**
+
+*No actions defined*
+
+### Resource: Host
+
+**URI:** /plugins/gingerbase/host
+Contains information of host.
+
+**Methods:**
+
+* **GET**: Retrieve host static information
+ * memory: Total size of host physical memory
+ The unit is Bytes
+ * cpu_model: The model name of host CPU
+ * cpus: The number of online CPUs available on host
+ * os_distro: The OS distribution that runs on host
+ * os_version: The version of OS distribution
+ * os_codename: The code name of OS distribution
+
+* **POST**: *See Host Actions*
+
+**Actions (POST):**
+
+* reboot: Restart the host machine.
+ Only allowed if there is not vm running.
+* shutdown: Power off the host machine.
+ Only allowed if there is not vm running.
+* swupdate: Start the update of packages in background and return a Task resource
+ * task resource. * See Resource: Task *
+
+### Resource: HostStats
+
+**URI:** /plugins/gingerbase/host/stats
+
+Contains the host sample data.
+
+**Methods:**
+
+* **GET**: Retrieve host sample data
+ * cpu_utilization: A number between 0 and 100 which indicates the
+ percentage of CPU utilization.
+ * memory: memory statistics of host
+ * total: Total amount of memory. The unit is Bytes.
+ * free: The amount of memory left unused by the system. The unit is Bytes.
+ * buffers: The amount of memory used for file buffers. The unit is Bytes.
+ * cached: The amount of memory used as cache memory. The unit is Bytes.
+ * avail: The total amount of buffer, cache and free memory. The unit is Bytes.
+ * disk_read_rate: Expresses the total IO throughput for reads across
+ all disks (B/s).
+ * disk_write_rate: Expresses the total IO throughput for writes across
+ all disks (B/s).
+ * net_sent_rate: Expresses the total network throughput for writes across
+ all interfaces (B/s).
+ * net_recv_rate: Expresses the total network throughput for reads across
+ all interfaces (B/s).
+
+* **POST**: *See HostStats Actions*
+
+**Actions (POST):**
+
+*No actions defined*
+
+### Resource: HostStats
+
+**URI:** /plugins/gingerbase/host/cpuinfo
+
+The cores and sockets of a hosts's CPU. Useful when sizing VMs to take
+advantages of the perforamance benefits of SMT (Power) or Hyper-Threading (Intel).
+
+**Methods:**
+
+* **GET**: Retreives the sockets, cores, and threads values.
+ * threading_enabled: Whether CPU topology is supported on this system.
+ * sockets: The number of total sockets on a system.
+ * cores: The total number of cores per socket.
+ * threads_per_core: The threads per core.
+
+**Actions (PUT):**
+
+*No actions defined*
+
+**Actions (POST):**
+
+*No actions defined*
+
+
+### Resource: HostStatsHistory
+
+**URI:** /plugins/gingerbase/host/stats/history
+
+It is the sub-resource of Host Stats and the client uses it to get the host
+stats history
+
+**Methods:**
+
+* **GET**: Retrieve host sample data history
+ * cpu_utilization: CPU utilization history
+ * memory: Memory statistics history
+ * total: Total amount of memory. The unit is Bytes.
+ * free: The amount of memory left unused by the system. The unit is Bytes.
+ * buffers: The amount of memory used for file buffers. The unit is Bytes.
+ * cached: The amount of memory used as cache memory. The unit is Bytes.
+ * avail: The total amount of buffer, cache and free memory. The unit is Bytes.
+ * disk_read_rate: IO throughput for reads history
+ * disk_write_rate: IO throughput for writes history
+ * net_sent_rate: Network throughput for writes history
+ * net_recv_rate: Network throughput for reads history
+
+* **POST**: *See HostStatsHistory Actions*
+
+**Actions (POST):**
+
+*No actions defined*
+
+### Collection: Partitions
+
+**URI:** /plugins/gingerbase/host/partitions
+
+**Methods:**
+
+* **GET**: Retrieves a detailed list of all partitions of the host.
+
+### Resource: Partition
+
+**URI:** /plugins/gingerbase/host/partitions/*:name*
+
+**Methods:**
+
+* **GET**: Retrieve the description of a single Partition:
+ * name: The name of the partition. Used to identify it in this API
+ * path: The device path of this partition.
+ * type: The type of the partition:
+ * part: a standard partition
+ * lvm: a partition that belongs to a lvm
+ * fstype: The file system type of the partition
+ * size: The total size of the partition, in bytes
+ * mountpoint: If the partition is mounted, represents the mountpoint.
+ Otherwise blank.
+ * available: false, if the partition is in use by system; true, otherwise.
+
+### Collection: Host Packages Update
+
+**URI:** /plugins/gingerbase/host/packagesupdate
+
+Contains the information and action of packages update in the host.
+
+**Methods:**
+
+* **GET**: Retrieves a list of all packages to be updated in the host:
+
+### Resource: Host Package Update
+
+**URI:** /plugins/gingerbase/host/packagesupdate/*:name*
+
+Contains the information for a specific package to be updated.
+
+**Methods:**
+
+* **GET**: Retrieves a full description of a package:
+ * package_name: The name of the package to be updated
+ * arch: The architecture of the package
+ * version: The new version of the package
+ * repository: The repository name from where package will be downloaded
+
+### Collection: Host Repositories
+
+**URI:** /plugins/gingerbase/host/repositories
+
+**Methods:**
+
+* **GET**: Retrieve a summarized list of all repositories available
+* **POST**: Add a new repository
+ * baseurl: URL to the repodata directory when "is_mirror" is false.
+Otherwise, it can be URL to the mirror system for YUM. Can be an
+http://, ftp:// or file:// URL.
+ * repo_id *(optional)*: Unique YUM repository ID
+ * config: A dictionary that contains specific data according to repository
+ type.
+ * repo_name *(optional)*: YUM Repository name
+ * mirrorlist *(optional)*: Specifies a URL to a file containing a
+ list of baseurls for YUM repository
+ * dist: Distribution to DEB repository
+ * comps *(optional)*: List of components to DEB repository
+
+### Resource: Repository
+
+**URI:** /plugins/gingerbase/host/repositories/*:repo-id*
+
+**Methods:**
+
+* **GET**: Retrieve the full description of a Repository
+ * repo_id: Unique repository name for each repository, one word.
+ * baseurl: URL to the repodata directory when "is_mirror" is false.
+Otherwise, it can be URL to the mirror system for YUM. Can be an
+http://, ftp:// or file:// URL.
+ * enabled: True, when repository is enabled; False, otherwise
+ * config: A dictionary that contains specific data according to repository
+ type.
+ * repo_name: Human-readable string describing the YUM repository.
+ * mirrorlist: Specifies a URL to a file containing a list of baseurls
+ for YUM repository
+ * gpgcheck: True, to enable GPG signature verification; False, otherwise.
+ * gpgkey: URL pointing to the ASCII-armored GPG key file for the YUM
+ repository.
+ * dist: Distribution to DEB repository
+ * comps: List of components to DEB repository
+
+* **DELETE**: Remove the Repository
+* **POST**: *See Repository Actions*
+* **PUT**: update the parameters of existing Repository
+ * repo_id: Unique repository name for each repository, one word.
+ * baseurl: URL to the repodata directory when "is_mirror" is false.
+Otherwise, it can be URL to the mirror system for YUM. Can be an
+http://, ftp:// or file:// URL.
+ * config: A dictionary that contains specific data according to repository
+ type.
+ * repo_name: Human-readable string describing the YUM repository.
+ * mirrorlist: Specifies a URL to a file containing a list of baseurls
+ for YUM repository
+ * gpgcheck: True, to enable GPG signature verification; False, otherwise.
+ * gpgkey: URL pointing to the ASCII-armored GPG key file for the YUM
+ repository.
+ * dist: Distribution to DEB repository
+ * comps: List of components to DEB repository
+
+**Actions (POST):**
+
+* enable: Enable the Repository as package source
+* disable: Disable the Repository as package source
+
diff --git a/plugins/gingerbase/docs/Makefile.am b/plugins/gingerbase/docs/Makefile.am
new file mode 100644
index 0000000..5f2d7cc
--- /dev/null
+++ b/plugins/gingerbase/docs/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+docdir = $(datadir)/gingerbase/doc
+
+dist_doc_DATA = \
+ API.md \
+ README.md \
+ gingerbase-host-tab.png \
+ $(NULL)
diff --git a/plugins/gingerbase/docs/README.md b/plugins/gingerbase/docs/README.md
new file mode 100644
index 0000000..a9782bd
--- /dev/null
+++ b/plugins/gingerbase/docs/README.md
@@ -0,0 +1,183 @@
+Ginger Base Plugin
+==============
+
+Ginger Base is an open source base host management plugin for Wok
+(Webserver Originated from Kimchi), that provides an intuitive web panel with
+common tools for configuring and managing the Linux systems.
+
+Wok is a cherrypy-based web framework with HTML5 support that is extended by
+plugins which expose functionality through REST APIs.
+
+The current features of Base Host Management of Linux system include:
+ + Shutdown, Restart, Connect
+ + Basic Information
+ + System Statistics
+ + Software Updates
+ + Repository Management
+ + Debug Reports (SoS Reports)
+
+Browser Support
+===============
+
+Desktop Browser Support:
+-----------------------
+* **Internet Explorer:** IE9+
+* **Chrome:** Current-1 version
+* **Firefox:** Current-1 version Firefox 24ESR
+* **Safari:** Current-1 version
+* **Opera:** Current-1 version
+
+Mobile Browser Support:
+-----------------------
+* **Safari iOS:** Current-1 version
+* **Android Browser** Current-1 version
+
+Current-1 version denotes that we support the current stable version of the
+browser and the version that preceded it. For example, if the current version of
+a browser is 24.x, we support the 24.x and 23.x versions.This does not mean that
+kimchi cannot be used in other browsers, however, functionality and appearance
+may be diminished and we may not be able to provide support for any problems you
+find.
+
+Hypervisor Distro Support
+=========================
+
+Ginger Base and Wok might run on any GNU/Linux distribution that meets the conditions
+described on the 'Getting Started' section below.
+
+The Kimchi community makes an effort to test it with the latest versions of
+Fedora, RHEL, OpenSuSe, and Ubuntu.
+
+Getting Started
+===============
+
+Install Dependencies
+--------------------
+
+**For fedora and RHEL:**
+
+ $ sudo yum install gcc make autoconf automake gettext-devel git \
+ python-cherrypy python-cheetah \
+ python-jsonschema rpm-build \
+ python-psutil sos python-lxml \
+ libxslt pyparted \
+ python-websockify python-configobj
+
+ # If using RHEL, install the following additional packages:
+ $ sudo yum install python-unittest2 python-ordereddict
+
+ # Restart libvirt to allow configuration changes to take effect
+ $ sudo service libvirtd restart
+
+ Packages version requirement:
+ python-psutil >= 0.6.0
+
+ # These dependencies are only required if you want to run the tests:
+ $ sudo yum install pyflakes python-pep8 python-requests
+
+*Note for RHEL users*: Some of the above packages are located in the Red Hat
+EPEL repositories. See
+[this FAQ](http://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.…
+for more information on how to configure your system to access this repository.
+
+And for RHEL7 systems, you also need to subscribe to the "RHEL Server Optional"
+channel at RHN Classic or Red Hat Satellite.
+
+**For debian:**
+
+ $ sudo apt-get install gcc make autoconf automake gettext git \
+ python-cherrypy3 python-cheetah \
+ python-configobj python-jsonschema \
+ python-psutil sosreport \
+ python-lxml xsltproc \
+ python-parted websockify
+
+ Packages version requirement:
+ python-jsonschema >= 1.3.0
+ python-psutil >= 0.6.0
+
+ # These dependencies are only required if you want to run the tests:
+ $ sudo apt-get install pep8 pyflakes python-requests
+
+**For openSUSE:**
+
+ $ sudo zypper install gcc make autoconf automake gettext-tools git \
+ python-CherryPy python-Cheetah \
+ python-jsonschema rpm-build \
+ python-psutil python-lxml \
+ libxslt-tools python-xml python-parted \
+ python-configobj python-websockify
+
+ Packages version requirement:
+ python-psutil >= 0.6.0
+
+ # These dependencies are only required if you want to run the tests:
+ $ sudo zypper install python-pyflakes python-pep8 python-requests
+
+*Note for openSUSE users*: Some of the above packages are located in different
+openSUSE repositories. See
+[this FAQ](http://download.opensuse.org/repositories/home:GRNET:synnefo/) for
+python-parted; And
+[this FAQ](http://en.opensuse.org/SDB:Add_package_repositories) for more
+information on how configure your system to access this repository.
+
+Build and Install
+-----------------
+
+ Wok:
+ $ ./autogen.sh --system
+
+ $ make
+ $ sudo make install # Optional if running from the source tree
+
+
+ Ginger Base:
+ $ cd plugins/gingerbasae
+
+ $ ./autogen.sh --system
+
+ $ make
+ $ sudo make install # Optional if running from the source tree
+
+Run
+---
+
+ $ systemctl start wokd
+
+
+Test
+----
+
+ $ cd plugins/gingerbase
+ $ make check-local # check for i18n and formatting errors
+ $ sudo make check
+
+After all tests are executed, a summary will be displayed containing any
+errors/failures which might have occurred.
+
+Usage
+-----
+
+Connect your browser to https://localhost:8001. You should see a screen like:
+
+
+
+Wok uses PAM to authenticate users so you can log in with the same username
+and password that you would use to log in to the machine itself.
+
+
+
+Ginger Base Host tab provides the base host functionality like system information,
+ system statistics, software updates, repositories and debug reports functionality.
+
+Also Ginger Base provides shutdown, re-start and connect options.
+
+Participating
+-------------
+
+All patches are sent through our mailing list hosted by oVirt. More
+information can be found at:
+
+https://github.com/kimchi-project/kimchi/wiki/Communications
+
+Patches should be sent using git-send-email to kimchi-devel(a)ovirt.org.
diff --git a/plugins/gingerbase/docs/gingerbase-host-tab.png b/plugins/gingerbase/docs/gingerbase-host-tab.png
new file mode 100644
index 0000000000000000000000000000000000000000..d84168d7e0182e91a2ed839c70051e0c1e0c8a45
GIT binary patch
literal 79669
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
VxXX0{+N^&SV)#2i3&@w&{{w*cbGrZl
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/docs/kimchi-login.png b/plugins/gingerbase/docs/kimchi-login.png
new file mode 100644
index 0000000000000000000000000000000000000000..66387fd70adebc3b20b9520974a127ea7faa52ac
GIT binary patch
literal 318041
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%0A&`9-9b?c>R2A
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⪼mDSr{tK2+EhOBG_{{`e&G
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
NOI8XjSt(%@^gj?LcDMil
literal 0
HcmV?d00001
--
2.1.0
1
0
27 Sep '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/Makefile.am | 151 +++++++++++
plugins/gingerbase/VERSION | 1 +
plugins/gingerbase/__init__.py | 21 ++
plugins/gingerbase/autogen.sh | 21 ++
plugins/gingerbase/config.py.in | 61 +++++
plugins/gingerbase/configure.ac | 103 ++++++++
plugins/gingerbase/disks.py | 196 ++++++++++++++
plugins/gingerbase/gingerbase.conf | 32 +++
plugins/gingerbase/gingerbase.py | 62 +++++
plugins/gingerbase/i18n.py | 96 +++++++
plugins/gingerbase/lscpu.py | 122 +++++++++
plugins/gingerbase/mockmodel.py | 298 +++++++++++++++++++++
plugins/gingerbase/repositories.py | 529 +++++++++++++++++++++++++++++++++++++
plugins/gingerbase/swupdate.py | 263 ++++++++++++++++++
plugins/gingerbase/yumparser.py | 283 ++++++++++++++++++++
plugins/kimchi/disks.py | 196 --------------
plugins/kimchi/repositories.py | 529 -------------------------------------
plugins/kimchi/swupdate.py | 263 ------------------
plugins/kimchi/yumparser.py | 283 --------------------
19 files changed, 2239 insertions(+), 1271 deletions(-)
create mode 100644 plugins/gingerbase/Makefile.am
create mode 100644 plugins/gingerbase/VERSION
create mode 100644 plugins/gingerbase/__init__.py
create mode 100755 plugins/gingerbase/autogen.sh
create mode 100644 plugins/gingerbase/config.py.in
create mode 100644 plugins/gingerbase/configure.ac
create mode 100644 plugins/gingerbase/disks.py
create mode 100644 plugins/gingerbase/gingerbase.conf
create mode 100644 plugins/gingerbase/gingerbase.py
create mode 100644 plugins/gingerbase/i18n.py
create mode 100644 plugins/gingerbase/lscpu.py
create mode 100644 plugins/gingerbase/mockmodel.py
create mode 100644 plugins/gingerbase/repositories.py
create mode 100644 plugins/gingerbase/swupdate.py
create mode 100644 plugins/gingerbase/yumparser.py
delete mode 100644 plugins/kimchi/disks.py
delete mode 100644 plugins/kimchi/repositories.py
delete mode 100644 plugins/kimchi/swupdate.py
delete mode 100644 plugins/kimchi/yumparser.py
diff --git a/plugins/gingerbase/Makefile.am b/plugins/gingerbase/Makefile.am
new file mode 100644
index 0000000..cd7b7e8
--- /dev/null
+++ b/plugins/gingerbase/Makefile.am
@@ -0,0 +1,151 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SUBDIRS = contrib control docs model po tests ui
+
+gingerbase_PYTHON = $(filter-out config.py, $(wildcard *.py))
+
+nodist_gingerbase_PYTHON = config.py
+
+wokdir = $(pythondir)/wok
+gingerbasedir = $(pythondir)/wok/plugins/gingerbase
+
+confdir = $(sysconfdir)/wok/plugins.d
+dist_conf_DATA = gingerbase.conf
+
+AUTOMAKE_OPTIONS = foreign
+
+ACLOCAL_AMFLAGS = --install -I m4
+
+EXTRA_DIST = \
+ config.rpath \
+ API.json \
+ autogen.sh \
+ COPYING.ASL2 \
+ COPYING.LGPL \
+ CONTRIBUTE.md \
+ VERSION \
+ build-aux/pkg-version \
+ config.py.in \
+ $(NULL)
+
+
+PEP8_BLACKLIST = *config.py,*i18n.py,*tests/test_config.py
+
+I18N_FILES = ./i18n.py \
+ $(NULL)
+
+check-local:
+ contrib/check_i18n.py $(I18N_FILES)
+ find . -path './.git' -prune -type f -o \
+ -name '*.py' -o -name '*.py.in' | xargs $(PYFLAKES) | \
+ while read LINE; do echo "$$LINE"; false; done
+
+ $(PEP8) --version
+ $(PEP8) --filename '*.py,*.py.in' --exclude="$(PEP8_BLACKLIST)" .
+
+
+# Link built mo files in the source tree to enable use of translations from
+# within the source tree
+all-local:
+ while read L && test -n "$$L"; do \
+ dir=mo/$$L/LC_MESSAGES ; \
+ $(MKDIR_P) $$dir ; \
+ ln -sf ../../../po/$$L.gmo $$dir/gingerbase.mo ; \
+ done < po/LINGUAS
+
+do_substitution = \
+ sed -e 's,[@]prefix[@],$(prefix),g' \
+ -e 's,[@]datadir[@],$(datadir),g' \
+ -e 's,[@]sysconfdir[@],$(sysconfdir),g' \
+ -e 's,[@]localstatedir[@],$(localstatedir),g' \
+ -e 's,[@]pkgdatadir[@],$(pkgdatadir),g' \
+ -e 's,[@]wokdir[@],$(wokdir),g' \
+ -e 's,[@]gingerbasedir[@],$(gingerbasedir),g' \
+ -e 's,[@]kimchiversion[@],$(PACKAGE_VERSION),g' \
+ -e 's,[@]kimchirelease[@],$(PACKAGE_RELEASE),g' \
+ -e 's,[@]withspice[@],$(WITH_SPICE),g'
+
+config.py: config.py.in Makefile
+ $(do_substitution) < $(srcdir)/config.py.in > config.py
+
+
+#
+# Packaging helpers
+#
+
+install-deb: install
+ cp -R $(top_srcdir)/contrib/DEBIAN $(DESTDIR)/
+ mkdir -p $(DESTDIR)/var/lib/kimchi/debugreports
+
+
+deb: contrib/make-deb.sh
+ $(top_srcdir)/contrib/make-deb.sh
+
+gingerbase.spec: contrib/gingerbase.spec.fedora contrib/gingerbase.spec.suse
+ @if test -e /etc/redhat-release; then \
+ ln -sf contrib/gingerbase.spec.fedora $@ ; \
+ elif test -e /etc/SuSE-release; then \
+ ln -sf contrib/gingerbase.spec.suse $@ ; \
+ else \
+ echo "Unable to select a spec file for RPM build" ; \
+ /bin/false ; \
+ fi
+
+rpm: dist gingerbase.spec
+ $(MKDIR_P) rpm/BUILD rpm/RPMS rpm/SOURCES rpm/SPECS rpm/SRPMS
+ cp $(top_srcdir)/gingerbase.spec rpm/SPECS/gingerbase.spec
+ cp $(DIST_ARCHIVES) rpm/SOURCES
+ rpmbuild -ba --define "_topdir `pwd`/rpm" rpm/SPECS/gingerbase.spec
+
+fedora-rpm: contrib/gingerbase.spec.fedora
+ ln -sf contrib/gingerbase.spec.fedora gingerbase.spec
+ $(MAKE) rpm
+
+suse-rpm: contrib/gingerbase.spec.suse
+ ln -sf contrib/gingerbase.spec.suse gingerbase.spec
+ $(MAKE) rpm
+
+ChangeLog:
+ @if test -d .git; then \
+ $(top_srcdir)/build-aux/genChangelog --release > $@; \
+ fi
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(gingerbasedir)
+ $(INSTALL_DATA) API.json $(DESTDIR)$(gingerbasedir)/API.json
+ mkdir -p $(DESTDIR)/var/lib/kimchi/debugreports
+
+uninstall-local:
+ $(RM) $(DESTDIR)$(gingerbasedir)/API.json
+ $(RM) -rf $(DESTDIR)/var/lib/kimchi
+
+VERSION:
+ @if test -d .git; then \
+ git describe --abbrev=0 > $@; \
+ fi
+
+.PHONY: deb install-deb rpm fedora-rpm suse-rpm ChangeLog VERSION
+
+
+clean-local:
+ rm -rf mo rpm
+
+BUILT_SOURCES = config.py
+CLEANFILES = config.py gingerbase.spec `find "$(top_srcdir)" -type f -name "*.pyc" -print`
diff --git a/plugins/gingerbase/VERSION b/plugins/gingerbase/VERSION
new file mode 100644
index 0000000..bc80560
--- /dev/null
+++ b/plugins/gingerbase/VERSION
@@ -0,0 +1 @@
+1.5.0
diff --git a/plugins/gingerbase/__init__.py b/plugins/gingerbase/__init__.py
new file mode 100644
index 0000000..21a12a9
--- /dev/null
+++ b/plugins/gingerbase/__init__.py
@@ -0,0 +1,21 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from gingerbase import GingerBase
+__all__ = [GingerBase]
diff --git a/plugins/gingerbase/autogen.sh b/plugins/gingerbase/autogen.sh
new file mode 100755
index 0000000..0f22dba
--- /dev/null
+++ b/plugins/gingerbase/autogen.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+aclocal
+automake --add-missing
+autoreconf
+
+if [ ! -f "configure" ]; then
+ echo "Failed to generate configure script. Check to make sure autoconf, "
+ echo "automake, and other build dependencies are properly installed."
+ exit 1
+fi
+
+if [ "x$1" == "x--system" ]; then
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+else
+ if [ $# -gt 0 ]; then
+ ./configure $@
+ else
+ ./configure --prefix=/usr/local
+ fi
+fi
diff --git a/plugins/gingerbase/config.py.in b/plugins/gingerbase/config.py.in
new file mode 100644
index 0000000..1ebc46c
--- /dev/null
+++ b/plugins/gingerbase/config.py.in
@@ -0,0 +1,61 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+import os
+import platform
+import threading
+
+from wok.config import CACHEEXPIRES, PluginConfig, PluginPaths
+from wok.xmlutils.utils import xpath_get_text
+
+gingerBaseLock = threading.Lock()
+
+
+def get_debugreports_path():
+ return os.path.join(PluginPaths('gingerbase').state_dir, 'debugreports')
+
+
+class GingerBasePaths(PluginPaths):
+
+ def __init__(self):
+ super(GingerBasePaths, self).__init__('gingerbase')
+
+
+gingerBasePaths = GingerBasePaths()
+
+
+class GingerBaseConfig(PluginConfig):
+ def __init__(self):
+ super(GingerBaseConfig, self).__init__('gingerbase')
+
+ custom_config = {}
+ for dirname in ('css', 'js', 'images'):
+ custom_config['/' + dirname] = {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': os.path.join(gingerBasePaths.ui_dir,
+ dirname),
+ 'tools.wokauth.on': False,
+ 'tools.nocache.on': False}
+ if dirname != 'images':
+ custom_config['/' + dirname].update({
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES})
+
+ self.update(custom_config)
diff --git a/plugins/gingerbase/configure.ac b/plugins/gingerbase/configure.ac
new file mode 100644
index 0000000..00aba89
--- /dev/null
+++ b/plugins/gingerbase/configure.ac
@@ -0,0 +1,103 @@
+#
+# Ginger Base
+#
+# Copyright IBM Corp, 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+AC_INIT([gingerbase], [m4_esyscmd([./build-aux/pkg-version --version])])
+
+AC_SUBST([PACKAGE_VERSION],
+ [m4_esyscmd([./build-aux/pkg-version --version])])
+
+AC_SUBST([PACKAGE_RELEASE],
+ [m4_esyscmd([./build-aux/pkg-version --release])])
+
+# Testing for version and release
+AS_IF([test "x$PACKAGE_VERSION" = x],
+ AC_MSG_ERROR([package version not defined]))
+AS_IF([test "x$PACKAGE_RELEASE" = x],
+ AC_MSG_ERROR([package release not defined]))
+
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([-Wno-portability])
+AM_PATH_PYTHON([2.6])
+AC_PATH_PROG([PEP8], [pep8], [/usr/bin/pep8])
+AC_PYTHON_MODULE([unittest])
+AC_SUBST([HAVE_PYMOD_UNITTEST])
+AC_SUBST([PYTHON_VERSION])
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION([0.10])
+AC_PATH_PROG([CHEETAH], [cheetah], [/usr/bin/cheetah])
+
+# Checking for pyflakes
+AC_PATH_PROG([PYFLAKES], [pyflakes])
+if test "x$PYFLAKES" = "x"; then
+ AC_MSG_WARN([pyflakes not found])
+fi
+
+AC_ARG_ENABLE(
+ [sample],
+ [AS_HELP_STRING(
+ [--enable-sample],
+ [enable sample plugin @<:@default=no@:>@]
+ )],
+ ,
+ [enable_sample="no"]
+)
+
+if test "${enable_sample}" = "yes"; then
+AC_SUBST([ENABLE_SAMPLE], [True])
+else
+AC_SUBST([ENABLE_SAMPLE], [False])
+fi
+
+AC_CONFIG_FILES([
+ po/Makefile.in
+ po/gen-pot
+ Makefile
+ docs/Makefile
+ control/Makefile
+ model/Makefile
+ ui/Makefile
+ ui/config/Makefile
+ ui/css/Makefile
+ ui/images/Makefile
+ ui/images/theme-default/Makefile
+ ui/js/Makefile
+ ui/pages/Makefile
+ ui/pages/help/Makefile
+ ui/pages/help/en_US/Makefile
+ ui/pages/help/de_DE/Makefile
+ ui/pages/help/es_ES/Makefile
+ ui/pages/help/fr_FR/Makefile
+ ui/pages/help/it_IT/Makefile
+ ui/pages/help/ja_JP/Makefile
+ ui/pages/help/ko_KR/Makefile
+ ui/pages/help/pt_BR/Makefile
+ ui/pages/help/ru_RU/Makefile
+ ui/pages/help/zh_CN/Makefile
+ ui/pages/help/zh_TW/Makefile
+ contrib/Makefile
+ contrib/DEBIAN/Makefile
+ contrib/DEBIAN/control
+ contrib/gingerbase.spec.fedora
+ contrib/gingerbase.spec.suse
+ tests/Makefile
+],[
+ chmod +x po/gen-pot
+])
+
+AC_OUTPUT
diff --git a/plugins/gingerbase/disks.py b/plugins/gingerbase/disks.py
new file mode 100644
index 0000000..7ce5135
--- /dev/null
+++ b/plugins/gingerbase/disks.py
@@ -0,0 +1,196 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os.path
+import re
+import subprocess
+from parted import Device as PDevice
+from parted import Disk as PDisk
+
+from wok.exception import OperationFailed
+from wok.utils import wok_log
+
+
+def _get_dev_node_path(maj_min):
+ """ Returns device node path given the device number 'major:min' """
+
+ dm_name = "/sys/dev/block/%s/dm/name" % maj_min
+ if os.path.exists(dm_name):
+ with open(dm_name) as dm_f:
+ content = dm_f.read().rstrip('\n')
+ return "/dev/mapper/" + content
+
+ uevent = "/sys/dev/block/%s/uevent" % maj_min
+ with open(uevent) as ueventf:
+ content = ueventf.read()
+
+ data = dict(re.findall(r'(\S+)=(".*?"|\S+)', content.replace("\n", " ")))
+
+ return "/dev/%s" % data["DEVNAME"]
+
+
+def _get_lsblk_devs(keys, devs=[]):
+ lsblk = subprocess.Popen(
+ ["lsblk", "-Pbo"] + [','.join(keys)] + devs,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = lsblk.communicate()
+ if lsblk.returncode != 0:
+ raise OperationFailed("GGBDISKS0001E", {'err': err})
+
+ return _parse_lsblk_output(out, keys)
+
+
+def _get_dev_major_min(name):
+ maj_min = None
+
+ keys = ["NAME", "MAJ:MIN"]
+ dev_list = _get_lsblk_devs(keys)
+
+ for dev in dev_list:
+ if dev['name'].split()[0] == name:
+ maj_min = dev['maj:min']
+ break
+ else:
+ raise OperationFailed("GGBDISKS0002E", {'device': name})
+
+ return maj_min
+
+
+def _is_dev_leaf(devNodePath):
+ try:
+ # By default, lsblk prints a device information followed by children
+ # device information
+ childrenCount = len(
+ _get_lsblk_devs(["NAME"], [devNodePath])) - 1
+ except OperationFailed as e:
+ # lsblk is known to fail on multipath devices
+ # Assume these devices contain children
+ wok_log.error(
+ "Error getting device info for %s: %s", devNodePath, e)
+ return False
+
+ return childrenCount == 0
+
+
+def _is_dev_extended_partition(devType, devNodePath):
+ if devType != 'part':
+ return False
+ diskPath = devNodePath.rstrip('0123456789')
+ device = PDevice(diskPath)
+ try:
+ extended_part = PDisk(device).getExtendedPartition()
+ except NotImplementedError as e:
+ wok_log.warning(
+ "Error getting extended partition info for dev %s type %s: %s",
+ devNodePath, devType, e.message)
+ # Treate disk with unsupported partiton table as if it does not
+ # contain extended partitions.
+ return False
+ if extended_part and extended_part.path == devNodePath:
+ return True
+ return False
+
+
+def _parse_lsblk_output(output, keys):
+ # output is on format key="value",
+ # where key can be NAME, TYPE, FSTYPE, SIZE, MOUNTPOINT, etc
+ lines = output.rstrip("\n").split("\n")
+ r = []
+ for line in lines:
+ d = {}
+ for key in keys:
+ expression = r"%s=\".*?\"" % key
+ match = re.search(expression, line)
+ field = match.group()
+ k, v = field.split('=', 1)
+ d[k.lower()] = v[1:-1]
+ r.append(d)
+ return r
+
+
+def _get_vgname(devNodePath):
+ """ Return volume group name of a physical volume. If the device node path
+ is not a physical volume, return empty string. """
+ pvs = subprocess.Popen(
+ ["pvs", "--unbuffered", "--nameprefixes", "--noheadings",
+ "-o", "vg_name", devNodePath],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = pvs.communicate()
+ if pvs.returncode != 0:
+ return ""
+
+ return re.findall(r"LVM2_VG_NAME='([^\']*)'", out)[0]
+
+
+def _is_available(name, devtype, fstype, mountpoint, majmin):
+ devNodePath = _get_dev_node_path(majmin)
+ # Only list unmounted and unformated and leaf and (partition or disk)
+ # leaf means a partition, a disk has no partition, or a disk not held
+ # by any multipath device. Physical volume belongs to no volume group
+ # is also listed. Extended partitions should not be listed.
+ if (devtype in ['part', 'disk', 'mpath'] and
+ fstype in ['', 'LVM2_member'] and
+ mountpoint == "" and
+ _get_vgname(devNodePath) == "" and
+ _is_dev_leaf(devNodePath) and
+ not _is_dev_extended_partition(devtype, devNodePath)):
+ return True
+ return False
+
+
+def get_partitions_names(check=False):
+ names = set()
+ keys = ["NAME", "TYPE", "FSTYPE", "MOUNTPOINT", "MAJ:MIN"]
+ # output is on format key="value",
+ # where key can be NAME, TYPE, FSTYPE, MOUNTPOINT
+ for dev in _get_lsblk_devs(keys):
+ # split()[0] to avoid the second part of the name, after the
+ # whiteline
+ name = dev['name'].split()[0]
+ if check and not _is_available(name, dev['type'], dev['fstype'],
+ dev['mountpoint'], dev['maj:min']):
+ continue
+ names.add(name)
+
+ return list(names)
+
+
+def get_partition_details(name):
+ majmin = _get_dev_major_min(name)
+ dev_path = _get_dev_node_path(majmin)
+
+ keys = ["TYPE", "FSTYPE", "SIZE", "MOUNTPOINT"]
+ try:
+ dev = _get_lsblk_devs(keys, [dev_path])[0]
+ except OperationFailed as e:
+ wok_log.error(
+ "Error getting partition info for %s: %s", name, e)
+ return {}
+
+ dev['available'] = _is_available(name, dev['type'], dev['fstype'],
+ dev['mountpoint'], majmin)
+ if dev['mountpoint']:
+ # Sometimes the mountpoint comes with [SWAP] or other
+ # info which is not an actual mount point. Filtering it
+ regexp = re.compile(r"\[.*\]")
+ if regexp.search(dev['mountpoint']) is not None:
+ dev['mountpoint'] = ''
+ dev['path'] = dev_path
+ dev['name'] = name
+ return dev
diff --git a/plugins/gingerbase/gingerbase.conf b/plugins/gingerbase/gingerbase.conf
new file mode 100644
index 0000000..27401c9
--- /dev/null
+++ b/plugins/gingerbase/gingerbase.conf
@@ -0,0 +1,32 @@
+[wok]
+enable = True
+plugin_class = "GingerBase"
+uri = "/plugins/gingerbase"
+extra_auth_api_class = "control.sub_nodes"
+
+[/]
+tools.trailing_slash.on = False
+request.methods_with_bodies = ('POST', 'PUT')
+tools.nocache.on = True
+tools.proxy.on = True
+tools.sessions.on = True
+tools.sessions.name = 'wok'
+tools.sessions.secure = True
+tools.sessions.httponly = True
+tools.sessions.locking = 'explicit'
+tools.sessions.storage_type = 'ram'
+tools.sessions.timeout = 10
+tools.wokauth.on = True
+
+[/data/debugreports]
+tools.staticdir.on = True
+tools.staticdir.dir = wok.config.PluginPaths('gingerbase').state_dir + '/debugreports'
+tools.nocache.on = False
+tools.wokauth.on = True
+tools.staticdir.content_types = {'xz': 'application/x-xz'}
+
+[/help]
+tools.staticdir.on = True
+tools.staticdir.dir = wok.config.PluginPaths('gingerbase').ui_dir + '/pages/help'
+tools.nocache.on = True
+
diff --git a/plugins/gingerbase/gingerbase.py b/plugins/gingerbase/gingerbase.py
new file mode 100644
index 0000000..95a088a
--- /dev/null
+++ b/plugins/gingerbase/gingerbase.py
@@ -0,0 +1,62 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import os
+
+from wok.i18n import messages
+from wok.root import WokRoot
+
+import config
+import mockmodel
+from control import sub_nodes
+from model import model as gingerBaseModel
+
+
+class GingerBase(WokRoot):
+ def __init__(self, wok_options):
+ if hasattr(wok_options, "model"):
+ self.model = wok_options.model
+ elif wok_options.test:
+ self.model = mockmodel.MockModel()
+ else:
+ self.model = gingerBaseModel.Model()
+
+ dev_env = wok_options.environment != 'production'
+ super(GingerBase, self).__init__(self.model, dev_env)
+
+ for ident, node in sub_nodes.items():
+ setattr(self, ident, node(self.model))
+
+ self.api_schema = json.load(open(os.path.join(os.path.dirname(
+ os.path.abspath(__file__)), 'API.json')))
+ self.paths = config.gingerBasePaths
+ self.domain = 'gingerbase'
+ self.messages = messages
+
+ make_dirs = [
+ os.path.abspath(config.get_debugreports_path()),
+ ]
+ for directory in make_dirs:
+ if not os.path.isdir(directory):
+ os.makedirs(directory)
+
+ def get_custom_conf(self):
+ return config.GingerBaseConfig()
+
diff --git a/plugins/gingerbase/i18n.py b/plugins/gingerbase/i18n.py
new file mode 100644
index 0000000..fa93ee6
--- /dev/null
+++ b/plugins/gingerbase/i18n.py
@@ -0,0 +1,96 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import gettext
+
+_ = gettext.gettext
+
+
+messages = {
+ "GGBAPI0001E": _("Unknown parameter %(value)s"),
+
+ "GGBASYNC0001E": _("Timeout of %(seconds)s seconds expired while running task '%(task)s."),
+
+ "GGBDISKS0001E": _("Error while getting block devices. Details: %(err)s"),
+ "GGBDISKS0002E": _("Error while getting block device information for %(device)s."),
+
+ "GGBDR0001E": _("Debug report %(name)s does not exist"),
+ "GGBDR0002E": _("Debug report tool not found in system"),
+ "GGBDR0003E": _("Unable to create debug report %(name)s. Details: %(err)s."),
+ "GGBDR0004E": _("Can not find any debug report with the given name %(name)s"),
+ "GGBDR0005E": _("Unable to generate debug report %(name)s. Details: %(err)s"),
+ "GGBDR0006E": _("You should give a name for the debug report file."),
+ "GGBDR0007E": _("Debug report name must be a string. Only letters, digits, underscore ('_') and hyphen ('-') are allowed."),
+ "GGBDR0008E": _("The debug report with specified name \"%(name)s\" already exists. Please use another one."),
+
+ "GGBPART0001E": _("Partition %(name)s does not exist in the host"),
+
+ "GGBHOST0001E": _("Unable to shutdown host machine as there are running virtual machines"),
+ "GGBHOST0002E": _("Unable to reboot host machine as there are running virtual machines"),
+ "GGBHOST0003E": _("Node device '%(name)s' not found"),
+ "GGBHOST0004E": _("Conflicting flag filters specified."),
+ "GGBHOST0005E": _("When specifying CPU topology, each element must be an integer greater than zero."),
+
+ "GGBPKGUPD0001E": _("No packages marked for update"),
+ "GGBPKGUPD0002E": _("Package %(name)s is not marked to be updated."),
+ "GGBPKGUPD0003E": _("Error while getting packages marked to be updated. Details: %(err)s"),
+ "GGBPKGUPD0004E": _("There is no compatible package manager for this system."),
+
+
+ "GGBREPOS0001E": _("YUM Repository ID must be one word only string."),
+ "GGBREPOS0002E": _("Repository URL must be an http://, ftp:// or file:// URL."),
+ "GGBREPOS0003E": _("Repository configuration is a dictionary with specific values according to repository type."),
+ "GGBREPOS0004E": _("Distribution to DEB repository must be a string"),
+ "GGBREPOS0005E": _("Components to DEB repository must be listed in a array"),
+ "GGBREPOS0006E": _("Components to DEB repository must be a string"),
+ "GGBREPOS0007E": _("Mirror list to repository must be a string"),
+ "GGBREPOS0008E": _("YUM Repository name must be string."),
+ "GGBREPOS0009E": _("GPG check must be a boolean value."),
+ "GGBREPOS0010E": _("GPG key must be a URL pointing to the ASCII-armored file."),
+ "GGBREPOS0011E": _("Could not update repository %(repo_id)s."),
+ "GGBREPOS0012E": _("Repository %(repo_id)s does not exist."),
+ "GGBREPOS0013E": _("Specify repository base URL, mirror list or metalink in order to create or update a YUM repository."),
+ "GGBREPOS0014E": _("Repository management tool was not recognized for your system."),
+ "GGBREPOS0015E": _("Repository %(repo_id)s is already enabled."),
+ "GGBREPOS0016E": _("Repository %(repo_id)s is already disabled."),
+ "GGBREPOS0017E": _("Could not remove repository %(repo_id)s."),
+ "GGBREPOS0018E": _("Could not write repository configuration file %(repo_file)s"),
+ "GGBREPOS0019E": _("Specify repository distribution in order to create a DEB repository."),
+ "GGBREPOS0020E": _("Could not enable repository %(repo_id)s."),
+ "GGBREPOS0021E": _("Could not disable repository %(repo_id)s."),
+ "GGBREPOS0022E": _("YUM Repository ID already exists"),
+ "GGBREPOS0023E": _("YUM Repository name must be a string"),
+ "GGBREPOS0024E": _("Unable to list repositories. Details: '%(err)s'"),
+ "GGBREPOS0025E": _("Unable to retrieve repository information. Details: '%(err)s'"),
+ "GGBREPOS0026E": _("Unable to add repository. Details: '%(err)s'"),
+ "GGBREPOS0027E": _("Unable to remove repository. Details: '%(err)s'"),
+ "GGBREPOS0028E": _("Configuration items: '%(items)s' are not supported by repository manager"),
+ "GGBREPOS0029E": _("Repository metalink must be an http://, ftp:// or file:// URL."),
+ "GGBREPOS0030E": _("Cannot specify mirrorlist and metalink at the same time."),
+
+
+ "GGBCPUINF0001E": _("The number of vCPUs is too large for this system."),
+ "GGBCPUINF0002E": _("Invalid vCPU/topology combination."),
+ "GGBCPUINF0003E": _("This host (or current configuration) does not allow CPU topology."),
+ "GGBCPUINF0004E": _("This host (or current configuration) does not allow to fetch lscpu details."),
+ "GGBCPUINF0005E": _("This host (or current configuration) does not provide Socket(s) information."),
+ "GGBCPUINF0006E": _("This host (or current configuration) does not provide Core(s) per socket information."),
+ "GGBCPUINF0007E": _("This host (or current configuration) does not provide Thread(s) per core information."),
+
+}
diff --git a/plugins/gingerbase/lscpu.py b/plugins/gingerbase/lscpu.py
new file mode 100644
index 0000000..af1c170
--- /dev/null
+++ b/plugins/gingerbase/lscpu.py
@@ -0,0 +1,122 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+import logging
+
+from wok.utils import run_command
+from wok.exception import NotFoundError
+
+
+class LsCpu(object):
+ """
+ Get CPU information about a CPU hyper threading/architecture on x86
+ """
+ def log_error(e):
+ """
+ param e: error details to be logged
+ """
+ log = logging.getLogger('Util')
+ log.warning('Exception in fetching the CPU architecture details: %s', e)
+
+ def __init__(self):
+ self.lsCpuInfo = {}
+ try:
+ # lscpu - display information about the CPU architecture
+ out, error, rc = run_command(['lscpu'])
+ # Output of lscpu on x86 is expected to be:
+ # Architecture: x86_64
+ # CPU op-mode(s): 32-bit, 64-bit
+ # Byte Order: Little Endian
+ # CPU(s): 4
+ # On-line CPU(s) list: 0-3
+ # Thread(s) per core: 2
+ # Core(s) per socket: 2
+ # Socket(s): 1
+ # NUMA node(s): 1
+ # Vendor ID: GenuineIntel
+ # CPU family: 6
+ # Model: 42
+ # Model name: Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz
+ # Stepping: 7
+ # CPU MHz: 976.421
+ # CPU max MHz: 3300.0000
+ # CPU min MHz: 800.0000
+ # BogoMIPS: 5182.99
+ # Virtualization: VT-x
+ # L1d cache: 32K
+ # L1i cache: 32K
+ # L2 cache: 256K
+ # L3 cache: 3072K
+ # NUMA node0 CPU(s): 0-3
+
+ if not rc and (not out.isspace()):
+ lscpuout = out.split('\n')
+ if lscpuout and len(lscpuout) > 0:
+ for line in lscpuout:
+ if ":" in line and (len(line.split(':')) == 2) :
+ self.lsCpuInfo[line.split(':')[0].strip()] = line.split(':')[1].strip()
+ else:
+ continue
+ except Exception, e:
+ self.log_error(e)
+ raise NotFoundError("GGBCPUINF0004E")
+
+ def get_sockets(self):
+ """
+ param self: object of the class self
+ return: Socket(s) (information about the CPU architecture)
+ """
+ try:
+ sockets = "Socket(s)"
+ if len(self.lsCpuInfo) > 0 and sockets in self.lsCpuInfo.keys():
+ return int(self.lsCpuInfo[sockets])
+ else:
+ raise NotFoundError("GGBCPUINF0005E")
+ except IndexError, e:
+ self.log_error(e)
+ raise NotFoundError("GGBCPUINF0005E")
+
+ def get_cores_per_socket(self):
+ """
+ param self: object of the class self
+ return: Core(s) per socket (information about the CPU architecture)
+ """
+ try:
+ cores_per_socket = "Core(s) per socket"
+ if len(self.lsCpuInfo) > 0 and cores_per_socket in self.lsCpuInfo.keys():
+ return int(self.lsCpuInfo[cores_per_socket])
+ else:
+ raise NotFoundError("GGBCPUINF0006E")
+ except IndexError, e:
+ self.log_error(e)
+ raise NotFoundError("GGBCPUINF0006E")
+
+ def get_threads_per_core(self):
+ """
+ param self: object of the class self
+ return: Thread(s) per core (information about the CPU architecture)
+ """
+ try:
+ threads_per_core = "Thread(s) per core"
+ if len(self.lsCpuInfo) > 0 and threads_per_core in self.lsCpuInfo.keys():
+ return int(self.lsCpuInfo[threads_per_core])
+ else:
+ raise NotFoundError("GGBCPUINF0007E")
+ except IndexError, e:
+ self.log_error(e)
+ raise NotFoundError("GGBCPUINF0007E")
diff --git a/plugins/gingerbase/mockmodel.py b/plugins/gingerbase/mockmodel.py
new file mode 100644
index 0000000..b92a24d
--- /dev/null
+++ b/plugins/gingerbase/mockmodel.py
@@ -0,0 +1,298 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import lxml.etree as ET
+import os
+import random
+import time
+
+from wok.objectstore import ObjectStore
+from wok.utils import add_task, wok_log
+
+import config
+from model import cpuinfo
+from model.debugreports import DebugReportsModel
+from model.model import Model
+
+
+fake_user = {'root': 'letmein!'}
+mockmodel_defaults = {'domain': 'test', 'arch': 'i686'}
+
+
+class MockModel(Model):
+
+ def __init__(self, objstore_loc=None):
+ # Override osinfo.defaults to ajust the values according to
+ # test:///default driver
+
+ self._mock_devices = MockDevices()
+ self._mock_partitions = MockPartitions()
+ self._mock_swupdate = MockSoftwareUpdate()
+ self._mock_repositories = MockRepositories()
+
+ cpuinfo.get_topo_capabilities = \
+ MockModel.get_topo_capabilities
+
+ super(MockModel, self).__init__(objstore_loc)
+ self.objstore_loc = objstore_loc
+ self.objstore = ObjectStore(objstore_loc)
+
+ # The MockModel methods are instantiated on runtime according to Model
+ # and BaseModel
+ # Because that a normal method override will not work here
+ # Instead of that we also need to do the override on runtime
+ for method in dir(self):
+ if method.startswith('_mock_'):
+ mock_method = getattr(self, method)
+ if not callable(mock_method):
+ continue
+
+ m = method[6:]
+ model_method = getattr(self, m)
+ setattr(self, '_model_' + m, model_method)
+ setattr(self, m, mock_method)
+
+ DebugReportsModel._gen_debugreport_file = self._gen_debugreport_file
+
+ def reset(self):
+ self._mock_swupdate = MockSoftwareUpdate()
+ self._mock_repositories = MockRepositories()
+
+ if hasattr(self, 'objstore'):
+ self.objstore = ObjectStore(self.objstore_loc)
+
+ @staticmethod
+ def get_topo_capabilities(conn):
+ # The libvirt test driver doesn't return topology.
+ xml = "<topology sockets='1' cores='2' threads='2'/>"
+ return ET.fromstring(xml)
+
+ def _gen_debugreport_file(self, name):
+ return add_task('/plugins/gingerbase/debugreports/%s' % name, self._create_log,
+ self.objstore, name)
+
+ def _create_log(self, cb, name):
+ path = config.get_debugreports_path()
+ tmpf = os.path.join(path, name + '.tmp')
+ realf = os.path.join(path, name + '.txt')
+ length = random.randint(1000, 10000)
+ with open(tmpf, 'w') as fd:
+ while length:
+ fd.write('I am logged')
+ length = length - 1
+ os.rename(tmpf, realf)
+ cb("OK", True)
+
+ def _mock_host_shutdown(self, *name):
+ wok_log.info("The host system will be shutted down")
+
+ def _mock_host_reboot(self, *name):
+ wok_log.info("The host system will be rebooted")
+
+ def _mock_partitions_get_list(self):
+ return self._mock_partitions.partitions.keys()
+
+ def _mock_partition_lookup(self, name):
+ return self._mock_partitions.partitions[name]
+
+ def _mock_packagesupdate_get_list(self):
+ return self._mock_swupdate.pkgs.keys()
+
+ def _mock_packageupdate_lookup(self, pkg_name):
+ return self._mock_swupdate.pkgs[pkg_name]
+
+ def _mock_host_swupdate(self, args=None):
+ task_id = add_task('/plugins/gingerbase/host/swupdate', self._mock_swupdate.doUpdate,
+ self.objstore)
+ return self.task_lookup(task_id)
+
+ def _mock_repositories_get_list(self):
+ return self._mock_repositories.repos.keys()
+
+ def _mock_repositories_create(self, params):
+ # Create a repo_id if not given by user. The repo_id will follow
+ # the format gingerbase_repo_<integer>, where integer is the number of
+ # seconds since the Epoch (January 1st, 1970), in UTC.
+ repo_id = params.get('repo_id', None)
+ if repo_id is None:
+ repo_id = "gingerbase_repo_%s" % str(int(time.time() * 1000))
+ params.update({'repo_id': repo_id})
+
+ config = params.get('config', {})
+ info = {'repo_id': repo_id,
+ 'baseurl': params['baseurl'],
+ 'enabled': True,
+ 'config': {'repo_name': config.get('repo_name', repo_id),
+ 'gpgkey': config.get('gpgkey', []),
+ 'gpgcheck': True,
+ 'mirrorlist': params.get('mirrorlist', '')}}
+ self._mock_repositories.repos[repo_id] = info
+ return repo_id
+
+ def _mock_repository_lookup(self, repo_id):
+ return self._mock_repositories.repos[repo_id]
+
+ def _mock_repository_delete(self, repo_id):
+ del self._mock_repositories.repos[repo_id]
+
+ def _mock_repository_enable(self, repo_id):
+ self._mock_repositories.repos[repo_id]['enabled'] = True
+
+ def _mock_repository_disable(self, repo_id):
+ self._mock_repositories.repos[repo_id]['enabled'] = False
+
+ def _mock_repository_update(self, repo_id, params):
+ self._mock_repositories.repos[repo_id].update(params)
+ return repo_id
+
+class MockPartitions(object):
+ def __init__(self):
+ self.partitions = {"vdx": {"available": True, "name": "vdx",
+ "fstype": "", "path": "/dev/vdx",
+ "mountpoint": "", "type": "disk",
+ "size": "2147483648"},
+ "vdz": {"available": True, "name": "vdz",
+ "fstype": "", "path": "/dev/vdz",
+ "mountpoint": "", "type": "disk",
+ "size": "2147483648"}}
+
+
+class MockDevices(object):
+ def __init__(self):
+ self.devices = {
+ 'computer': {'device_type': 'system',
+ 'firmware': {'release_date': '01/01/2012',
+ 'vendor': 'LENOVO',
+ 'version': 'XXXXX (X.XX )'},
+ 'hardware': {'serial': 'PXXXXX',
+ 'uuid':
+ '9d660370-820f-4241-8731-5a60c97e8aa6',
+ 'vendor': 'LENOVO',
+ 'version': 'ThinkPad T420'},
+ 'name': 'computer',
+ 'parent': None,
+ 'product': '4180XXX'},
+ 'pci_0000_03_00_0': {'bus': 3,
+ 'device_type': 'pci',
+ 'domain': 0,
+ 'driver': {'name': 'iwlwifi'},
+ 'function': 0,
+ 'iommuGroup': 7,
+ 'name': 'pci_0000_03_00_0',
+ 'parent': 'computer',
+ 'path':
+ '/sys/devices/pci0000:00/0000:03:00.0',
+ 'product': {
+ 'description':
+ 'Centrino Advanced-N 6205 [Taylor Peak]',
+ 'id': '0x0085'},
+ 'slot': 0,
+ 'vendor': {'description': 'Intel Corporation',
+ 'id': '0x8086'}},
+ 'pci_0000_0d_00_0': {'bus': 13,
+ 'device_type': 'pci',
+ 'domain': 0,
+ 'driver': {'name': 'sdhci-pci'},
+ 'function': 0,
+ 'iommuGroup': 7,
+ 'name': 'pci_0000_0d_00_0',
+ 'parent': 'computer',
+ 'path':
+ '/sys/devices/pci0000:00/0000:0d:00.0',
+ 'product': {'description':
+ 'PCIe SDXC/MMC Host Controller',
+ 'id': '0xe823'},
+ 'slot': 0,
+ 'vendor': {'description': 'Ricoh Co Ltd',
+ 'id': '0x1180'}},
+ 'scsi_host0': {'adapter': {'fabric_wwn': '37df6c1efa1b4388',
+ 'type': 'fc_host',
+ 'wwnn': 'efb6563f06434a98',
+ 'wwpn': '742f32073aab45d7'},
+ 'device_type': 'scsi_host',
+ 'host': 0,
+ 'name': 'scsi_host0',
+ 'parent': 'computer',
+ 'path': '/sys/devices/pci0000:00/0000:40:00.0/0'},
+ 'scsi_host1': {'adapter': {'fabric_wwn': '542efa5dced34123',
+ 'type': 'fc_host',
+ 'wwnn': 'b7433a40c9b84092',
+ 'wwpn': '25c1f485ae42497f'},
+ 'device_type': 'scsi_host',
+ 'host': 0,
+ 'name': 'scsi_host1',
+ 'parent': 'computer',
+ 'path': '/sys/devices/pci0000:00/0000:40:00.0/1'},
+ 'scsi_host2': {'adapter': {'fabric_wwn': '5c373c334c20478d',
+ 'type': 'fc_host',
+ 'wwnn': 'f2030bec4a254e6b',
+ 'wwpn': '07dbca4164d44096'},
+ 'device_type': 'scsi_host',
+ 'host': 0,
+ 'name': 'scsi_host2',
+ 'parent': 'computer',
+ 'path': '/sys/devices/pci0000:00/0000:40:00.0/2'}}
+
+
+class MockSoftwareUpdate(object):
+ def __init__(self):
+ self.pkgs = {
+ 'udevmountd': {'repository': 'openSUSE-13.1-Update',
+ 'version': '0.81.5-14.1',
+ 'arch': 'x86_64',
+ 'package_name': 'udevmountd'},
+ 'sysconfig-network': {'repository': 'openSUSE-13.1-Extras',
+ 'version': '0.81.5-14.1',
+ 'arch': 'x86_64',
+ 'package_name': 'sysconfig-network'},
+ 'libzypp': {'repository': 'openSUSE-13.1-Update',
+ 'version': '13.9.0-10.1',
+ 'arch': 'noarch',
+ 'package_name': 'libzypp'}}
+ self._num2update = 3
+
+ def doUpdate(self, cb, params):
+ msgs = []
+ for pkg in self.pkgs.keys():
+ msgs.append("Updating package %s" % pkg)
+ cb('\n'.join(msgs))
+ time.sleep(1)
+
+ time.sleep(2)
+ msgs.append("All packages updated")
+ cb('\n'.join(msgs), True)
+
+ # After updating all packages any package should be listed to be
+ # updated, so reset self._packages
+ self.pkgs = {}
+
+
+class MockRepositories(object):
+ def __init__(self):
+ self.repos = {"gingerbase_repo_1392167832":
+ {"repo_id": "gingerbase_repo_1392167832",
+ "enabled": True,
+ "baseurl": "http://www.fedora.org",
+ "config": {"repo_name": "gingerbase_repo_1392167832",
+ "gpgkey": [],
+ "gpgcheck": True,
+ "mirrorlist": ""}}}
+
+
+
diff --git a/plugins/gingerbase/repositories.py b/plugins/gingerbase/repositories.py
new file mode 100644
index 0000000..a53dd49
--- /dev/null
+++ b/plugins/gingerbase/repositories.py
@@ -0,0 +1,529 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import copy
+import os
+import time
+import urlparse
+from ConfigParser import ConfigParser
+
+from wok.basemodel import Singleton
+from wok.exception import InvalidOperation, InvalidParameter
+from wok.exception import OperationFailed, NotFoundError, MissingParameter
+from wok.utils import validate_repo_url
+
+from config import gingerBaseLock
+from yumparser import get_yum_repositories, write_repo_to_file
+
+
+class Repositories(object):
+ __metaclass__ = Singleton
+
+ """
+ Class to represent and operate with repositories information.
+ """
+ def __init__(self):
+ try:
+ __import__('yum')
+ self._pkg_mnger = YumRepo()
+ except ImportError:
+ try:
+ __import__('apt_pkg')
+ self._pkg_mnger = AptRepo()
+ except ImportError:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ def addRepository(self, params):
+ """
+ Add and enable a new repository
+ """
+ config = params.get('config', {})
+ extra_keys = list(
+ set(config.keys()).difference(set(self._pkg_mnger.CONFIG_ENTRY)))
+ if len(extra_keys) > 0:
+ raise InvalidParameter("GGBREPOS0028E",
+ {'items': ",".join(extra_keys)})
+
+ return self._pkg_mnger.addRepo(params)
+
+ def getRepositories(self):
+ """
+ Return a dictionary with all Ginger Base repositories. Each element uses
+ the format {<repo_id>: {repo}}, where repo is a dictionary in the
+ repositories.Repositories() format.
+ """
+ return self._pkg_mnger.getRepositoriesList()
+
+ def getRepository(self, repo_id):
+ """
+ Return a dictionary with all info from a given repository ID.
+ """
+ info = self._pkg_mnger.getRepo(repo_id)
+ info['repo_id'] = repo_id
+ return info
+
+ def enableRepository(self, repo_id):
+ """
+ Enable a repository.
+ """
+ return self._pkg_mnger.toggleRepo(repo_id, True)
+
+ def disableRepository(self, repo_id):
+ """
+ Disable a given repository.
+ """
+ return self._pkg_mnger.toggleRepo(repo_id, False)
+
+ def updateRepository(self, repo_id, params):
+ """
+ Update the information of a given repository.
+ The input is the repo_id of the repository to be updated and a dict
+ with the information to be updated.
+ """
+ return self._pkg_mnger.updateRepo(repo_id, params)
+
+ def removeRepository(self, repo_id):
+ """
+ Remove a given repository
+ """
+ return self._pkg_mnger.removeRepo(repo_id)
+
+
+class YumRepo(object):
+ """
+ Class to represent and operate with YUM repositories.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ TYPE = 'yum'
+ DEFAULT_CONF_DIR = "/etc/yum.repos.d"
+ CONFIG_ENTRY = ('repo_name', 'mirrorlist', 'metalink')
+
+ def __init__(self):
+ self._confdir = self.DEFAULT_CONF_DIR
+
+ def _get_repos(self, errcode):
+ try:
+ gingerBaseLock.acquire()
+ repos = get_yum_repositories()
+ except Exception, e:
+ gingerBaseLock.release()
+ raise OperationFailed(errcode, {'err': str(e)})
+ finally:
+ gingerBaseLock.release()
+
+ return repos
+
+ def getRepositoriesList(self):
+ """
+ Return a list of repositories IDs
+ """
+ repos = self._get_repos('GGBREPOS0024E')
+ return repos.keys()
+
+ def getRepo(self, repo_id):
+ """
+ Return a dictionary in the repositories.Repositories() of the given
+ repository ID format with the information of a YumRepository object.
+ """
+ repos = self._get_repos('GGBREPOS0025E')
+
+ if repo_id not in repos.keys():
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+
+ info = {}
+ info['enabled'] = entry.enabled
+ info['baseurl'] = entry.baseurl or ''
+ info['config'] = {}
+ info['config']['repo_name'] = entry.name or ''
+ info['config']['gpgcheck'] = entry.gpgcheck
+ info['config']['gpgkey'] = entry.gpgkey or ''
+ info['config']['mirrorlist'] = entry.mirrorlist or ''
+ info['config']['metalink'] = entry.metalink or ''
+ return info
+
+ def addRepo(self, params):
+ """
+ Add a given repository to YumBase
+ """
+ # At least one base url, or one mirror, must be given.
+ baseurl = params.get('baseurl', '')
+
+ config = params.get('config', {})
+ mirrorlist = config.get('mirrorlist', '')
+ metalink = config.get('metalink', '')
+ if not baseurl and not mirrorlist and not metalink:
+ raise MissingParameter("GGBREPOS0013E")
+
+ if baseurl:
+ validate_repo_url(baseurl)
+
+ if mirrorlist:
+ validate_repo_url(mirrorlist)
+
+ if metalink:
+ validate_repo_url(metalink)
+
+ if mirrorlist and metalink:
+ raise InvalidOperation('GGBREPOS0030E')
+
+ repo_id = params.get('repo_id', None)
+ if repo_id is None:
+ repo_id = "gingerbase_repo_%s" % str(int(time.time() * 1000))
+
+ repos = self._get_repos('GGBREPOS0026E')
+ if repo_id in repos.keys():
+ raise InvalidOperation("GGBREPOS0022E", {'repo_id': repo_id})
+
+ repo_name = config.get('repo_name', repo_id)
+ repo = {'baseurl': baseurl, 'mirrorlist': mirrorlist,
+ 'name': repo_name, 'gpgcheck': 1,
+ 'gpgkey': [], 'enabled': 1, 'metalink': metalink}
+
+ # write a repo file in the system with repo{} information.
+ parser = ConfigParser()
+ parser.add_section(repo_id)
+
+ for key, value in repo.iteritems():
+ if value:
+ parser.set(repo_id, key, value)
+
+ repofile = os.path.join(self._confdir, repo_id + '.repo')
+ try:
+ with open(repofile, 'w') as fd:
+ parser.write(fd)
+ except:
+ raise OperationFailed("GGBREPOS0018E",
+ {'repo_file': repofile})
+
+ return repo_id
+
+ def toggleRepo(self, repo_id, enable):
+ repos = self._get_repos('GGBREPOS0011E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+ if enable and entry.enabled:
+ raise InvalidOperation("GGBREPOS0015E", {'repo_id': repo_id})
+
+ if not enable and not entry.enabled:
+ raise InvalidOperation("GGBREPOS0016E", {'repo_id': repo_id})
+
+ gingerBaseLock.acquire()
+ try:
+ if enable:
+ entry.enable()
+ else:
+ entry.disable()
+
+ write_repo_to_file(entry)
+ except:
+ if enable:
+ raise OperationFailed("GGBREPOS0020E", {'repo_id': repo_id})
+
+ raise OperationFailed("GGBREPOS0021E", {'repo_id': repo_id})
+ finally:
+ gingerBaseLock.release()
+
+ return repo_id
+
+ def updateRepo(self, repo_id, params):
+ """
+ Update a given repository in repositories.Repositories() format
+ """
+ repos = self._get_repos('GGBREPOS0011E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+
+ baseurl = params.get('baseurl', None)
+ config = params.get('config', {})
+ mirrorlist = config.get('mirrorlist', None)
+ metalink = config.get('metalink', None)
+
+ if baseurl is not None and len(baseurl.strip()) == 0:
+ baseurl = None
+
+ if mirrorlist is not None and len(mirrorlist.strip()) == 0:
+ mirrorlist = None
+
+ if metalink is not None and len(metalink.strip()) == 0:
+ metalink = None
+
+ if baseurl is None and mirrorlist is None and metalink is None:
+ raise MissingParameter("GGBREPOS0013E")
+
+ if baseurl is not None:
+ validate_repo_url(baseurl)
+ entry.baseurl = baseurl
+
+ if mirrorlist is not None:
+ validate_repo_url(mirrorlist)
+ entry.mirrorlist = mirrorlist
+
+ if metalink is not None:
+ validate_repo_url(metalink)
+ entry.metalink = metalink
+
+ if mirrorlist and metalink:
+ raise InvalidOperation('GGBREPOS0030E')
+
+ entry.id = params.get('repo_id', repo_id)
+ entry.name = config.get('repo_name', entry.name)
+ entry.gpgcheck = config.get('gpgcheck', entry.gpgcheck)
+ entry.gpgkey = config.get('gpgkey', entry.gpgkey)
+ gingerBaseLock.acquire()
+ write_repo_to_file(entry)
+ gingerBaseLock.release()
+ return repo_id
+
+ def removeRepo(self, repo_id):
+ """
+ Remove a given repository
+ """
+ repos = self._get_repos('GGBREPOS0027E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+ parser = ConfigParser()
+ with open(entry.repofile) as fd:
+ parser.readfp(fd)
+
+ if len(parser.sections()) == 1:
+ os.remove(entry.repofile)
+ return
+
+ parser.remove_section(repo_id)
+ with open(entry.repofile, "w") as fd:
+ parser.write(fd)
+
+
+class AptRepo(object):
+ """
+ Class to represent and operate with YUM repositories.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ TYPE = 'deb'
+ GINGERBASE_LIST = "gingerbase-source.list"
+ CONFIG_ENTRY = ('dist', 'comps')
+
+ def __init__(self):
+ getattr(__import__('apt_pkg'), 'init_config')()
+ getattr(__import__('apt_pkg'), 'init_system')()
+ config = getattr(__import__('apt_pkg'), 'config')
+ self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
+ module = __import__('aptsources.sourceslist', globals(), locals(),
+ ['SourcesList'], -1)
+
+ self._sourceparts_path = '/%s%s' % (
+ config.get('Dir::Etc'), config.get('Dir::Etc::sourceparts'))
+ self._sourceslist = getattr(module, 'SourcesList')
+ self.filename = os.path.join(self._sourceparts_path, self.GINGERBASE_LIST)
+ if not os.path.exists(self.filename):
+ with open(self.filename, 'w') as fd:
+ fd.write("# This file is managed by Ginger Base and it must not "
+ "be modified manually\n")
+
+ def _get_repos(self):
+ try:
+ with self.pkg_lock():
+ repos = self._sourceslist()
+ repos.refresh()
+ except Exception, e:
+ gingerBaseLock.release()
+ raise OperationFailed('GGBREPOS0025E', {'err': e.message})
+
+ return repos
+
+ def _get_repo_id(self, repo):
+ data = urlparse.urlparse(repo.uri)
+ name = data.hostname or data.path
+ return '%s-%s-%s' % (name, repo.dist, "-".join(repo.comps))
+
+ def _get_source_entry(self, repo_id):
+ gingerBaseLock.acquire()
+ repos = self._get_repos()
+ gingerBaseLock.release()
+
+ for r in repos:
+ # Ignore deb-src repositories
+ if r.type != 'deb':
+ continue
+
+ if self._get_repo_id(r) != repo_id:
+ continue
+
+ return r
+
+ return None
+
+ def getRepositoriesList(self):
+ """
+ Return a list of repositories IDs
+
+ APT repositories there aren't the concept about repository ID, so for
+ internal control, the repository ID will be built as described in
+ _get_repo_id()
+ """
+ gingerBaseLock.acquire()
+ repos = self._get_repos()
+ gingerBaseLock.release()
+
+ res = []
+ for r in repos:
+ # Ignore deb-src repositories
+ if r.type != 'deb':
+ continue
+
+ res.append(self._get_repo_id(r))
+
+ return res
+
+ def getRepo(self, repo_id):
+ """
+ Return a dictionary in the repositories.Repositories() format of the
+ given repository ID with the information of a SourceEntry object.
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ info = {'enabled': not r.disabled,
+ 'baseurl': r.uri,
+ 'config': {'dist': r.dist,
+ 'comps': r.comps}}
+ return info
+
+ def addRepo(self, params):
+ """
+ Add a new APT repository based on <params>
+ """
+ # To create a APT repository the dist is a required parameter
+ # (in addition to baseurl, verified on controller through API.json)
+ config = params.get('config', None)
+ if config is None:
+ raise MissingParameter("GGBREPOS0019E")
+
+ if 'dist' not in config.keys():
+ raise MissingParameter("GGBREPOS0019E")
+
+ uri = params['baseurl']
+ dist = config['dist']
+ comps = config.get('comps', [])
+
+ validate_repo_url(uri)
+
+ gingerBaseLock.acquire()
+ try:
+ repos = self._get_repos()
+ source_entry = repos.add('deb', uri, dist, comps,
+ file=self.filename)
+ with self.pkg_lock():
+ repos.save()
+ except Exception as e:
+ gingerBaseLock.release()
+ raise OperationFailed("GGBREPOS0026E", {'err': e.message})
+ gingerBaseLock.release()
+ return self._get_repo_id(source_entry)
+
+ def toggleRepo(self, repo_id, enable):
+ """
+ Enable a given repository
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ if enable and not r.disabled:
+ raise InvalidOperation("GGBREPOS0015E", {'repo_id': repo_id})
+
+ if not enable and r.disabled:
+ raise InvalidOperation("GGBREPOS0016E", {'repo_id': repo_id})
+
+ if enable:
+ line = 'deb'
+ else:
+ line = '#deb'
+
+ gingerBaseLock.acquire()
+ try:
+ repos = self._get_repos()
+ with self.pkg_lock():
+ repos.remove(r)
+ repos.add(line, r.uri, r.dist, r.comps, file=self.filename)
+ repos.save()
+ except:
+ gingerBaseLock.release()
+ if enable:
+ raise OperationFailed("GGBREPOS0020E", {'repo_id': repo_id})
+
+ raise OperationFailed("GGBREPOS0021E", {'repo_id': repo_id})
+ finally:
+ gingerBaseLock.release()
+
+ return repo_id
+
+ def updateRepo(self, repo_id, params):
+ """
+ Update a given repository in repositories.Repositories() format
+ """
+ old_info = self.getRepo(repo_id)
+ updated_info = copy.deepcopy(old_info)
+ updated_info['baseurl'] = params.get(
+ 'baseurl', updated_info['baseurl'])
+
+ if 'config' in params.keys():
+ config = params['config']
+ updated_info['config']['dist'] = config.get(
+ 'dist', old_info['config']['dist'])
+ updated_info['config']['comps'] = config.get(
+ 'comps', old_info['config']['comps'])
+
+ self.removeRepo(repo_id)
+ try:
+ return self.addRepo(updated_info)
+ except:
+ self.addRepo(old_info)
+ raise
+
+ def removeRepo(self, repo_id):
+ """
+ Remove a given repository
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ gingerBaseLock.acquire()
+ try:
+ repos = self._get_repos()
+ with self.pkg_lock():
+ repos.remove(r)
+ repos.save()
+ except:
+ gingerBaseLock.release()
+ raise OperationFailed("GGBREPOS0017E", {'repo_id': repo_id})
+ finally:
+ gingerBaseLock.release()
diff --git a/plugins/gingerbase/swupdate.py b/plugins/gingerbase/swupdate.py
new file mode 100644
index 0000000..f70130b
--- /dev/null
+++ b/plugins/gingerbase/swupdate.py
@@ -0,0 +1,263 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import subprocess
+import time
+
+from wok.basemodel import Singleton
+from wok.exception import NotFoundError, OperationFailed
+from wok.utils import run_command, wok_log
+
+from config import gingerBaseLock
+from yumparser import get_yum_packages_list_update
+
+
+class SoftwareUpdate(object):
+ __metaclass__ = Singleton
+
+ """
+ Class to represent and operate with OS software update.
+ """
+ def __init__(self):
+ # This stores all packages to be updated for Ginger Base perspective. It's a
+ # dictionary of dictionaries, in the format {'package_name': package},
+ # where:
+ # package = {'package_name': <string>, 'version': <string>,
+ # 'arch': <string>, 'repository': <string>
+ # }
+ self._packages = {}
+
+ # This stores the number of packages to update
+ self._num2update = 0
+
+ # Get the distro of host machine and creates an object related to
+ # correct package management system
+ try:
+ __import__('yum')
+ wok_log.info("Loading YumUpdate features.")
+ self._pkg_mnger = YumUpdate()
+ except ImportError:
+ try:
+ __import__('apt')
+ wok_log.info("Loading AptUpdate features.")
+ self._pkg_mnger = AptUpdate()
+ except ImportError:
+ zypper_help = ["zypper", "--help"]
+ (stdout, stderr, returncode) = run_command(zypper_help)
+ if returncode == 0:
+ wok_log.info("Loading ZypperUpdate features.")
+ self._pkg_mnger = ZypperUpdate()
+ else:
+ raise Exception("There is no compatible package manager "
+ "for this system.")
+
+ def _scanUpdates(self):
+ """
+ Update self._packages with packages to be updated.
+ """
+ self._packages = {}
+ self._num2update = 0
+
+ # Call system pkg_mnger to get the packages as list of dictionaries.
+ for pkg in self._pkg_mnger.getPackagesList():
+
+ # Check if already exist a package in self._packages
+ pkg_id = pkg.get('package_name')
+ if pkg_id in self._packages.keys():
+ # package already listed to update. do nothing
+ continue
+
+ # Update the self._packages and self._num2update
+ self._packages[pkg_id] = pkg
+ self._num2update = self._num2update + 1
+
+ def getUpdates(self):
+ """
+ Return the self._packages.
+ """
+ self._scanUpdates()
+ return self._packages
+
+ def getUpdate(self, name):
+ """
+ Return a dictionary with all info from a given package name.
+ """
+ if name not in self._packages.keys():
+ raise NotFoundError('GGBPKGUPD0002E', {'name': name})
+
+ return self._packages[name]
+
+ def getNumOfUpdates(self):
+ """
+ Return the number of packages to be updated.
+ """
+ self._scanUpdates()
+ return self._num2update
+
+ def doUpdate(self, cb, params):
+ """
+ Execute the update
+ """
+ # reset messages
+ cb('')
+
+ cmd = self._pkg_mnger.update_cmd
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ msgs = []
+ while proc.poll() is None:
+ msgs.append(proc.stdout.readline())
+ cb(''.join(msgs))
+ time.sleep(0.5)
+
+ # read the final output lines
+ msgs.extend(proc.stdout.readlines())
+
+ retcode = proc.poll()
+ if retcode == 0:
+ return cb(''.join(msgs), True)
+
+ msgs.extend(proc.stderr.readlines())
+ return cb(''.join(msgs), False)
+
+
+class YumUpdate(object):
+ """
+ Class to represent and operate with YUM software update system.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.update_cmd = ["yum", "-y", "update"]
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ try:
+ gingerBaseLock.acquire()
+ self._pkgs = get_yum_packages_list_update()
+ except Exception, e:
+ raise OperationFailed('GGBPKGUPD0003E', {'err': str(e)})
+ finally:
+ gingerBaseLock.release()
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format:
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ self._refreshUpdateList()
+ pkg_list = []
+ for pkg in self._pkgs:
+ package = {'package_name': pkg.name, 'version': pkg.version,
+ 'arch': pkg.arch, 'repository': pkg.ui_from_repo}
+ pkg_list.append(package)
+ return pkg_list
+
+
+class AptUpdate(object):
+ """
+ Class to represent and operate with APT software update system.
+ It's loaded only on those systems listed at APT_DISTROS and loads necessary
+ modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
+ self.update_cmd = ['apt-get', 'upgrade', '-y']
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ apt_cache = getattr(__import__('apt'), 'Cache')()
+ try:
+ with self.pkg_lock():
+ apt_cache.update()
+ apt_cache.upgrade()
+ self._pkgs = apt_cache.get_changes()
+ except Exception, e:
+ gingerBaseLock.release()
+ raise OperationFailed('GGBPKGUPD0003E', {'err': e.message})
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ gingerBaseLock.acquire()
+ self._refreshUpdateList()
+ gingerBaseLock.release()
+ pkg_list = []
+ for pkg in self._pkgs:
+ package = {'package_name': pkg.shortname,
+ 'version': pkg.candidate.version,
+ 'arch': pkg._pkg.architecture,
+ 'repository': pkg.candidate.origins[0].label}
+ pkg_list.append(package)
+
+ return pkg_list
+
+
+class ZypperUpdate(object):
+ """
+ Class to represent and operate with Zypper software update system.
+ It's loaded only on those systems listed at ZYPPER_DISTROS and loads
+ necessary modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.update_cmd = ["zypper", "--non-interactive", "update",
+ "--auto-agree-with-licenses"]
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ self._pkgs = []
+ cmd = ["zypper", "list-updates"]
+ (stdout, stderr, returncode) = run_command(cmd)
+
+ if len(stderr) > 0:
+ raise OperationFailed('GGBPKGUPD0003E', {'err': stderr})
+
+ for line in stdout.split('\n'):
+ if line.find('v |') >= 0:
+ info = line.split(' | ')
+ package = {'package_name': info[2], 'version': info[4],
+ 'arch': info[5], 'repository': info[1]}
+ self._pkgs.append(package)
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ gingerBaseLock.acquire()
+ self._refreshUpdateList()
+ gingerBaseLock.release()
+ return self._pkgs
diff --git a/plugins/gingerbase/yumparser.py b/plugins/gingerbase/yumparser.py
new file mode 100644
index 0000000..06104a2
--- /dev/null
+++ b/plugins/gingerbase/yumparser.py
@@ -0,0 +1,283 @@
+#
+# Project Ginger Base
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import subprocess
+from os import listdir
+from os.path import isfile, splitext
+
+
+class YumRepoObject(object):
+
+ def __init__(self, repo_id, repofile):
+ self.repo_id = repo_id
+ self.name = None
+ self.baseurl = None
+ self.enabled = True
+ self.gpgcheck = True
+ self.gpgkey = None
+ self.metalink = None
+ self.mirrorlist = None
+ self.repofile = repofile
+ self.string_attrs = ['baseurl', 'gpgkey', 'name',
+ 'metalink', 'mirrorlist']
+ self.boolean_attrs = ['enabled', 'gpgcheck']
+
+ def set_attribute(self, key, strvalue):
+ if key in self.string_attrs:
+ setattr(self, key, strvalue)
+ elif key in self.boolean_attrs:
+ setattr(self, key, (strvalue == '1'))
+
+ def get_attribute_str(self, key):
+ if key not in self.get_attributes():
+ return None
+
+ if key in self.boolean_attrs:
+ str_value = '1' if getattr(self, key) is True else '0'
+ else:
+ str_value = getattr(self, key)
+
+ if str_value is None:
+ return None
+
+ return key + '=' + str_value
+
+ def get_attributes(self):
+ return self.string_attrs + self.boolean_attrs
+
+ def enable(self):
+ self.enabled = True
+
+ def disable(self):
+ self.enabled = False
+
+ def __str__(self):
+ str_obj = '[' + self.repo_id + ']' + '\n'
+ for key in self.get_attributes():
+ if self.get_attribute_str(key) is not None:
+ str_obj += self.get_attribute_str(key) + '\n'
+ return str_obj
+
+
+def get_repo_files():
+ def _is_repository_file(f):
+ _, f_extension = splitext(f)
+ return isfile(f) and (f_extension == '.repo')
+
+ YUM_REPO_DIR = '/etc/yum.repos.d'
+ return [YUM_REPO_DIR+'/'+f for f in listdir(YUM_REPO_DIR)
+ if _is_repository_file(YUM_REPO_DIR+'/'+f)]
+
+
+def _ignore_line_repo_file(line):
+ return line.startswith("#") or '=' not in line
+
+
+def _get_repos_from_file(repo_file):
+ repos_from_file = {}
+ current_repo = None
+ current_repo_id = None
+ with open(repo_file) as f:
+ for line in f.readlines():
+ line = line.strip()
+ if line.startswith("["):
+ if current_repo is not None:
+ repos_from_file[current_repo_id] = current_repo
+ current_repo_id = line.strip('[]')
+ current_repo = YumRepoObject(current_repo_id, repo_file)
+ continue
+ if _ignore_line_repo_file(line):
+ continue
+ key, value = line.split('=', 1)
+ key = key.strip()
+ value = value.strip()
+ current_repo.set_attribute(key, value)
+
+ # add the last repo from file.
+ if current_repo is not None:
+ repos_from_file[current_repo_id] = current_repo
+
+ return repos_from_file
+
+
+def get_yum_repositories():
+ repo_files = get_repo_files()
+ repos = {}
+ for yum_repo in repo_files:
+ repos.update(_get_repos_from_file(yum_repo))
+
+ return repos
+
+
+def _retrieve_repo_line_index(data, repo):
+ repo_entry = '[' + repo.repo_id + ']\n'
+ try:
+ repo_index = data.index(repo_entry)
+ except:
+ return None
+ return repo_index
+
+
+def _update_repo_file_data(data, repo, repo_index):
+ remaining_repo_attrs = repo.get_attributes()
+
+ for i in range(repo_index + 1, len(data)):
+ line = data[i].strip()
+ if line.startswith('['):
+ break
+ if _ignore_line_repo_file(line):
+ continue
+ key, _ = line.split('=', 1)
+ key = key.strip()
+ attr_str = repo.get_attribute_str(key)
+ if attr_str is None:
+ continue
+ remaining_repo_attrs.remove(key)
+ data[i] = attr_str + '\n'
+
+ for attr in remaining_repo_attrs:
+ attr_str = repo.get_attribute_str(attr)
+ if attr_str is None:
+ continue
+ data.insert(repo_index+1, attr_str + '\n')
+
+ return data
+
+
+def write_repo_to_file(repo):
+ with open(repo.repofile) as f:
+ data = f.readlines()
+
+ repo_index = _retrieve_repo_line_index(data, repo)
+ if repo_index is None:
+ return
+
+ data = _update_repo_file_data(data, repo, repo_index)
+
+ with open(repo.repofile, 'w') as f:
+ f.writelines(data)
+
+
+def _get_last_line_repo(data, repo_index):
+ stop_delete_index = None
+ for i in range(repo_index+1, len(data)):
+ line = data[i].strip()
+ if line.startswith('['):
+ stop_delete_index = i - 1
+ break
+ if stop_delete_index is None:
+ stop_delete_index = len(data) - 1
+
+ return stop_delete_index
+
+
+def _remove_repo_file_data(data, repo_index):
+ last_line_repo = _get_last_line_repo(data, repo_index)
+ for i in range(last_line_repo, repo_index - 1, -1):
+ data.pop(i)
+ return data
+
+
+def delete_repo_from_file(repo):
+ with open(repo.repofile) as f:
+ data = f.readlines()
+
+ repo_index = _retrieve_repo_line_index(data, repo)
+ if repo_index is None:
+ return
+
+ data = _remove_repo_file_data(data, repo_index)
+
+ with open(repo.repofile, 'w') as f:
+ f.writelines(data)
+
+
+class YumUpdatePackageObject(object):
+
+ def __init__(self, name, arch, version, repo):
+ self.name = name
+ self.arch = arch
+ self.version = version
+ self.ui_from_repo = repo
+
+
+def _include_line_checkupdate_output(line):
+ tokens = line.split()
+
+ if len(tokens) != 3:
+ return False
+
+ if '.' not in tokens[0]:
+ return False
+
+ return True
+
+
+def _ignore_obsoleting_packages_in(output):
+ out = ''
+ for l in output.split('\n'):
+ if 'Obsoleting ' in l:
+ break
+ out += l + '\n'
+ return out
+
+
+def _filter_lines_checkupdate_output(output):
+ if output is None:
+ return []
+
+ output = _ignore_obsoleting_packages_in(output)
+
+ out = [l for l in output.split('\n')
+ if _include_line_checkupdate_output(l)]
+ return out
+
+
+def _get_yum_checkupdate_output():
+ cmd = ['yum', 'check-update', '-d0']
+ yum_update_cmd = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ out, error = yum_update_cmd.communicate()
+ return_code = yum_update_cmd.returncode
+ if return_code == 1:
+ return None
+
+ return out
+
+
+def get_yum_packages_list_update(checkupdate_output=None):
+ if checkupdate_output is None:
+ checkupdate_output = _get_yum_checkupdate_output()
+
+ filtered_output = _filter_lines_checkupdate_output(checkupdate_output)
+
+ packages = []
+ for line in filtered_output:
+ line = line.split()
+ index = 0
+ name_arch = line[index]
+ index += 1
+ version = line[index]
+ index += 1
+ repo = line[index]
+ name, arch = name_arch.rsplit('.', 1)
+ packages.append(YumUpdatePackageObject(name, arch, version, repo))
+
+ return packages
diff --git a/plugins/kimchi/disks.py b/plugins/kimchi/disks.py
deleted file mode 100644
index eb40e3a..0000000
--- a/plugins/kimchi/disks.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import os.path
-import re
-import subprocess
-from parted import Device as PDevice
-from parted import Disk as PDisk
-
-from wok.exception import OperationFailed
-from wok.utils import wok_log
-
-
-def _get_dev_node_path(maj_min):
- """ Returns device node path given the device number 'major:min' """
-
- dm_name = "/sys/dev/block/%s/dm/name" % maj_min
- if os.path.exists(dm_name):
- with open(dm_name) as dm_f:
- content = dm_f.read().rstrip('\n')
- return "/dev/mapper/" + content
-
- uevent = "/sys/dev/block/%s/uevent" % maj_min
- with open(uevent) as ueventf:
- content = ueventf.read()
-
- data = dict(re.findall(r'(\S+)=(".*?"|\S+)', content.replace("\n", " ")))
-
- return "/dev/%s" % data["DEVNAME"]
-
-
-def _get_lsblk_devs(keys, devs=[]):
- lsblk = subprocess.Popen(
- ["lsblk", "-Pbo"] + [','.join(keys)] + devs,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = lsblk.communicate()
- if lsblk.returncode != 0:
- raise OperationFailed("KCHDISKS0001E", {'err': err})
-
- return _parse_lsblk_output(out, keys)
-
-
-def _get_dev_major_min(name):
- maj_min = None
-
- keys = ["NAME", "MAJ:MIN"]
- dev_list = _get_lsblk_devs(keys)
-
- for dev in dev_list:
- if dev['name'].split()[0] == name:
- maj_min = dev['maj:min']
- break
- else:
- raise OperationFailed("KCHDISKS0002E", {'device': name})
-
- return maj_min
-
-
-def _is_dev_leaf(devNodePath):
- try:
- # By default, lsblk prints a device information followed by children
- # device information
- childrenCount = len(
- _get_lsblk_devs(["NAME"], [devNodePath])) - 1
- except OperationFailed as e:
- # lsblk is known to fail on multipath devices
- # Assume these devices contain children
- wok_log.error(
- "Error getting device info for %s: %s", devNodePath, e)
- return False
-
- return childrenCount == 0
-
-
-def _is_dev_extended_partition(devType, devNodePath):
- if devType != 'part':
- return False
- diskPath = devNodePath.rstrip('0123456789')
- device = PDevice(diskPath)
- try:
- extended_part = PDisk(device).getExtendedPartition()
- except NotImplementedError as e:
- wok_log.warning(
- "Error getting extended partition info for dev %s type %s: %s",
- devNodePath, devType, e.message)
- # Treate disk with unsupported partiton table as if it does not
- # contain extended partitions.
- return False
- if extended_part and extended_part.path == devNodePath:
- return True
- return False
-
-
-def _parse_lsblk_output(output, keys):
- # output is on format key="value",
- # where key can be NAME, TYPE, FSTYPE, SIZE, MOUNTPOINT, etc
- lines = output.rstrip("\n").split("\n")
- r = []
- for line in lines:
- d = {}
- for key in keys:
- expression = r"%s=\".*?\"" % key
- match = re.search(expression, line)
- field = match.group()
- k, v = field.split('=', 1)
- d[k.lower()] = v[1:-1]
- r.append(d)
- return r
-
-
-def _get_vgname(devNodePath):
- """ Return volume group name of a physical volume. If the device node path
- is not a physical volume, return empty string. """
- pvs = subprocess.Popen(
- ["pvs", "--unbuffered", "--nameprefixes", "--noheadings",
- "-o", "vg_name", devNodePath],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = pvs.communicate()
- if pvs.returncode != 0:
- return ""
-
- return re.findall(r"LVM2_VG_NAME='([^\']*)'", out)[0]
-
-
-def _is_available(name, devtype, fstype, mountpoint, majmin):
- devNodePath = _get_dev_node_path(majmin)
- # Only list unmounted and unformated and leaf and (partition or disk)
- # leaf means a partition, a disk has no partition, or a disk not held
- # by any multipath device. Physical volume belongs to no volume group
- # is also listed. Extended partitions should not be listed.
- if (devtype in ['part', 'disk', 'mpath'] and
- fstype in ['', 'LVM2_member'] and
- mountpoint == "" and
- _get_vgname(devNodePath) == "" and
- _is_dev_leaf(devNodePath) and
- not _is_dev_extended_partition(devtype, devNodePath)):
- return True
- return False
-
-
-def get_partitions_names(check=False):
- names = set()
- keys = ["NAME", "TYPE", "FSTYPE", "MOUNTPOINT", "MAJ:MIN"]
- # output is on format key="value",
- # where key can be NAME, TYPE, FSTYPE, MOUNTPOINT
- for dev in _get_lsblk_devs(keys):
- # split()[0] to avoid the second part of the name, after the
- # whiteline
- name = dev['name'].split()[0]
- if check and not _is_available(name, dev['type'], dev['fstype'],
- dev['mountpoint'], dev['maj:min']):
- continue
- names.add(name)
-
- return list(names)
-
-
-def get_partition_details(name):
- majmin = _get_dev_major_min(name)
- dev_path = _get_dev_node_path(majmin)
-
- keys = ["TYPE", "FSTYPE", "SIZE", "MOUNTPOINT"]
- try:
- dev = _get_lsblk_devs(keys, [dev_path])[0]
- except OperationFailed as e:
- wok_log.error(
- "Error getting partition info for %s: %s", name, e)
- return {}
-
- dev['available'] = _is_available(name, dev['type'], dev['fstype'],
- dev['mountpoint'], majmin)
- if dev['mountpoint']:
- # Sometimes the mountpoint comes with [SWAP] or other
- # info which is not an actual mount point. Filtering it
- regexp = re.compile(r"\[.*\]")
- if regexp.search(dev['mountpoint']) is not None:
- dev['mountpoint'] = ''
- dev['path'] = dev_path
- dev['name'] = name
- return dev
diff --git a/plugins/kimchi/repositories.py b/plugins/kimchi/repositories.py
deleted file mode 100644
index 9caabc4..0000000
--- a/plugins/kimchi/repositories.py
+++ /dev/null
@@ -1,529 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import copy
-import os
-import time
-import urlparse
-from ConfigParser import ConfigParser
-
-from wok.basemodel import Singleton
-from wok.exception import InvalidOperation, InvalidParameter
-from wok.exception import OperationFailed, NotFoundError, MissingParameter
-from wok.utils import validate_repo_url
-
-from config import kimchiLock
-from yumparser import get_yum_repositories, write_repo_to_file
-
-
-class Repositories(object):
- __metaclass__ = Singleton
-
- """
- Class to represent and operate with repositories information.
- """
- def __init__(self):
- try:
- __import__('yum')
- self._pkg_mnger = YumRepo()
- except ImportError:
- try:
- __import__('apt_pkg')
- self._pkg_mnger = AptRepo()
- except ImportError:
- raise InvalidOperation('KCHREPOS0014E')
-
- def addRepository(self, params):
- """
- Add and enable a new repository
- """
- config = params.get('config', {})
- extra_keys = list(
- set(config.keys()).difference(set(self._pkg_mnger.CONFIG_ENTRY)))
- if len(extra_keys) > 0:
- raise InvalidParameter("KCHREPOS0028E",
- {'items': ",".join(extra_keys)})
-
- return self._pkg_mnger.addRepo(params)
-
- def getRepositories(self):
- """
- Return a dictionary with all Kimchi's repositories. Each element uses
- the format {<repo_id>: {repo}}, where repo is a dictionary in the
- repositories.Repositories() format.
- """
- return self._pkg_mnger.getRepositoriesList()
-
- def getRepository(self, repo_id):
- """
- Return a dictionary with all info from a given repository ID.
- """
- info = self._pkg_mnger.getRepo(repo_id)
- info['repo_id'] = repo_id
- return info
-
- def enableRepository(self, repo_id):
- """
- Enable a repository.
- """
- return self._pkg_mnger.toggleRepo(repo_id, True)
-
- def disableRepository(self, repo_id):
- """
- Disable a given repository.
- """
- return self._pkg_mnger.toggleRepo(repo_id, False)
-
- def updateRepository(self, repo_id, params):
- """
- Update the information of a given repository.
- The input is the repo_id of the repository to be updated and a dict
- with the information to be updated.
- """
- return self._pkg_mnger.updateRepo(repo_id, params)
-
- def removeRepository(self, repo_id):
- """
- Remove a given repository
- """
- return self._pkg_mnger.removeRepo(repo_id)
-
-
-class YumRepo(object):
- """
- Class to represent and operate with YUM repositories.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- TYPE = 'yum'
- DEFAULT_CONF_DIR = "/etc/yum.repos.d"
- CONFIG_ENTRY = ('repo_name', 'mirrorlist', 'metalink')
-
- def __init__(self):
- self._confdir = self.DEFAULT_CONF_DIR
-
- def _get_repos(self, errcode):
- try:
- kimchiLock.acquire()
- repos = get_yum_repositories()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed(errcode, {'err': str(e)})
- finally:
- kimchiLock.release()
-
- return repos
-
- def getRepositoriesList(self):
- """
- Return a list of repositories IDs
- """
- repos = self._get_repos('KCHREPOS0024E')
- return repos.keys()
-
- def getRepo(self, repo_id):
- """
- Return a dictionary in the repositories.Repositories() of the given
- repository ID format with the information of a YumRepository object.
- """
- repos = self._get_repos('KCHREPOS0025E')
-
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
-
- info = {}
- info['enabled'] = entry.enabled
- info['baseurl'] = entry.baseurl or ''
- info['config'] = {}
- info['config']['repo_name'] = entry.name or ''
- info['config']['gpgcheck'] = entry.gpgcheck
- info['config']['gpgkey'] = entry.gpgkey or ''
- info['config']['mirrorlist'] = entry.mirrorlist or ''
- info['config']['metalink'] = entry.metalink or ''
- return info
-
- def addRepo(self, params):
- """
- Add a given repository to YumBase
- """
- # At least one base url, or one mirror, must be given.
- baseurl = params.get('baseurl', '')
-
- config = params.get('config', {})
- mirrorlist = config.get('mirrorlist', '')
- metalink = config.get('metalink', '')
- if not baseurl and not mirrorlist and not metalink:
- raise MissingParameter("KCHREPOS0013E")
-
- if baseurl:
- validate_repo_url(baseurl)
-
- if mirrorlist:
- validate_repo_url(mirrorlist)
-
- if metalink:
- validate_repo_url(metalink)
-
- if mirrorlist and metalink:
- raise InvalidOperation('KCHREPOS0030E')
-
- repo_id = params.get('repo_id', None)
- if repo_id is None:
- repo_id = "kimchi_repo_%s" % str(int(time.time() * 1000))
-
- repos = self._get_repos('KCHREPOS0026E')
- if repo_id in repos.keys():
- raise InvalidOperation("KCHREPOS0022E", {'repo_id': repo_id})
-
- repo_name = config.get('repo_name', repo_id)
- repo = {'baseurl': baseurl, 'mirrorlist': mirrorlist,
- 'name': repo_name, 'gpgcheck': 1,
- 'gpgkey': [], 'enabled': 1, 'metalink': metalink}
-
- # write a repo file in the system with repo{} information.
- parser = ConfigParser()
- parser.add_section(repo_id)
-
- for key, value in repo.iteritems():
- if value:
- parser.set(repo_id, key, value)
-
- repofile = os.path.join(self._confdir, repo_id + '.repo')
- try:
- with open(repofile, 'w') as fd:
- parser.write(fd)
- except:
- raise OperationFailed("KCHREPOS0018E",
- {'repo_file': repofile})
-
- return repo_id
-
- def toggleRepo(self, repo_id, enable):
- repos = self._get_repos('KCHREPOS0011E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
- if enable and entry.enabled:
- raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})
-
- if not enable and not entry.enabled:
- raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})
-
- kimchiLock.acquire()
- try:
- if enable:
- entry.enable()
- else:
- entry.disable()
-
- write_repo_to_file(entry)
- except:
- if enable:
- raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})
-
- raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
-
- return repo_id
-
- def updateRepo(self, repo_id, params):
- """
- Update a given repository in repositories.Repositories() format
- """
- repos = self._get_repos('KCHREPOS0011E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
-
- baseurl = params.get('baseurl', None)
- config = params.get('config', {})
- mirrorlist = config.get('mirrorlist', None)
- metalink = config.get('metalink', None)
-
- if baseurl is not None and len(baseurl.strip()) == 0:
- baseurl = None
-
- if mirrorlist is not None and len(mirrorlist.strip()) == 0:
- mirrorlist = None
-
- if metalink is not None and len(metalink.strip()) == 0:
- metalink = None
-
- if baseurl is None and mirrorlist is None and metalink is None:
- raise MissingParameter("KCHREPOS0013E")
-
- if baseurl is not None:
- validate_repo_url(baseurl)
- entry.baseurl = baseurl
-
- if mirrorlist is not None:
- validate_repo_url(mirrorlist)
- entry.mirrorlist = mirrorlist
-
- if metalink is not None:
- validate_repo_url(metalink)
- entry.metalink = metalink
-
- if mirrorlist and metalink:
- raise InvalidOperation('KCHREPOS0030E')
-
- entry.id = params.get('repo_id', repo_id)
- entry.name = config.get('repo_name', entry.name)
- entry.gpgcheck = config.get('gpgcheck', entry.gpgcheck)
- entry.gpgkey = config.get('gpgkey', entry.gpgkey)
- kimchiLock.acquire()
- write_repo_to_file(entry)
- kimchiLock.release()
- return repo_id
-
- def removeRepo(self, repo_id):
- """
- Remove a given repository
- """
- repos = self._get_repos('KCHREPOS0027E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
- parser = ConfigParser()
- with open(entry.repofile) as fd:
- parser.readfp(fd)
-
- if len(parser.sections()) == 1:
- os.remove(entry.repofile)
- return
-
- parser.remove_section(repo_id)
- with open(entry.repofile, "w") as fd:
- parser.write(fd)
-
-
-class AptRepo(object):
- """
- Class to represent and operate with YUM repositories.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- TYPE = 'deb'
- KIMCHI_LIST = "kimchi-source.list"
- CONFIG_ENTRY = ('dist', 'comps')
-
- def __init__(self):
- getattr(__import__('apt_pkg'), 'init_config')()
- getattr(__import__('apt_pkg'), 'init_system')()
- config = getattr(__import__('apt_pkg'), 'config')
- self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
- module = __import__('aptsources.sourceslist', globals(), locals(),
- ['SourcesList'], -1)
-
- self._sourceparts_path = '/%s%s' % (
- config.get('Dir::Etc'), config.get('Dir::Etc::sourceparts'))
- self._sourceslist = getattr(module, 'SourcesList')
- self.filename = os.path.join(self._sourceparts_path, self.KIMCHI_LIST)
- if not os.path.exists(self.filename):
- with open(self.filename, 'w') as fd:
- fd.write("# This file is managed by Kimchi and it must not "
- "be modified manually\n")
-
- def _get_repos(self):
- try:
- with self.pkg_lock():
- repos = self._sourceslist()
- repos.refresh()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed('KCHREPOS0025E', {'err': e.message})
-
- return repos
-
- def _get_repo_id(self, repo):
- data = urlparse.urlparse(repo.uri)
- name = data.hostname or data.path
- return '%s-%s-%s' % (name, repo.dist, "-".join(repo.comps))
-
- def _get_source_entry(self, repo_id):
- kimchiLock.acquire()
- repos = self._get_repos()
- kimchiLock.release()
-
- for r in repos:
- # Ignore deb-src repositories
- if r.type != 'deb':
- continue
-
- if self._get_repo_id(r) != repo_id:
- continue
-
- return r
-
- return None
-
- def getRepositoriesList(self):
- """
- Return a list of repositories IDs
-
- APT repositories there aren't the concept about repository ID, so for
- internal control, the repository ID will be built as described in
- _get_repo_id()
- """
- kimchiLock.acquire()
- repos = self._get_repos()
- kimchiLock.release()
-
- res = []
- for r in repos:
- # Ignore deb-src repositories
- if r.type != 'deb':
- continue
-
- res.append(self._get_repo_id(r))
-
- return res
-
- def getRepo(self, repo_id):
- """
- Return a dictionary in the repositories.Repositories() format of the
- given repository ID with the information of a SourceEntry object.
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- info = {'enabled': not r.disabled,
- 'baseurl': r.uri,
- 'config': {'dist': r.dist,
- 'comps': r.comps}}
- return info
-
- def addRepo(self, params):
- """
- Add a new APT repository based on <params>
- """
- # To create a APT repository the dist is a required parameter
- # (in addition to baseurl, verified on controller through API.json)
- config = params.get('config', None)
- if config is None:
- raise MissingParameter("KCHREPOS0019E")
-
- if 'dist' not in config.keys():
- raise MissingParameter("KCHREPOS0019E")
-
- uri = params['baseurl']
- dist = config['dist']
- comps = config.get('comps', [])
-
- validate_repo_url(uri)
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- source_entry = repos.add('deb', uri, dist, comps,
- file=self.filename)
- with self.pkg_lock():
- repos.save()
- except Exception as e:
- kimchiLock.release()
- raise OperationFailed("KCHREPOS0026E", {'err': e.message})
- kimchiLock.release()
- return self._get_repo_id(source_entry)
-
- def toggleRepo(self, repo_id, enable):
- """
- Enable a given repository
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- if enable and not r.disabled:
- raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})
-
- if not enable and r.disabled:
- raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})
-
- if enable:
- line = 'deb'
- else:
- line = '#deb'
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- with self.pkg_lock():
- repos.remove(r)
- repos.add(line, r.uri, r.dist, r.comps, file=self.filename)
- repos.save()
- except:
- kimchiLock.release()
- if enable:
- raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})
-
- raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
-
- return repo_id
-
- def updateRepo(self, repo_id, params):
- """
- Update a given repository in repositories.Repositories() format
- """
- old_info = self.getRepo(repo_id)
- updated_info = copy.deepcopy(old_info)
- updated_info['baseurl'] = params.get(
- 'baseurl', updated_info['baseurl'])
-
- if 'config' in params.keys():
- config = params['config']
- updated_info['config']['dist'] = config.get(
- 'dist', old_info['config']['dist'])
- updated_info['config']['comps'] = config.get(
- 'comps', old_info['config']['comps'])
-
- self.removeRepo(repo_id)
- try:
- return self.addRepo(updated_info)
- except:
- self.addRepo(old_info)
- raise
-
- def removeRepo(self, repo_id):
- """
- Remove a given repository
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- with self.pkg_lock():
- repos.remove(r)
- repos.save()
- except:
- kimchiLock.release()
- raise OperationFailed("KCHREPOS0017E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
diff --git a/plugins/kimchi/swupdate.py b/plugins/kimchi/swupdate.py
deleted file mode 100644
index 84b927f..0000000
--- a/plugins/kimchi/swupdate.py
+++ /dev/null
@@ -1,263 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import subprocess
-import time
-
-from wok.basemodel import Singleton
-from wok.exception import NotFoundError, OperationFailed
-from wok.utils import run_command, wok_log
-
-from config import kimchiLock
-from yumparser import get_yum_packages_list_update
-
-
-class SoftwareUpdate(object):
- __metaclass__ = Singleton
-
- """
- Class to represent and operate with OS software update.
- """
- def __init__(self):
- # This stores all packages to be updated for Kimchi perspective. It's a
- # dictionary of dictionaries, in the format {'package_name': package},
- # where:
- # package = {'package_name': <string>, 'version': <string>,
- # 'arch': <string>, 'repository': <string>
- # }
- self._packages = {}
-
- # This stores the number of packages to update
- self._num2update = 0
-
- # Get the distro of host machine and creates an object related to
- # correct package management system
- try:
- __import__('yum')
- wok_log.info("Loading YumUpdate features.")
- self._pkg_mnger = YumUpdate()
- except ImportError:
- try:
- __import__('apt')
- wok_log.info("Loading AptUpdate features.")
- self._pkg_mnger = AptUpdate()
- except ImportError:
- zypper_help = ["zypper", "--help"]
- (stdout, stderr, returncode) = run_command(zypper_help)
- if returncode == 0:
- wok_log.info("Loading ZypperUpdate features.")
- self._pkg_mnger = ZypperUpdate()
- else:
- raise Exception("There is no compatible package manager "
- "for this system.")
-
- def _scanUpdates(self):
- """
- Update self._packages with packages to be updated.
- """
- self._packages = {}
- self._num2update = 0
-
- # Call system pkg_mnger to get the packages as list of dictionaries.
- for pkg in self._pkg_mnger.getPackagesList():
-
- # Check if already exist a package in self._packages
- pkg_id = pkg.get('package_name')
- if pkg_id in self._packages.keys():
- # package already listed to update. do nothing
- continue
-
- # Update the self._packages and self._num2update
- self._packages[pkg_id] = pkg
- self._num2update = self._num2update + 1
-
- def getUpdates(self):
- """
- Return the self._packages.
- """
- self._scanUpdates()
- return self._packages
-
- def getUpdate(self, name):
- """
- Return a dictionary with all info from a given package name.
- """
- if name not in self._packages.keys():
- raise NotFoundError('KCHPKGUPD0002E', {'name': name})
-
- return self._packages[name]
-
- def getNumOfUpdates(self):
- """
- Return the number of packages to be updated.
- """
- self._scanUpdates()
- return self._num2update
-
- def doUpdate(self, cb, params):
- """
- Execute the update
- """
- # reset messages
- cb('')
-
- cmd = self._pkg_mnger.update_cmd
- proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- msgs = []
- while proc.poll() is None:
- msgs.append(proc.stdout.readline())
- cb(''.join(msgs))
- time.sleep(0.5)
-
- # read the final output lines
- msgs.extend(proc.stdout.readlines())
-
- retcode = proc.poll()
- if retcode == 0:
- return cb(''.join(msgs), True)
-
- msgs.extend(proc.stderr.readlines())
- return cb(''.join(msgs), False)
-
-
-class YumUpdate(object):
- """
- Class to represent and operate with YUM software update system.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.update_cmd = ["yum", "-y", "update"]
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- try:
- kimchiLock.acquire()
- self._pkgs = get_yum_packages_list_update()
- except Exception, e:
- raise OperationFailed('KCHPKGUPD0003E', {'err': str(e)})
- finally:
- kimchiLock.release()
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format:
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- self._refreshUpdateList()
- pkg_list = []
- for pkg in self._pkgs:
- package = {'package_name': pkg.name, 'version': pkg.version,
- 'arch': pkg.arch, 'repository': pkg.ui_from_repo}
- pkg_list.append(package)
- return pkg_list
-
-
-class AptUpdate(object):
- """
- Class to represent and operate with APT software update system.
- It's loaded only on those systems listed at APT_DISTROS and loads necessary
- modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
- self.update_cmd = ['apt-get', 'upgrade', '-y']
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- apt_cache = getattr(__import__('apt'), 'Cache')()
- try:
- with self.pkg_lock():
- apt_cache.update()
- apt_cache.upgrade()
- self._pkgs = apt_cache.get_changes()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed('KCHPKGUPD0003E', {'err': e.message})
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- kimchiLock.acquire()
- self._refreshUpdateList()
- kimchiLock.release()
- pkg_list = []
- for pkg in self._pkgs:
- package = {'package_name': pkg.shortname,
- 'version': pkg.candidate.version,
- 'arch': pkg._pkg.architecture,
- 'repository': pkg.candidate.origins[0].label}
- pkg_list.append(package)
-
- return pkg_list
-
-
-class ZypperUpdate(object):
- """
- Class to represent and operate with Zypper software update system.
- It's loaded only on those systems listed at ZYPPER_DISTROS and loads
- necessary modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.update_cmd = ["zypper", "--non-interactive", "update",
- "--auto-agree-with-licenses"]
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- self._pkgs = []
- cmd = ["zypper", "list-updates"]
- (stdout, stderr, returncode) = run_command(cmd)
-
- if len(stderr) > 0:
- raise OperationFailed('KCHPKGUPD0003E', {'err': stderr})
-
- for line in stdout.split('\n'):
- if line.find('v |') >= 0:
- info = line.split(' | ')
- package = {'package_name': info[2], 'version': info[4],
- 'arch': info[5], 'repository': info[1]}
- self._pkgs.append(package)
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- kimchiLock.acquire()
- self._refreshUpdateList()
- kimchiLock.release()
- return self._pkgs
diff --git a/plugins/kimchi/yumparser.py b/plugins/kimchi/yumparser.py
deleted file mode 100644
index 74f9fa0..0000000
--- a/plugins/kimchi/yumparser.py
+++ /dev/null
@@ -1,283 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import subprocess
-from os import listdir
-from os.path import isfile, splitext
-
-
-class YumRepoObject(object):
-
- def __init__(self, repo_id, repofile):
- self.repo_id = repo_id
- self.name = None
- self.baseurl = None
- self.enabled = True
- self.gpgcheck = True
- self.gpgkey = None
- self.metalink = None
- self.mirrorlist = None
- self.repofile = repofile
- self.string_attrs = ['baseurl', 'gpgkey', 'name',
- 'metalink', 'mirrorlist']
- self.boolean_attrs = ['enabled', 'gpgcheck']
-
- def set_attribute(self, key, strvalue):
- if key in self.string_attrs:
- setattr(self, key, strvalue)
- elif key in self.boolean_attrs:
- setattr(self, key, (strvalue == '1'))
-
- def get_attribute_str(self, key):
- if key not in self.get_attributes():
- return None
-
- if key in self.boolean_attrs:
- str_value = '1' if getattr(self, key) is True else '0'
- else:
- str_value = getattr(self, key)
-
- if str_value is None:
- return None
-
- return key + '=' + str_value
-
- def get_attributes(self):
- return self.string_attrs + self.boolean_attrs
-
- def enable(self):
- self.enabled = True
-
- def disable(self):
- self.enabled = False
-
- def __str__(self):
- str_obj = '[' + self.repo_id + ']' + '\n'
- for key in self.get_attributes():
- if self.get_attribute_str(key) is not None:
- str_obj += self.get_attribute_str(key) + '\n'
- return str_obj
-
-
-def get_repo_files():
- def _is_repository_file(f):
- _, f_extension = splitext(f)
- return isfile(f) and (f_extension == '.repo')
-
- YUM_REPO_DIR = '/etc/yum.repos.d'
- return [YUM_REPO_DIR+'/'+f for f in listdir(YUM_REPO_DIR)
- if _is_repository_file(YUM_REPO_DIR+'/'+f)]
-
-
-def _ignore_line_repo_file(line):
- return line.startswith("#") or '=' not in line
-
-
-def _get_repos_from_file(repo_file):
- repos_from_file = {}
- current_repo = None
- current_repo_id = None
- with open(repo_file) as f:
- for line in f.readlines():
- line = line.strip()
- if line.startswith("["):
- if current_repo is not None:
- repos_from_file[current_repo_id] = current_repo
- current_repo_id = line.strip('[]')
- current_repo = YumRepoObject(current_repo_id, repo_file)
- continue
- if _ignore_line_repo_file(line):
- continue
- key, value = line.split('=', 1)
- key = key.strip()
- value = value.strip()
- current_repo.set_attribute(key, value)
-
- # add the last repo from file.
- if current_repo is not None:
- repos_from_file[current_repo_id] = current_repo
-
- return repos_from_file
-
-
-def get_yum_repositories():
- repo_files = get_repo_files()
- repos = {}
- for yum_repo in repo_files:
- repos.update(_get_repos_from_file(yum_repo))
-
- return repos
-
-
-def _retrieve_repo_line_index(data, repo):
- repo_entry = '[' + repo.repo_id + ']\n'
- try:
- repo_index = data.index(repo_entry)
- except:
- return None
- return repo_index
-
-
-def _update_repo_file_data(data, repo, repo_index):
- remaining_repo_attrs = repo.get_attributes()
-
- for i in range(repo_index + 1, len(data)):
- line = data[i].strip()
- if line.startswith('['):
- break
- if _ignore_line_repo_file(line):
- continue
- key, _ = line.split('=', 1)
- key = key.strip()
- attr_str = repo.get_attribute_str(key)
- if attr_str is None:
- continue
- remaining_repo_attrs.remove(key)
- data[i] = attr_str + '\n'
-
- for attr in remaining_repo_attrs:
- attr_str = repo.get_attribute_str(attr)
- if attr_str is None:
- continue
- data.insert(repo_index+1, attr_str + '\n')
-
- return data
-
-
-def write_repo_to_file(repo):
- with open(repo.repofile) as f:
- data = f.readlines()
-
- repo_index = _retrieve_repo_line_index(data, repo)
- if repo_index is None:
- return
-
- data = _update_repo_file_data(data, repo, repo_index)
-
- with open(repo.repofile, 'w') as f:
- f.writelines(data)
-
-
-def _get_last_line_repo(data, repo_index):
- stop_delete_index = None
- for i in range(repo_index+1, len(data)):
- line = data[i].strip()
- if line.startswith('['):
- stop_delete_index = i - 1
- break
- if stop_delete_index is None:
- stop_delete_index = len(data) - 1
-
- return stop_delete_index
-
-
-def _remove_repo_file_data(data, repo_index):
- last_line_repo = _get_last_line_repo(data, repo_index)
- for i in range(last_line_repo, repo_index - 1, -1):
- data.pop(i)
- return data
-
-
-def delete_repo_from_file(repo):
- with open(repo.repofile) as f:
- data = f.readlines()
-
- repo_index = _retrieve_repo_line_index(data, repo)
- if repo_index is None:
- return
-
- data = _remove_repo_file_data(data, repo_index)
-
- with open(repo.repofile, 'w') as f:
- f.writelines(data)
-
-
-class YumUpdatePackageObject(object):
-
- def __init__(self, name, arch, version, repo):
- self.name = name
- self.arch = arch
- self.version = version
- self.ui_from_repo = repo
-
-
-def _include_line_checkupdate_output(line):
- tokens = line.split()
-
- if len(tokens) != 3:
- return False
-
- if '.' not in tokens[0]:
- return False
-
- return True
-
-
-def _ignore_obsoleting_packages_in(output):
- out = ''
- for l in output.split('\n'):
- if 'Obsoleting ' in l:
- break
- out += l + '\n'
- return out
-
-
-def _filter_lines_checkupdate_output(output):
- if output is None:
- return []
-
- output = _ignore_obsoleting_packages_in(output)
-
- out = [l for l in output.split('\n')
- if _include_line_checkupdate_output(l)]
- return out
-
-
-def _get_yum_checkupdate_output():
- cmd = ['yum', 'check-update', '-d0']
- yum_update_cmd = subprocess.Popen(cmd,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, error = yum_update_cmd.communicate()
- return_code = yum_update_cmd.returncode
- if return_code == 1:
- return None
-
- return out
-
-
-def get_yum_packages_list_update(checkupdate_output=None):
- if checkupdate_output is None:
- checkupdate_output = _get_yum_checkupdate_output()
-
- filtered_output = _filter_lines_checkupdate_output(checkupdate_output)
-
- packages = []
- for line in filtered_output:
- line = line.split()
- index = 0
- name_arch = line[index]
- index += 1
- version = line[index]
- index += 1
- repo = line[index]
- name, arch = name_arch.rsplit('.', 1)
- packages.append(YumUpdatePackageObject(name, arch, version, repo))
-
- return packages
--
2.1.0
1
0
Hi all,
As Kimchi 1.5.1 was released, I've just merged the next branch into master.
The next step is to merge wok into master. I hope to get some update on
that for the next week.
Regards,
Aline Manera
1
0
On behalf of everyone who has worked hard on this release, I am pleased
to announce the availability of *Kimchi 1.5.1*!
We have worked hard to ensure that Kimchi runs well on the most popular
Linux distributions including: Fedora 22, Ubuntu 15.04, openSUSE 13.2,
and RHEL 7.1. Kimchi uses standard Linux interfaces so it should run well
on many other distributions too.
You can easily grab this release in tarball format or via git:
✔https://github.com/kimchi-project/kimchi/archive/1.5.1.tar.gz <https://github.com/kimchi-project/kimchi/archive/1.5.0.tar.gz>
✔ git clonehttps://github.com/kimchi-project/kimchi.git <clonehttps://github.com/kimchi-project/kimchi.git>
There are also some packages available at:
✔http://kimchi-project.github.io/kimchi/downloads/
Go ahead! Give it a try and let us know what you think!
Regards,
Aline Manera
1
0
Hi,
I'd need help to clarify which file has what license.
>From the COPYING file we can say that :
Files: *
License: LGPL-3.0
Files: ui/*
License: Apache-2.0
ui/spice-html5 and ui/libs are different
But we also have the following :
Files: contrib/*
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: plugins/sample/i18n.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: plugins/sample/ui/*
Copyright: IBM, Corp. 2014
License: Apache-2.0
Files: src/kimchi/auth.py
src/kimchi/disks.py
src/kimchi/distroloader.py
src/kimchi/isoinfo.py
src/kimchi/mockmodel.py
src/kimchi/netinfo.py
src/kimchi/osinfo.py
src/kimchi/root.py
src/kimchi/utils.py
src/kimchi/vmtemplate.py
src/kimchi/vnc.py
Copyright: IBM, Corp. 2013-2015
License: LGPL-2.1+
Files: src/kimchi/basemodel.py
src/kimchi/imageinfo.py
src/kimchi/iscsi.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/control/base.py
src/kimchi/control/debugreports.py
src/kimchi/control/host.py
src/kimchi/control/networks.py
src/kimchi/control/storagepools.py
src/kimchi/control/storagevolumes.py
src/kimchi/control/templates.py
src/kimchi/control/vms.py
Copyright: IBM, Corp. 2013-2015
License: LGPL-2.1+
Files: src/kimchi/control/cpuinfo.py
src/kimchi/control/peers.py
src/kimchi/control/storageservers.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/control/vm/*
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/control/vm/ifaces.py
src/kimchi/control/vm/storages.py
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: src/kimchi/i18n.py
src/kimchi/kvmusertests.py
src/kimchi/proxy.py
src/kimchi/repositories.py
src/kimchi/swupdate.py
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: src/kimchi/model/*
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: src/kimchi/model/__init__.py
src/kimchi/model/groups.py
src/kimchi/model/hostdev.py
src/kimchi/model/interfaces.py
src/kimchi/model/libvirtconnection.py
src/kimchi/model/libvirtstoragepool.py
src/kimchi/model/plugins.py
src/kimchi/model/storageservers.py
src/kimchi/model/storagetargets.py
src/kimchi/model/tasks.py
src/kimchi/model/users.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/model/featuretests.py
Copyright: IBM, Corp. 2013-2015
License: LGPL-2.1+
Files: src/kimchi/sslcert.py
Copyright: 2004-2005, OSAF. / IBM, Corp. 2013-2014
License: LGPL-2.1+
Files: src/kimchi/xmlutils/*
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/xmlutils/cpu.py
Copyright: IBM, Corp. 2015
License: LGPL-2.1+
Files: src/kimchi/xmlutils/interface.py
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: src/kimchi/yumparser.py
Copyright: IBM, Corp. 2015
License: LGPL-2.1+
Files: tests/*
Copyright: IBM, Corp. 2015
License: LGPL-2.1+
Files: tests/iso_gen.py
tests/test_mockmodel.py
tests/test_model.py
tests/test_osinfo.py
tests/test_rest.py
tests/test_server.py
tests/test_vmtemplate.py
tests/utils.py
Copyright: IBM, Corp. 2013-2015
License: LGPL-2.1+
Files: tests/test_authorization.py
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: tests/test_exception.py
tests/test_networkxml.py
tests/test_plugin.py
Copyright: IBM, Corp. 2013-2014
License: LGPL-2.1+
Files: tests/test_rollbackcontext.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: ui/pages/*
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Should these be LGPL-3 ?
Note : plugins/sample/ui/* is apache-2.0, maybe it's right because in a ui dir ?
Also, I just wanted to make sure, kimchi is LGPL-3 not LGPL-3+, right ?
Thanks,
Fred
2
2
[PATCH 2/2] [WOK] Adding new webapp icons for mobile devices and Windows
by sguimaraes943@gmail.com 23 Sep '15
by sguimaraes943@gmail.com 23 Sep '15
23 Sep '15
From: samhenri <samuel.guimaraes(a)eldorado.org.br>
This commit adds Kimchi logo in HD as a bookmark icon for modern browsers, mobile devices menus and Windows 8/8.1/10 start menu tiles.
This update also includes two SVG icons for the new-ui with embedded licenses.
*spin5.svg is part of Fontellico font and it is distributed under CC BY 3.0.
*edit-alt.svg is part of Elusive icons and it is licensed under SIL OFL and CC BY 3.0.
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
ui/images/Makefile.am | 2 +-
ui/images/android-chrome-192x192.png | Bin 0 -> 3508 bytes
ui/images/apple-touch-icon-114.png | Bin 0 -> 2360 bytes
ui/images/apple-touch-icon-120.png | Bin 0 -> 2382 bytes
ui/images/apple-touch-icon-144.png | Bin 0 -> 2758 bytes
ui/images/apple-touch-icon-152.png | Bin 0 -> 2962 bytes
ui/images/apple-touch-icon-180.png | Bin 0 -> 3404 bytes
ui/images/apple-touch-icon-57.png | Bin 0 -> 1449 bytes
ui/images/apple-touch-icon-60.png | Bin 0 -> 1476 bytes
ui/images/apple-touch-icon-72.png | Bin 0 -> 1718 bytes
ui/images/apple-touch-icon-76.png | Bin 0 -> 1734 bytes
ui/images/apple-touch-icon-precomposed.png | Bin 0 -> 3673 bytes
ui/images/apple-touch-icon.png | Bin 0 -> 3404 bytes
ui/images/favicon.ico | Bin 15086 -> 15086 bytes
ui/images/favicon.png | Bin 0 -> 17356 bytes
ui/images/large.png | Bin 0 -> 36434 bytes
ui/images/square.png | Bin 0 -> 15679 bytes
ui/images/theme-default/edit-alt.svg | 134 +++++++++++++++++++++++++++++
ui/images/theme-default/spin5.svg | 54 ++++++++++++
ui/images/tiny.png | Bin 0 -> 6539 bytes
ui/images/wide.png | Bin 0 -> 44544 bytes
ui/pages/login.html.tmpl | 20 ++++-
ui/pages/wok-ui.html.tmpl | 20 ++++-
23 files changed, 227 insertions(+), 3 deletions(-)
create mode 100644 ui/images/android-chrome-192x192.png
create mode 100644 ui/images/apple-touch-icon-114.png
create mode 100644 ui/images/apple-touch-icon-120.png
create mode 100644 ui/images/apple-touch-icon-144.png
create mode 100644 ui/images/apple-touch-icon-152.png
create mode 100644 ui/images/apple-touch-icon-180.png
create mode 100644 ui/images/apple-touch-icon-57.png
create mode 100644 ui/images/apple-touch-icon-60.png
create mode 100644 ui/images/apple-touch-icon-72.png
create mode 100644 ui/images/apple-touch-icon-76.png
create mode 100644 ui/images/apple-touch-icon-precomposed.png
create mode 100644 ui/images/apple-touch-icon.png
create mode 100644 ui/images/favicon.png
create mode 100644 ui/images/large.png
create mode 100644 ui/images/square.png
create mode 100644 ui/images/theme-default/edit-alt.svg
create mode 100644 ui/images/theme-default/spin5.svg
create mode 100644 ui/images/tiny.png
create mode 100644 ui/images/wide.png
diff --git a/ui/images/Makefile.am b/ui/images/Makefile.am
index 297c0bd..0c8700e 100644
--- a/ui/images/Makefile.am
+++ b/ui/images/Makefile.am
@@ -19,4 +19,4 @@ SUBDIRS = theme-default
imagedir = $(datadir)/wok/ui/images
-dist_image_DATA = *.ico
+dist_image_DATA = *.ico *.png
diff --git a/ui/images/android-chrome-192x192.png b/ui/images/android-chrome-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..8beb37f0669354f6b041c1d6aeeff1b30cf92fe9
GIT binary patch
literal 3508
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
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-114.png b/ui/images/apple-touch-icon-114.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3a5fbb8c1058c57d6759e5b734271a26ef8c6c4
GIT binary patch
literal 2360
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
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-120.png b/ui/images/apple-touch-icon-120.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3db3fe047232df72b7447661044c4fdac13dbcb
GIT binary patch
literal 2382
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
AGynhq
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-144.png b/ui/images/apple-touch-icon-144.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d8b5402f681c74b46505b36fc2c6ad858227b8c
GIT binary patch
literal 2758
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
M07*qoM6N<$f`&Db`Tzg`
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-152.png b/ui/images/apple-touch-icon-152.png
new file mode 100644
index 0000000000000000000000000000000000000000..83e288d3569aaaaf95168ca7cbe7e4f6f7999316
GIT binary patch
literal 2962
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
IM6N<$f(Uf#@Bjb+
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-180.png b/ui/images/apple-touch-icon-180.png
new file mode 100644
index 0000000000000000000000000000000000000000..1483a5f11f4925125c40099611fddfd717211847
GIT binary patch
literal 3404
zcmV-S4YTrzP)<h;3K|Lk000e1NJLTq006WA006WI0{{R33KRAK00004XF*Lt006O%
z3;baP00001b5ch_0Itp)=>Px$p-@azMgRZ*+88R@7AT9yK8(je0A!!L7jXao{~@pC
z@sS?@VxIAk9UiXb|Nj2E6m7c|Z~pxJ{Qm##`27C&`TYF$+a53jXQ7|m^N-0!`|0fr
zZKd`4{p0ogL%ZlHvgY~x{xr7d@suOI9CMV*P5$=n_4@5&#_aT|QT*b>^PM+_)A0D$
z+HuS7{qgd^DSG|r(o(?c-Z4P(m@M(Bulw-!@c8GM%~kKq-qB;8IEJ*=>bsuMT_=66
z#y*GVuFU$>sT+2xqta%=F@L$;iuSs6z1QaJ_21w-O66W^!s43WmAtUe;nwi_-6uHq
z$<5p7@$8J0v)X~=?)0?e_Vc1Z{_^F%B6jz|fz4HxMvl4r<K^?Vyuau7)pDlv+ULvV
zsP?pIm%!NVm7VByf8$bL_{NOlM^#jpzU#l&qQ>0o^7qQ$>dWi-gtXE1z{KZibm8#L
z=k(dhN{#u@pm(gxYNW^Mx6=3H?fJ}^+8Qg|iM878!~N~t)8+2hdaV21yU^&dT%5wG
z)o|pZ#pUwU^|4{5)N1O2i>}vr<bs>!ae_<d>MsBQ00DGTPE+}Whmzg^01G@xL_t(|
z+U?!<U)ov}0PrU(tdKBdhzKY{0T;M%@4f2Y)>*ZVT4$}*TD$)2mmn%hZbCwDf_y&Q
z-`;!T`}XwQbI(23Py640Ik}KrTWBt#kvuw&&ZG0_JUWlgqx0xIT5NRPTI1ecqXW+!
zG`=>x&^=dLTGh6CS(hW|tD82J0aK||m;swx*u!%GZEpXpBE?S&GgJ+m-#q&2ZqA@e
zU0CUj`HiC+7gECftRBYSG8)}$qmxN>)gGVEnkyYk;c$4#QE5gcMC0w<0JBPESm3T9
z=B4r2=AV=8-GSQL+JW8elgZe42GuenG|FODspc-(KjawSJlP#9lu=gU*zVTy5-tJy
zlFh6#tg`(7E06!|jujBf0@@<s16#+HVxt?|*vu;IvjY_5rP$yY0Q?Fc8(gjw6}|S^
zpkhT=tpTDO+bv`lC)tIA<G6U}x+c~*6RWC`v1yM73%SKfcI~EFEHpY?%3)T`(b0~{
zS{~#CyO6J1FuJjuE6^A{(qUd<PO8UZ;-Jl|TxJ#4c18K}@m=0zQaunB1-)0ri8eH)
z{tlzZ147J%`VTGwx~|E<Wmc6wrhc_hGZE?~5zv=&oMyx4)a)1+YAz@!T!xQM6KHI%
zJ#`Q63N{zWCgG#gWVGroC8H}(gqsUwCpc_$n$n?aN=XiU@=HMm=s`1V^cq)<#wcdw
zn0BVfWHMP+(8FB$T)LWSc5KU1w6ZUS<oc3U4nIBW7Ff3-hP6GW_Wx)yIS6Cn!1mT;
zEVfLn*yPrBEobipe<L=6x1j;U=Gt!7C^x5YA~|GVY6mxumnvVQhgXJUC$;Qs_$6-`
z7~-nWtHYO9)ZbO}mW*tGb~nR-F4-LZ!`4H|c3~ebW<Zg~y6^Vtm}xjpwETtJF$c@N
z6(1k`0%lL5kkMCd%$Y$`BWUB8Ph_%zO$W#Ka%_Q`KM@+Hy*Wl7It;#i6M^0y=Z;zB
z7Bkjjw5E@Y)My9SCwxnGk~TM)v6dB1Lcau{HyF))$r8+P?I4f+R5?klBC@efzIR*x
zXq>tav8r~q1UTO2m74hYR&8>qK+X}imw8VD`J>I$qlIH`=LqwhcA3MQg9Bs4Q8`vS
z7;}g*LZF?8t8j+s=B4rFSnN0~(y*p3b=-lqts&W48KNoO{#!<;qzBey&JA?RDUNkF
zBDsOaS6|V0<{UvIFNX_OmEAxKLARFzCo*pv{c;B=ZAWqj{oI<;=XGxyZBFh)><-Tz
zH1b&bHnKwy`f2QebwfJAao=op`F+RP_4V~x$9?&&Pn742r{g8vTOnWaeQ$6k8ufZL
zI-O4A^+qd#z1QWlu<wY;qGwn|VW55U!C;gCYn~Trj|S)OeUQ;tWY2`%K*|n_ue#%X
zh31u=kVk)Y%tA$@iOI(!#4Tm1p0A*&3AZ=c;e$EqT_Z|0<l=!>_eL4)_thvoG<ri+
zyi3Rh%+fJKQ)_e;*FI=yGSu+PG+G^GsJ*?n!qG<O!NGwOFwZMh4Z}YzZr^L@OBbvb
zh&~uOUyR4&ACCG=^qcmA;ZB4zZnl@Ho+%fCKG=vCX%kCXv^YWw_vPF|r3h*tNPW*A
z{c+K%RX#6m(Zv+?SiBSG3NZUi$2-<c^hoO~Ik7%a)mKfAVxW=RAa6AT-PcJoE0q`2
z45<^Toi49ns)M(D&=YZnS!vynq~S!*yv)4*HJcvoK36iAw)LANYTtWCs5P2-OIq|d
zW^$10+$f2<nwcOP?-`m7eFP#Cp`MT?L3Wst)>V|JK_4sv1Ff{~OLLF9ozVe~##wGO
zOLi!=5ALjmTBF%PInf`Blq~r%g=8(Obrsc|=sqh8y7QwnXbY%-=;rZEBCWLcNi-b*
z)M{p^spyGTZI;oX{LtuVSxrSdS*nM!NGh~12tv=?a-h+3mg><tfn+hMHQo-c!({}#
z6SZ-ZL};`Zgx0;caG)o^g<AW;EfE@-2coH4k%o4D&}Q>+K@c1mX<B~JThk3|b|Y>1
z1w`w5aSk;2AeSzuXJ^3ZppOIXzR+g1dfZ1fnzTvHylw#xMeB%EC!z+ty!Tva@K)4b
zNOKK9c62Q2GtS#MFw|1DdFVU~TDQZAc0PbYEz#u`*<lH^Za&Sh22?<_@dHWF9bOi6
zFE`qFWX)cv%cGe^8kqw1dJ<i3XM?&-HX@lIz_$9rnZ=zLEl)e@9Vr5+i}tgZAKWKm
zGOafNYHh117e)W~dL9k+S^A+m;s$L-ZCs4B_W$_nr-nN1?1Sz3!g&rVAs@szV!kVe
zQd@j{KJAo=^`XclnYzEh-b^VV^aRmWbfEmuD52I$qPF~%xAarhULExr14sCwi3~Xc
z)sRK_yKzV^@1fiQeLEG;kLEgEw6{9lP@S?H_d7u~WW)_UsTI@&LGbFGVAQMAd80GE
z_ZCD58Zq|80X3xP2yz?JY*)y;>S=ey+47F->yGkUz)U^ei|xb(Gexvk#yj1=t*>^4
zLNO%Z2Qtz<GduU=%>Ae>dgwF3Mbq};zoCit>8Mo+U@vZbJb;wk%?gFEQ1f`uH%=T8
z(Wbk#%Fg)1#l^lG%0?6xYF<BuV4T{2XtgHZonOp}f9hNufl~4kp<aiJCd=Q%$oXPx
zXOWdWC#}|^&er(D(a1L#nT@|opygeD*yzNjoch+czd@}1k-l$JureC)cRfYg{#6XL
zNb9sLVOGd{@Z3RvS0vHA^CSD{WJ(jO>{HI5`&*vTyz58y(ckUQX5LAib+qLrI~4LC
zmK;HUDtkq@)aM2o?|CsR<PH6~fldjuLSFVWC(tPwEuiLQ8Qol_$T@U<S8AZ;;-HPi
zD>h<HADWE(Kf>NvS$b0AOrTHUqm82>SBaWjo|@1K&#v?^P|R96*6mcZ2-U-6bE);}
zr={1I1g81iZi{Pb*nV|rbD5lqhF_<PBQNA9cS)!?{f7c-8(W;48>nW5{4eYi(G*cL
zRv?{vG@y5lvgGqREzV@`fx<<*Lu$Z^aH^ftF1<Pg+_L!TJ3HMBzsp<kfY9o|C_DKu
zQli&;KwsehIn=-;L+_`Z5j_yCcG<xD%rqVGkRM?N+W&RvN0|a(=DiR3qDR4jCbwga
zZIo6<+{G)Qni7)C%xFvVZ@XL$AQR|!7Px4ensw>bu0Uw|u-KGX#fQ_jh>OUJr~gPV
z9rZnSAULtU!@Z3g*|H;9wACdZR}HybE>DSC|5DBAHTv{7JDK;<!WZofaG{g(r<MBe
zJS#MF7rR+NcJM@-YSN-XD@1KO>VI&U>2vigq4l)0ht?j^1Km}RNS+={Gre*&+quw+
zAp|lS2?<8)=?U%UOb&U&DRlI7iD0wMC?wFd_bn*sVwb>Bm)P9w*KUBB_Yp1tZ43#G
zGyT5e|ILYhXMv9v7HYj~n$dF9w{X?yhM$NCXk^;MUmZ9E%o!Uv(Drpy6tvOCQ?2)e
zOx(j!KyvsIQP7BSnoouhcgI6u+wW&T!sRWeh)8JiGVamqx%&_H>n?ScM6DcO5z){@
zqkI^0srBq)S7e3#hQ7{bwy)!2qRG*VE#Ofz;!QTEu86Ie>%og<C(7+Z7DQY$*@ukU
zA~lJwIoXSrlz3_)ww2;EPjtp1Smw-Tc}COdiY*ig1Okyr$VT2;_`E6B1GZvD=6@ML
z8r@E(TgXo+e_|wvylg!Kv$RvwuPyXB*w>8yBpGQ(y+41X%ns!Ccm0`t8;R%B{`D4x
z{At;LH(QXLKqF{<b5B=8Lqk_jvp?f+l7*K5y#DmG-~TUvEK>e&gUX}x=sY@)&ZG0_
iJUWlgqu&lX2iN~cNS!oToM5*A0000<MNUMnLSTX<ZvN{4
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-57.png b/ui/images/apple-touch-icon-57.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc02906234d94a741a4245c11467b2466d3539b8
GIT binary patch
literal 1449
zcmV;a1y=frP)<h;3K|Lk000e1NJLTq0021v0021%0{{R3yT)_300004XF*Lt006O%
z3;baP00001b5ch_0Itp)=>Px$+E7eXMgRZ*yB2T&VxAtZ<&4KbA+O~DWS{^4|JoNR
z@sS?c6esbI8@dy1|Nj1p#yz_gZ~poE5^<-C$3Ol4|Nj2`{`>v@{rTke{Q3O;2Wq46
z_~wzxNZu|!^!xt)`S$+!@bQ!*{qW*e!Rn*ZX7r{>_xthm-RblA`}e<n{`Kn9X`=V~
z{BFwa`P<&a+vxo2?BYyW{qpnG>bZWg&h+~2yWWn)>G+$@S1PjR@%sJd^47`aru_8z
z+$1#G=<%At+4izych2tn-n{j$Tl1Ya%~h57=kO(buJ*fizaw|-^Z5Mb%Z$fAv)X~k
zMT`FX`{Sa-_s!Au!^ipj^+CGmJ&CsHw9xIw+tzid@zLV>%$SY3)FiOx?wFs@Vx91#
zs`~Hs^PxZCK~K!!>sFY*<y>f`$lYMY>&HNdzTlML@5}4={N`eBM!e{i%ule`d(!E(
zk=OC@tg^P-g~8#O=4Em6w7UA#sI1}j(eC-dEPTW@f}7g%x8?TfdxgCobm(z=>xPg`
zzUkYBv+BCk#yp1dm@B5<^!(}7M2)$S*YSkX@b}Z!k-XJCxaa5a_S*6Ky&ZGd>%QPU
zOt#YFMvu9)(c<W{&$<z8-jBKFVr^xi#N_Vu_SxZP3zzc%0004WQchF-gX&ht000AE
zNkl<ZNXO0A2U8kB6ae7Rgo8UcN+{A4MJa+{@4aF{jmF-4?=5zt#`GT3er$GcJv<W@
zn48IrZy1K-=DYXy-CMXvkNAg_UpyR1QT$}tO`oTufrrc(`ACwg`V4Lj;cx=7znv6-
zAp0JpW7@ZIcDl5EJo?5KTV^0AP#rM!(p}pYnH+}9veZSzkYyeO1*&JT-0b6Wxr`0D
zWhaJwdV-*UtRDmLr;Ho&KsHvE)!(Khn{TAj;HiwMG(yWev9h<BsgzV5bbtnp%4C+n
z^mM?IfP79eOZ0SPfM)n60;9elO$U9$$jT?M)zYw7ReLYGA;ZH#_C(ibP_w*z1KXjo
zIh8<l*?)VPPWtYQ?<_Dey%WaDhD((IwkFyr2eV^M!q^;1dT2g-g&rYKF8J-TAK&Mq
zZW79U-O_TMYQxL^=8<qTsjq1oPr0hA9Z01xlJ@jriqp4L5rl#m-?iPB#>uyXelHxN
zzA$cKc2^2P5GgJ@S7zp_g+fzqrc@ff7{m6&-bBD~**LN?Ntgs)m2rN8Qq!SK8PG*!
zW)FaX_GHGn6T7fp;;JShLybtPE8<8ulT=Y_XQlULf|6=dF!k0%)|rcB<NJ7n<6@+u
ziDISSlvqxE6_V+8R(hwHq)9Vzq&=OHL|tlR68vgNg<nGn<>X3jrHRQpsKu%$PVhEB
zpyt}{=GK@CsZc$GrFo@*x@$pFMO_Vd;=O}vhE{qpQny(O$H<jFUe!X~+bh~HJxM|^
zy;J^Bbevz93@_kz>;Kthp_!>hwaL`@>sz#vb#2O0{BMHs_oRQaB4mt~(wU}AbMpGP
zFEMM(C43~cr4)-l@sTBk8gc6yUVeC0{raewv+(`fW;s_uN^uTW7Ice5qM<AUdu%;?
zfj%T}0w*>v;AF8wBmp6E6cmG0M#ItUIlPFjWGhVrpoY1jQRRM-gb7j6c~*7xZ1<1^
zrqq|NC}F8$Wt$Es3vMN_D6*{J+Z;1YDE@1i_od;TNWuxxtN~2`a>}$ktkkYc?kL--
z<Q0^%)w~wtAIW;y%@$hZ*t4Rx7NVS*e0|I(DZ^g1V|m$;wO+v9Rb4)mt(vyHcu#Ly
z>*Au7yIGP~#Y&}lK99%qturToenJ0mpQ-=5<QsngjS;|9a@D%b00000NkvXXu0mjf
DLMJDc
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-60.png b/ui/images/apple-touch-icon-60.png
new file mode 100644
index 0000000000000000000000000000000000000000..d985d9723537ea44123d82d0c8ed957535ce74ae
GIT binary patch
literal 1476
zcmV;#1v~nQP)<h;3K|Lk000e1NJLTq002Ay002A)0{{R34I(K(00004XF*Lt006O%
z3;baP00001b5ch_0Itp)=>Px$%TP>IMgRZ*yBBZ)WS`m<Cn2xp@sS^l$3Xx8|NsC0
z+88SFkQ@MEo{Gjj|Nj0SuI0NGZ~gZ8|NQ#^W1sx~`??ct{r>;||NkGZ<&Viki^o6m
zl_c@^`u_Ls@cRD#`t{fAy_CyMGPURT<n8pURIu56`u+a<?C<>P)0*1ztl{<Y`Rc$b
zd)po`&RLfvvF2c(!@K79`|tFS*YQo0yby7wlfBmHaeLnK`$4+s-0j8FX`#H{kM+gL
zqS9pf;N<A^+K1Ee+$T5t=IG4q`S{6^%H^oqgR=3_;_|Pxyc=@ukeS3Zf%ULn<L&hF
znlW(8?)SieD1EN|@Z(dLzHFw)f6(vw(xbm4cSw-B$lmGE=(Fs>*y5eR<)y~!gpCMm
zqsT*v_sr1bQ()cc^5tA-;6P8!;q2(N(C7C2_PBAv;+o%*yZhtD`Tg~<&*2PirTgE%
z_4@Dhrb+g-X#3r|?wzEk)NRM)qVJ@u?Z(?t!0OfS`snfY>b%wD@zVO(u+-%4^PfEP
zyTI?Dr`C3<@1m)>)a2eWLE=hRhPBb{$J_V%{N`hCsmk6RuI1l4N&Mx^y&!e-xxSmu
zT3*EK=4W%N%ip%-_Nd?VB`)xj00008bW%=J{r~^}|NsB}U#c{P000AnNkl<ZNXOmR
z=TqW96aa9+zyN6kaHvv51Qh{Auw(C{V8h<a+1uIg^t|(`*W38#UUm}#IwW}Uo9`0?
z^P9JC_dT-7$$3;LM8{LYc){xQC$%`Np6Zp5iP{1&xahi@lt@TjEti{WnSb5YRUc7j
z#pSg$rGreIGGDZueE!z#RVuyjm)^DrW2!@vjA>ZI$+9vxR|z9m`JrAAPbNs#cCUgO
z!d_M~d^sY3)nz)?>gMPjD-SF0#Tx-UnP4cXE2R_TJ@k@caH(hbF@6mblafT)B(6}*
zH+z@EJ%@)g3(d*0d-!qr9Kht<RA)J;;m<->5e}=VUw}Hdd7dA4mV)g{_DB6p5%)`E
z2~^<iq4@F3ZhEK6k|a`;-aB34rSMO+LJ*U^ojl!$t0}<_JN+RcJ8+Rx73tNLc8VQI
zx<|?~&mwLabi3VyR$QP-rgR;dvrw07SEl|eXPcYi#Ra_^eA{K+?31Zfs{YvEeQX}z
z9yfyz8yoyJT4E-dOr~<W@8XrQS?SKuB1k<=@oQ^L2K2r=9WTaFjZ}jML2k9sNm=?-
zF!x{@{)kFpe93w`oBc5Nnw7(OLkvd!Suu40Qp-%2DePx)(3Mq>%3x}zg<Ez=!{FiU
zUA1X~+O*5zl}gP+@h*c^Z5+N~iblt7vf?%sgZn7%oZroY)SAli2V<v|!>(aw-Tthp
zpR>#EOJT)}AYAxtNWg71(*0xEXHt)*560pc3K#x2j~8p#FF@*kdOBolmOE1w^-EEp
zLuOumT)0I~*Y}w7VAOJNB+a3?2GyX_;C9rUxxd@xHfA`f4D-Ag3dSpUcH;i+%$>H5
z9c>Bx4c$avt-OkwGuN#x#OxPh?<6I^j99x^JRz53b+|ZO(tydaLahL<y7d%SrI(!l
zj5}qyTo?zc5dv{k<fm-KIon?C27v4MYp$v$5CqZtM%Z-uf!_o0)Jkd!4MrNvC-|{P
zk1$a^avKQTHl6t#t)MGx4F(KQqrH(Ik9=jZo<Mv)gdmU#P`}L%DJWT>Nh%2BPUr{n
z*==THLf}Ey>d>cCWB}G)V_+$Ev?qY`JPsns2_m`cHr5*LHG+>=SL;BvPfyUrI?kHT
z+4F9+!;Ll?+Vis9JzZ4+Pg9epxHWaw+B%HZnBiC}=CZz5XO|lqY+7+QeQl$yrsQeA
ep!^4ZMEnB_Xw@PM#VX<e0000<MNUMnLSTYNfHCy|
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-72.png b/ui/images/apple-touch-icon-72.png
new file mode 100644
index 0000000000000000000000000000000000000000..2951d54933eefa4dbab35bd3b8543b7879738987
GIT binary patch
literal 1718
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
M07*qoM6N<$f?y<=GXMYp
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-76.png b/ui/images/apple-touch-icon-76.png
new file mode 100644
index 0000000000000000000000000000000000000000..9561d284e2e4d16ef5f058da17ad526cdc7cb261
GIT binary patch
literal 1734
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
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon-precomposed.png b/ui/images/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..1033bc99be53986f54624b0745e2713cced5c79d
GIT binary patch
literal 3673
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
literal 0
HcmV?d00001
diff --git a/ui/images/apple-touch-icon.png b/ui/images/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..1483a5f11f4925125c40099611fddfd717211847
GIT binary patch
literal 3404
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
literal 0
HcmV?d00001
diff --git a/ui/images/favicon.ico b/ui/images/favicon.ico
index cb3a3dc2f9c9ce0e5d3e14f0adab89c28c729ce0..1d998c2543576a16c72e49630317afb8e1373b38 100644
GIT binary patch
literal 15086
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
bLvKw_5T{H{Hi%=kc3}MAXJ2X`9G>?-JFBHw
literal 15086
zcmeHO30PBC+78mXO<TJ-wrXqG!cEvi*mt=svWSWsTC~_2chuI}=`vNP&eNGrXa2F%
zTD!XM3sgaiS_KzeKtMKuge5EqBtS^WzJBxFX!wDmg@W_X{Lkch&hwpf?)RPZo^#K3
z-|vJ*v!U72o_&^v(vG(32^!6hMx)u;-A^CI{N0%6<@F%VpwVJ}OQSJS2Opuu{d^QO
z8tVO;AKA3qmTcbh9ND<r_EGkdD}=rD4zWbRBUWl!ox_X@r*V`%DLI%%N{<wvTo+mY
z-GC_CuMrcw?h;p3jZDyWxSDlRSE;VUeW$LK^K4|t;V($l37DbDl+BT4#0-R?;|4KN
zevio2w6a9HPR<{d^_)a?i|;y}z$-LZu-`ta>*yD=^jYd9`U_tTWKZRFlrW}rm9d!8
zQa1}mS*fRuw8+iU2LI|Wo=B3P+POe??(|Z{**<N^SvFymWTj_N>&DRSw>Gkuo>(_^
z!a#MziVw!b$&YVlX2BS*T-^lUOtlTAcaQ6sDp|#r2-f>#6uiT+`*O{1Mh#?7@^(%Q
zEY5avy>9q2wA`3CyWHq~h5M3A4VS?et>MV-rF&3A<B>ndQ!2X0ErTGT-fURPGc76L
zzLMI&Wg1%7`ZV6#=xzT<V|?g%TI1?_#~@CwHPyUv&&a&Zec7p=OY9S_a(n+wbjH;E
zKKEXDSQ$>oRWA^^y6*xjP2%Jl(;};033r;MKl6hcS6=X|jj-nTmX5o-$2gu*C$MfA
zwggm}f>H|fKkK90{!M$Y_}1_G-nD2nWgAQvjt{1bEPd>6-!d-TsWoVZqsXCmxxM50
z{terUgPS$^Aq{&o0?GqOdRKHTUH)dIUB{w$hwg6{d8riX@v6MvEml0&+s+!lz~Qm)
zhBY_xXNsY4R^#<|y+jTPcIq$ZIBKLz*?QPK(`fi;nf}!KuPL9l+Vq!KL+fT&&27C=
zvY`1dnPkc6Bsz>;z|{G@9;8WGm#Bz;dvW)~{x-eS7fGH?>AaR_Z_jTW+dKbZaR3?(
z8fY}Z-)Xewn;37U(Yi3NL`S3Tc@T0Hn2&j_7$_b27#dB7aVn2mXY4RUV4&6~%a2-k
z{-6KIvM<Jw<vRz}$Ajq#(K%vN`*mV`X94ka=PklAeh0E6dEeNQqJ0Z-ExkatA38@0
z_a&3nU-em!2C{otp7<wXoFtb>Y|kflNsEZf@=D@{f=^^C8;HNCn~7+(h_I}GR(rB#
zZy+f?ASPu;fs`KuQhcxr^VUSyefP8ZXtjBmY`Z`_f$RQuY_nQkL4dNJ08J|ax=sQN
z-2@nwgu<X8_G=}CowW>X_Zw8bQR<Trr9A~ChUl)N;<(m>kyf3-%J!?cUlkGp+^;|*
zBtYNE0;9qm>-Izp?*AJko;kX9pO>g|$+rFeh@qA2MhyB)h%skDqW%obm1P`%ReTC(
z#^8UrXW7Y0iF#Edwz-39vnv?nK5|W)|C#O@-#^MLeg2@}`R><>1NhoDzmH8h6GwT}
z9UDc~eV0bI?yrhcp3uh|vtT})ho$-p;@1>sJqKSqjfQ=1+gV6_*i}Y!E9#jBRg)`U
z-ONr^w}kh!qqAW8D77%qzPp<JmbA##i7KBg`N9Uz15=~h53P^uJ|UTB{1MVjm&|GE
zoMl6)pVAfQ5o6nL5FyeMR+6m3#j&%{#j;-aFQ@ai%lOXQtUl|e_x0^IF_J?YXDKrc
zsiuptM3eJ=f4j$>j;{ZHVuIwzjk)@>Fi&@O!%*rg=Q`T9tn+=j`OV;fyKnhM{Irqj
zow@$y=Z8`Tr5oFN@S}KDhAL6}L&RWhd0a<k`wGv0$k&JRS~o{3i{JLCKL4ik?=#Y;
zxE)P@VZe9ru(G3C_NGO59L|YRoqUGUalfb?>v>r>ft{lr@Vt1JYezP6Srv+vz93Ey
zfa<sXuNS}L=bP~XG2}Ibs*kMMl|nXr8&AcFA2eQWS9B*ig@(e=Tlzo6-qQE!&wTEb
zplYsDZO2MB$kzlw#Tu8&%j@WFl<lwikwrUf$h)7}#oqgPwBu3jc;~a4Gj4Z`5Xd(}
z+&!atc7<`XwcPXEiO=5PPPu^RCFoqmftGbXrn0pztF6z6E1gcNorxc{LeDZIgbM)X
z)texdZ#uB(uEFv?uW~2PzQdiSY2ms+`)Ur<t>=i#*1P}ew)e;DbV^Mp&TH#ArACOs
z`d`KRU+0-VvFhPjb4NMX9>iRCkgoOx!3IA`<wo{M)<2bbUd!{x_9qI=u#|67Ew3_K
z#>I8+OE!hvS9Vu&9iW5j30+u!{d!Jg`9@F6nr6i~9O-mglgP@`slsbaFsI%ODP@K;
z%Zl|qYt}99)H!8b`%VeAU%b-GRI}FYZw0@bX8Wo8y(d2NF0{;@Ut2$8pK=o8tmcAi
zG4_1}zI(o@YR(<Kckl9Yxi3CZ%%#URaEVU^D_E;4RykSDu}A$X!uR-;PVcQdlsF?(
zJ&BQ}`JR=pH*;#t5M5)cNUk&vYCpakE*g6!L~!U_0DsO<>ZEiTUw2Pn>`}~NWT?+N
z=jpmUN{!V4)uzuPN{!U9bWp!LK`m~DK`m|Pe0W3NJFx!ojC~4E#t-TU=c_tjw*tcy
z-+cXmYu>}a-12XlT@=t_`q7)0f7qk!k!Smdl`)+BJm30-g@Mh+8~y_0c@FRW9n4#O
z@CVUbp2slYIX8gbG!DP9V#6Ip?~+X6!dRB@si9&y@52kd86fB`4HiOvK!fa@PxZEw
z-W9~xE`^plv3&0cx?~f6hdG2y6Isr=E-&A+37^*fQUtyI(`dU+<t$bgEb^1;(;_-Q
z`qO&NkoJ%)@2cNk@vAE;4Q_#|uvWMm-eSBI#1|d*Dc!S&Q}psHlRKWALGRubPge>e
z=^dG2^tN3Qbn*TeJh>$~s11u;46r851Ru;d!Uu~r<?k#~Od4t*oa0o#QyAE2u8kCf
zAg¥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
diff --git a/ui/images/favicon.png b/ui/images/favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b27e41af9d2a13816eb16eccae38304fd82bc3b
GIT binary patch
literal 17356
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
Dv2qs%
literal 0
HcmV?d00001
diff --git a/ui/images/large.png b/ui/images/large.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e58eebd70006dc9c3f6734848ba1aa414c0ee8a
GIT binary patch
literal 36434
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�p5
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≪A>^egPEVje>_*LkKF(5
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
literal 0
HcmV?d00001
diff --git a/ui/images/square.png b/ui/images/square.png
new file mode 100644
index 0000000000000000000000000000000000000000..e97d58483f0b1fd396d0901270edd84ce42fb960
GIT binary patch
literal 15679
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
E2PkrQ3jhEB
literal 0
HcmV?d00001
diff --git a/ui/images/theme-default/edit-alt.svg b/ui/images/theme-default/edit-alt.svg
new file mode 100644
index 0000000..c7ea499
--- /dev/null
+++ b/ui/images/theme-default/edit-alt.svg
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+Copyright (c) 2014-2015, Team Redux (http://reduxframework.com)
+with Elusive Icons.
+Copyright (c) 2014-2015, Dave Gandy (http://elusiveicons.com)
+with Elusive Icons.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+#################################
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+#################################
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting - in part or in whole - any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+-->
+ <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" id="edit-alt" height="20" width="20">
+ <title id="title4694">Elusive Icons by Team Redux - http://reduxframework.com/</title>
+ <metadata id="metadata4152">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Elusive Icons by Team Redux - http://reduxframework.com/</dc:title>
+ <cc:license rdf:resource="http://scripts.sil.org/OFL" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Elusive Icons by Dave Gandy - http://elusiveicons.com</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>Team Redux</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ </cc:Work>
+ <cc:License rdf:about="http://scripts.sil.org/OFL">
+ <cc:permits rdf:resource="http://scripts.sil.org/pub/OFL/Reproduction" />
+ <cc:permits rdf:resource="http://scripts.sil.org/pub/OFL/Distribution" />
+ <cc:permits rdf:resource="http://scripts.sil.org/pub/OFL/Embedding" />
+ <cc:permits rdf:resource="http://scripts.sil.org/pub/OFL/DerivativeWorks" />
+ <cc:requires rdf:resource="http://scripts.sil.org/pub/OFL/Notice" />
+ <cc:requires rdf:resource="http://scripts.sil.org/pub/OFL/Attribution" />
+ <cc:requires rdf:resource="http://scripts.sil.org/pub/OFL/ShareAlike" />
+ <cc:requires rdf:resource="http://scripts.sil.org/pub/OFL/DerivativeRenaming" />
+ <cc:requires rdf:resource="http://scripts.sil.org/pub/OFL/BundlingWhenSelling" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <path id="path4656" d="M 0,20 C 0,13.333333 0,6.666667 0,0 4.3066666,0 8.6133335,0 12.92,0 11.826667,1.093333 10.733334,2.186667 9.6400001,3.28 c -2.12,0 -4.24,0 -6.3600001,0 0,4.48 0,8.96 0,13.44 4.4800001,0 8.96,0 13.44,0 0,-2.126667 0,-4.253333 0,-6.38 1.093333,-1.093333 2.186667,-2.186667 3.28,-3.28 0,4.313333 0,8.626667 0,12.94 -6.666667,0 -13.3333333,0 -20,0 z m 7.2600001,-7.26 c 0,-0.786667 0,-1.573333 0,-2.36 1.2707368,-0.104839 2.347146,1.140345 2.34,2.36 -0.78,0 -1.56,0 -2.34,0 z m 1.02,-3.52 C 10.726667,6.773333 13.173334,4.326667 15.62,1.88 c 0.833334,0.833333 1.666667,1.666667 2.5,2.5 -2.446666,2.446667 -4.893333,4.893333 -7.34,7.34 C 9.9466667,10.886667 9.1133335,10.053333 8.2800001,9.22 Z M 16.22,1.28 C 16.646667,0.853333 17.073334,0.426667 17.5,0 18.333333,0.833333 19.166667,1.666667 20,2.5 19.573333,2.926667 19.146667,3.353333 18.72,3.78 17.886667,2.946667 17.053334,2.113333 16.22,1.28 Z" style="fill:#ffffff" />
+ </svg>
diff --git a/ui/images/theme-default/spin5.svg b/ui/images/theme-default/spin5.svg
new file mode 100644
index 0000000..350c54e
--- /dev/null
+++ b/ui/images/theme-default/spin5.svg
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+2012 - Opensource iconic font from Fontello project http://fontello.github.com/fontelico.font/demo.html
+
+Vitaly Puzrin (Fontello project)
+
+* Angela Berbentseva (emoticons, spinners). berbentseva_angela(a)yahoo.com
+* Sebastian Janzen (crowns). sebastian.janzen(a)hl-services.de, https://github.com/sja
+
+Contacts
+
+Vitaly Puzrin (Fontello project)
+
+vitaly(a)rcdesign.ru
+https://github.com/puzrin
+https://twitter.com/puzrin
+
+Licence
+
+All icons are distributed under CC BY licence.
+
+This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
+-->
+ <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" id="spin5" height="20" width="20">
+ <title id="title4144">spin5</title>
+ <metadata id="metadata4142">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>spin5</dc:title>
+ <cc:license rdf:resource="http://creativecommons.org/licenses/by/3.0/" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Angela Berbentseva</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>Fontello project</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ </cc:Work>
+ <cc:License rdf:about="http://creativecommons.org/licenses/by/3.0/">
+ <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <path id="path3" d="m 9.23077,19.99992 c -0.11988,0 -0.23976,-0.0999 -0.23976,-0.23976 l 0,-3.63636 c 0,-0.11988 0.0999,-0.23976 0.23976,-0.23976 l 1.37862,0 c 0,0 0.02,0 0.02,0 0.11988,0 0.23976,0.0999 0.23976,0.23976 l 0,3.63636 c 0,0.11988 -0.0999,0.23976 -0.23976,0.23976 l -1.37862,0 c 0,0 -0.02,0 -0.02,0 z m 4.995,-0.93906 c -0.0799,0 -0.15984,-0.04 -0.1998,-0.11988 l -1.81818,-3.15684 c -0.0599,-0.11988 -0.02,-0.25974 0.0799,-0.31968 l 1.1988,-0.69931 c 0,0 0,0 0.02,0 0.11988,-0.0599 0.25974,-0.02 0.31968,0.0799 l 1.81819,3.15685 c 0.0599,0.11988 0.02,0.25974 -0.0799,0.31968 l -1.21879,0.6993 c -0.04,0.02 -0.0799,0.02 -0.0999,0.04 z m -8.55144,-0.0599 c -0.04,0 -0.0799,-0.02 -0.0999,-0.04 l -1.21879,-0.6993 c -0.0999,-0.0599 -0.13986,-0.1998 -0.0799,-0.31968 l 1.81819,-3.13687 c 0,0 0,0 0,-0.02 0.0599,-0.11988 0.1998,-0.13986 0.31968,-0.0799 l 1.21878,0.69931 c 0.0999,0.0599 0.13986,0.1998 0.0799,0.31968 l -1.81818,3.13686 c 0,0 0,0 0,0.02 -0.04,0.0799 -0.11988,0.11988 -0.1998,0.11988 z M 18.06194,15.7642 c -0.04,0 -0.0799,-0.02 -0.0999,-0.04 l -3.13687,-1.81819 c 0,0 0,0 -0.02,0 -0.11988,-0.0599 -0.13986,-0.1998 -0.0799,-0.31968 l 0.69931,-1.21878 c 0.0599,-0.0999 0.1998,-0.13986 0.31968,-0.0799 l 3.13686,1.81818 c 0,0 0,0 0.02,0 0.11988,0.0599 0.13986,0.1998 0.0799,0.31968 l -0.6993,1.21879 c -0.04,0.0799 -0.11988,0.11988 -0.1998,0.11988 z M 1.87812,15.6643 c -0.0799,0 -0.15984,-0.04 -0.1998,-0.11988 l -0.6993,-1.21879 c -0.0599,-0.11988 -0.02,-0.25974 0.0799,-0.31968 l 3.15684,-1.81818 c 0.11988,-0.0599 0.25974,-0.02 0.31968,0.0799 l 0.69931,1.1988 c 0,0 0,0 0,0.02 0.0599,0.11988 0.02,0.25974 -0.0799,0.31968 L 1.998,15.62434 c -0.04,0.02 -0.0799,0.02 -0.0999,0.04 z m 14.24576,-4.67533 c -0.11988,0 -0.23976,-0.0999 -0.23976,-0.23976 l 0,-1.37862 c 0,0 0,-0.02 0,-0.02 0,-0.11988 0.0999,-0.23976 0.23976,-0.23976 l 3.63636,0 C 19.88012,9.11083 20,9.21073 20,9.35059 l 0,1.37862 c 0,0 0,0.02 0,0.02 0,0.11988 -0.0999,0.23976 -0.23976,0.23976 l -3.63636,0 z M 0.23976,10.88907 C 0.11988,10.88907 0,10.78917 0,10.64931 L 0,9.27069 c 0,0 0,-0.02 0,-0.02 C 0,9.13081 0.0999,9.01093 0.23976,9.01093 l 3.63636,0 c 0.11988,0 0.23976,0.0999 0.23976,0.23976 l 0,1.37862 c 0,0 0,0.02 0,0.02 0,0.11988 -0.0999,0.23976 -0.23976,0.23976 l -3.63636,0 z M 15.68432,7.83213 c -0.0799,0 -0.15984,-0.04 -0.1998,-0.11988 l -0.69931,-1.1988 c 0,0 0,0 0,-0.02 -0.0599,-0.11988 -0.02,-0.25974 0.0799,-0.31968 l 3.15685,-1.81819 c 0.11988,-0.0599 0.25974,-0.02 0.31968,0.0799 l 0.6993,1.21879 c 0.0599,0.11988 0.02,0.25974 -0.0799,0.31968 L 15.8042,7.79213 c -0.04,0.02 -0.0799,0.02 -0.0999,0.04 z M 4.37562,7.73223 c -0.04,0 -0.0799,-0.02 -0.0999,-0.04 L 1.13886,5.87405 c 0,0 0,0 -0.02,0 C 0.99898,5.81415 0.979,5.67425 1.03896,5.55437 l 0.6993,-1.21879 c 0.0599,-0.0999 0.1998,-0.13986 0.31968,-0.0799 l 3.13687,1.81819 c 0,0 0,0 0.02,0 0.11988,0.0599 0.13986,0.1998 0.0799,0.31968 L 4.5954,7.61233 c -0.04,0.0799 -0.11988,0.11988 -0.1998,0.11988 z m 9.33067,-2.41758 c -0.04,0 -0.0799,-0.02 -0.0999,-0.04 L 12.38761,4.57534 c -0.0999,-0.0599 -0.13986,-0.1998 -0.0799,-0.31968 L 14.12589,1.1188 c 0,0 0,0 0,-0.02 0.0599,-0.11988 0.1998,-0.13986 0.31968,-0.0799 l 1.21879,0.6993 c 0.0999,0.0599 0.13986,0.1998 0.0799,0.31968 l -1.81819,3.13687 c 0,0 0,0 0,0.02 -0.04,0.0799 -0.11988,0.11988 -0.1998,0.11988 z M 6.39361,5.25475 c -0.0799,0 -0.15984,-0.04 -0.1998,-0.11988 L 4.37562,1.97802 c -0.0599,-0.11988 -0.02,-0.25974 0.0799,-0.31968 l 1.21879,-0.6993 c 0.11988,-0.0599 0.25974,-0.02 0.31968,0.0799 l 1.81818,3.15684 c 0.0599,0.11988 0.02,0.25974 -0.0799,0.31968 l -1.1988,0.69931 c 0,0 0,0 -0.02,0 -0.04,0.02 -0.0799,0.04 -0.0999,0.04 z M 9.35065,4.11588 c -0.11988,0 -0.23976,-0.0999 -0.23976,-0.23976 l 0,-3.63636 C 9.11089,0.11988 9.21079,0 9.35065,0 l 1.37862,0 c 0,0 0.02,0 0.02,0 0.11988,0 0.23976,0.0999 0.23976,0.23976 l 0,3.63636 c 0,0.11988 -0.0999,0.23976 -0.23976,0.23976 l -1.37862,0 c 0,0 -0.02,0 -0.02,0 z" style="fill:#777777;" />
+ </svg>
diff --git a/ui/images/tiny.png b/ui/images/tiny.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c52a5192114d92b4e3e6b7e9553d3bcb8f0a7a8
GIT binary patch
literal 6539
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
literal 0
HcmV?d00001
diff --git a/ui/images/wide.png b/ui/images/wide.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a0a2a9ac966ec7141b148c12ef3f6a6de98ff3c
GIT binary patch
literal 44544
zcmeFZcU#k2(>9!hAVok0QF>8|^j?$}1Vli3Q@Vom-g^=eY&1c-6zN5ZAiX4Pl_Fi~
zEhxQ)4gr$ilYQOKy*GPb?<aVV=bu10NV3+fnRCuLXI5V6>8MjvGEss+AZm^Kss<ns
zl=v$cOMZd)<GW0`&!5kH4Ak#}D*9PgiBF&o%G$~x(5JYIXOBsV&pB-G8)$<-!8{-k
z;yDO(Li`hA1qAXF1%cLVK%hIRAkcNs_f7ipAW(U@hN`krpw;FKS*VfmA$kYQ(=Kdc
zX3xW!*8M!;$s<!sqXbaJdQ)}N`ZZJ2`?vVHz<!n~k#5(1&|OwGye!DfMRDssB{cqO
zIxFXM9zFy|{^dKr@B^8bujBHdU0jCY;fh$g`}VUfr(q%+Sv~^_rbY8g(919o`2Rip
zKO6l2*$*boI8dk0dlWYm++iOEj;*im$G*O`qOetoiz*(!YumdYYHJkSqi+)(t{sL#
zU&W8f8xF7B#jcPkt|(Mw2gA*+>6TUg?IK9&%UwU7`dK}Gx%H_f-~k+W0&6qfM_r5-
zYb5O`7P;8c!TQkseNIv^pk}^^AH&8PV3%tb3mra(+WOkId0D8naW0W)kUtQ9cO<e&
zPxo+qUL>k<RD;dUGw40!zd};@o{e%`m)6C;Aw{j2dG=%w!H;68CxzjO{}OZVQ4bY7
zFI0iwS}F}cHav!97sG^EmqKE@y{gccTXktca*KW$d(m{&yHsNEN$;R4>u<*ORzYH8
z-62>09sY9=sL`CYO>loYmVU4PuI+viZOd30M|hgkGdB}dm!wr<KB7()0>|MVJp+I+
zUAzT1`LN5#X>!l);h_9yIeY_`Ev?5-OGGH6ZRsdmvRYj}?BLudNi9S?l>f_wdzT+B
z?(HXum%(3{p+u0U*LRmE3ur%=p)E<b0eCXd83C||v}#fcCaI!nf7X~~i7g?FF1QM8
zzwQ<gRl^Hcn)XU@LHg%Ab`1WFVP-e=7NknbBoCSm(+^rXkvIo~Qh39C(q%W6eL(Ln
z+Ju#Zo|JzghZc;p(g%p|UuCSA_=ssRow>{9-?1Q@0<+3q4%?&B2P~d2q3-p4FQWx&
zDpyh46NFI{n&L$W{}oSuMm>GUmztKNwk<$o2YTSYElUQi7GVujX><BxoV$>Mlr*aN
zra-|}R2~GV;U+h^f8(w{qbz3<h?LYyANA9hPR>i>zu!Y1x*HPRbhGkk{DITgdeqnb
z_mcZAQwR9+%pIk%b)&rYIM-K*mCZLH>Pn}-jCE_c=H#~|MAZIic~3)ROO|a5<pW#w
z>kOSqf>I?sp|Om|*;x!#LKnBQa=L|~wbk^GzyHCU8#cXvDCYWa<Az&sxQtiz`&8h2
zX5Iv=KfT73w`Nq+%B^$xtey*EM2q(C>)7cmP@c;mRmlA~?ep)~UzXLjc~s9UA|e_a
z=35dl+-b0ev0ML)&EW=?&1iGdNhVJq3>|%MXF*)xz#sp%f*z#jfqo%($BM>}1&{i*
zEsWLFNv1$NDmA-|3$a1tc>{A<iWhYX_1KbxkaHkF=N{aJ;={sx?`N3~Pv2G9e{4#A
zrmM?TTo@S{l{!xvwIZ_{{LNy1R3^Rs=09FW-cW>o#+E2zxq|N{VLyx&?v_zyH_Y4@
zvG17C$CPz&YcbLYNymmX4xWmbHZITD5C8jf`8c=%(`Clo+<aTY;nN=r10(i?fd}`l
zrtvsxQHz~k&&Ya}Ch2KlTHmrt#q`hUN4G++G3SQdk7!BBUjQ-|J1BIfR<NN0G>YO1
zW!>X43rDY-OnoZN`yKyfsA=t-oTHj>gRN{UM;5rA)TtbXV=~RUvX1;+2co*Uy&)jw
zIJ$XgW=moI-wr~DREt`XOHR+7O{oUxO1Wm!B5)U5{YNgrl9h&+4w;l5=eT=cmuWoE
zQF>tfiBrAk#td3`5{<N!-fvl)JZM!3MXk{@v~;_m(L#lDAp+5yD8lz~?2z`X@=cjE
zNT(?S39q{()o~|}Vb?|a!kk;U)9p$sB&uBW@Ki0*6xA$!xP^h|aW*(St(+3pUmo`T
za>tPI_kJ8D$$7v+22^B<-Ws@EWB2OgQNV~jyj+`7P$p(fasRb&_m<)ZcHMiO7az#e
zkBj_ZR8W#4wQ6nDeTltiyS<sw8o_=`=0e=K9o74)Zpk_J#loBgZ(Ez-MzIw)9O2Ac
z#ipIdc2Iq{Rf={S&VvM^ybb5B1z8rHg~hd0`X}-gE4OW7>?mi2u%~7OE8*pnyRGW6
zPrYL=EjT>#?wwswuxUCwV`rx3yt#P1cwt_<-uU<s+d9)zCeV$Hh3hmx&c}pfB+Pw)
z;%GT2#=5bWS9A2V*}e!Ey#TEFRo_HNDzJ<-eC6el)=C*^q<`L$Pfa>{K;HOyI<N+?
zuS9cZP$A(72!*CUt{zuXM}cYQ$olwYNKqonC+f6c;f+IAAJz^r81W+UJAH*5+N|PJ
zK&x%dSu4(A&7~(h!#d<JTMD(czxTPN;tvMj{AszsA})@$_yG(3UkWy}_ShV!3@YVB
z8AgxS(>7FRYLT3`Y?{YlOd55+B-%^PBV`UXlrpRX|0Hdo!OyuBMHxE4tLMKsCY-2x
zpNQLK8?$sL`iC<YE=^u~|HSl&kdkz?g0+53PJ?lzJn?DdT)Cb0RyQH-5GPIoyn^CJ
zc8_jOwMNvs6~&hC8nX(4gSF-=+cf!rI5uyq&CXc%5Fm{rDtTRRtX7Ri!)PNhADyz>
zL~0)0PT^hQ_{d~?T_`F(Lm)J?;&b*5hkO43z<$o{4+GCn3)b;PKaOMPtnCT9x{iYS
zNtdHmnjp5l7_AUB>p#8>OGBLPLnCx;P?Yo9s9Q&rY&Rv=ylCf^$2Iq3ln>-uR6c9o
zZd0V+DB}QJk@!Xk?(i6w)(!D1=jY2wpf?u3ki-!G93dz}Zg!(PIzMKX<VHOM37JMN
z@txD(ll~*fWnUopU92ZJC$g8BJHnb&?eS?iAbcB>K>m=w6|^u=R=~#ro+2fflv7g-
zRbpA^%>Cxw0!(K-JK4Dz2+Q}d=*a4OC{5Bq{`<4e0`(rkou(L<xVcsZMU@z}WU}#6
z5*=<5qa?&W19{fXKC;fFBN~>b?s3dA#3_jR96pkBY|leV-z!v3VWKp@pyJ--|H{?`
zHF)y@-=f{pHlA~s-`KK#lD^$#X8AJ9q0A2=#mSlCzQQ{0k;l0mPT`-OVgsM$vGoj!
z6gx&hXFIvb>yoh9w`(wL%0cR(_p}ONd#P?(r0K)e7gk;LxRWkDVva%TYKcT}W;_Th
zPv3Ylc;~5A<axv<f3GrE=Ket`F()wS!%@wT&Fnd#lNPFF_XtKzq_5<^JfGn8YhshP
zP!g=NY}$h_G7kqt1OVIKD!_97f`WDW-ev-*UjNw^o%vIq(6Rvl0>qMkW&I`LW(@ZJ
zEJ&{>{ew5hs)b*MA>vxnDHX$Bk~LaaIw&pVX?I<Oyw5*y98F3gDA{_MOJb7!T4@@v
zwCf-1!yvd9Zj}zcmjw5D#kcZo(DGP&5@wk~eZeJ8BnI!E0y@Ns*R-10Hw0+ug}_Lg
zoP}B_ea-DpSUEufpI!9m!OlU5wIEMtoJ#Bd-Eq!Wi4z$y?Uy_xNSOtq@9AC-k7i&x
ze?FgUVOCfM3`Ax4edyG+04Pwd9bP<h<*VCKLe@>J$9l-`kIROqvsh8+(Yx~FaNfoB
z+Xnq@hIPwwxzF&G1vpEsL9AnYU7mHE<~vDVlDp}r9D!t8DQ*{1TzA<ne=3~nvs(8v
zx#SRL-{AfagyKbpW>d&?2_8zWI>X;r1AAq`w-PidO41!4+A#oQPe*x0Jc`Vh;@N9P
z<Q7U}stYoEbx?vcn`2!M4s>wA7Jd6=2b&ec=*qlAQlV}H<)b^Ct&l_471kE#M9$+%
zW5xFHq*ixZQ_2@-)W34i;mV2)^63nZWtPXwG{JT_-hh}lL%LOb62BJHMRpViTx<U2
z4tn&(H&Y;l)WYyFIg`a>@+{7old<m6umk60Yd<XSN<FrM^t&myX`L1T)wr-hcS>7A
zo7!;rTJEHGMB#xNj0`ya-gz$L&xt}xUp;KwS^Y$Nh7}aok;Tr{*FN2?IJ;A;_S@Uz
zlZ0w{4{D9HevPE+%Q!0I9Zsq6&WLI1g-|}1Gu`4{Un#knA&G^pV_c~<qO>mlRKIyh
zz^?nmN+zaqdlNJDn9%;~?ztVpa^|7Cr}BF?ZI7o9pF)A_NoNm#-JAjkt9ghtonZs~
zre|DHx+dDo(kE1bj(L15Gkt~VHGYZ{<GF5Elr5K{ks8dH-Q4G!nZ|R$_)64-;$WG}
zsRCyx?Rn3UeFtk>#bw|Bf=al-cPf%U1*ma@k|+2<xdFnfJJYQ+eu-1ZPb6<!H$H|r
zHgX0Q_8xjnc=2xsbWZp?Fw|^Z&M_{HLUy1xnOjMU+;>+)T$q(;-_x9jF&0Z3r#OlZ
zh{}W54O@6_5cMfes%`!Nb7W?3(8HU1C@7|?w6JnSxLfHFmJPyGhDKP8J5rq(m2Wz9
zV8rZC%@bc9Z&?MARZI^TVQtsTH?DbpK#{dvI`<hxw5jj|I#Xf=7p!LgF|K$5{tWj<
zH~eY|6u}vcdC`&jOXooJ^Y14z`=2cYVipMxA5--v+w37I2_sDK@Ayn!aL!iJ+NCPv
zw(k{GN!4z182-?(RqDal%h@UCsN&pb$QR#7nR_8|%vQG+*LvJ)Mz6D<dB-|#4x1oq
zgQ8N4Bs2Nn1rUH?S?Sahz(|u|nEyO9#muzdB)p$)Kf7EU#_etdQBQ}mm5Ux^f0`M`
zU~t(+_x`~u9q1oAri+SVuC@|x{*-_MZmDOEIv~}NCFZ;i=cZSg@9{fRgL}y?GRzQw
z3;8=eIp=LZp`VpVv7ts%h&Ae}ZU*1Gb?%`x@3{~)K$AEA99W&fk&zv|&C6-I4n5KM
zA?|mCdM8LeH(1YxVR@e(WX<?7tVf$9p}^?OTxwo-4$FiD(&)jZw6J7<mc&e!*|Sph
zs<-fe6d-6d=xg7^=HdybTAj=})Mkpp=Y3Fo)N7q75*y37crBS@DB($-6Z$));hb2l
z{d+$`1tW2-BsvE^vKH=?S^7h~E5X-s%dwBo8+sPP?#~|Z1`5z?rQtk&rUA(WGUw}v
zP}}`k$d~6B+4)3&y`uHT5(kunbnpw;*$q}M7rdq1wwv~HXh2Y(3D(9fBVhZ3x2@i^
z2{yj${SIz1{X7qzBf9;-b7o2^eZvudc=cwsCB!Dc1KMD5U?i%#DJU9q+E}9ym=Wf&
zY5tf+)a4DQBSv~cA}axYq!k`2q=DEhoIBZ_CCR<U7?ah1NafRd&d3~t2_VsL^0#V$
zQ)38vhQu!<1|GTkXawqc`eN30%e#=w<IPT?a>j#p0hyo|l5Qz;7)$$B#$`a)+X(mE
z(SWqdD?)5V(IGgh(c~XsOF^L44bd7rtuV{8x(`9SQ^Y?t0LOd0BuHXpw|E?aj=9Lg
z^_tG$gjy(}bb?*^(`nyXcKCoXitK>p{$A&8^Dy`3p+{M^6?Er92dWC&oVT)Lxy~o?
z^Yr1V2ddywUlP5THm)P}{iW8d)%lf6n2IgDh`^srhjk7$$-j>0!v$c`z&;nE{3t@q
z4zSNgGq~mUuh!T2?qk#{&IKk?nl9CE<atIiLr1xw_&3p0kIq@Lq6C4MH!(v%zm%Hg
zjJ?bt4X+tSU@qNTWza`_%DnvW8SgRgu~H4CO@@XLDY@Xxk0}(2l}%aa)p-KoCR8QO
zWsp4;cBVubt>2lF)-hGSKV#*xmbu!}CkIm9?3RfMQFU2oo`_nWdR(<HC_@vd|BT>a
z{8Ogx_~x<FRQ08#s|joIQGK(VBDKHfJO4pi(N>U1#rdsw94GVKy@V+R+^5_iG6bd5
z=fIlQt>tf70eOqDSs5`%3fg@c_msKp0|FFK+NUc18t;0sIO}cgREtNQthd4X6SzpA
z(mA-*5fL3bsZ!4pJ5d|i_u#7m{Ix+>zyE+}R7+}X1B5@==%Qnfw_VpCi@WdAn6$%N
z`A`32j4_Fvbg;W5>4-70Lehkwzg)?7si64BDRK-j_{2f;v#&E6FT+ozP(Fp?VIh_-
zZ@C`kcRx`<KAtYVQK@0cx(S{R>8@1}2qw!<4tc?n^HT{4G(v#n>@t2(t&m+Lr{_U?
z#n`_8=jHVEe<(9oy0C=Kp52yQYjgMD!dGs<M#h<5H+?O^I^m+V;5zI4y5preGnM;s
z-iBT8w5zj11fBv$ip4a*vRAR<6=EIL${gk%exF(TV@;j{#^TaBtGJ7BxD3JhkbwPE
zldnCn>6}vsByz#RJ`jbov4hmmlA8*l*2nwJUU_`Si{99|4ma_{5Je<=r2+~zVca^L
zj9_k!(Cw0V=WkHdJo`4wqvAY`uD{+TrQq+^<~98>snB7Q={Vt`V}+m|o<9E+SpKGv
zCm6fGZG3!e!Dl(0os<TcNxfMw1@q5W!*idgXJ^!E6GfZYz`#`2RmNqrbLrVL1PQ?w
zTQ4zpBxUn!@lx1yQob~-0b;8Aeru_b@CJCjd!frz=Qrs{$x_>W^<fDU;nPSqKElpa
zM|C59?X9=%+}KnL<iefr68(PXk?#-^$q8@d$H?)xy%Kv}3;0u=jr78OmH`SgBC~zH
zs5o$P`^T61_F+Jof*^C{jPAHz?MZHs92(u4(Gqdv%>^3YRMnK5_<k>;bC~qG8GYl+
z@iwHg_@F0xJ`Gpz1A+Mw1|*1Bx1V*nWR=AsWnViAtdux0scZa2$)2DA`m6@A(b}U;
zxJf^YG(>GTZg%(sFJdmKo~xOV*o%TpcSe0aIh`?UwdP)`+04ev0n0&30j@y<yjD{|
z6PYwW8OmFLJ_4~Ejhu38S6U}b-8f!kQLa<{aV<N;juDN>Z5=!CEw;LThCLtO?tI%w
zKAtL~>^dQy=caXsMvm#KR>U{8j%Aa|2EqVm>~2-L%mrVOBZ~C4M-ZTIwl|cnp?*`M
zs&znU(*6sAnoOi|_nLapQX|bd44pQxAu1Fp->im2dM1Gj6NI=qOl&)9(#)&G>#Xil
zh;HCleYU!EHe&T6NfTH&eYpWHAOUOya!4GyWr8Mz=|S`z;Hd!rqqZLXtdI(la}ij7
zHPvUPCRtvk_j=D$%R4o|VOjXY!clxiR!JCYz>-zXGskB$FrRypMX?z~r6n`A|3Z
z2Xc8OlbY4jSB)%xh50m?6K?k8oXb<5P~;f_-r`!ax{A6#hq)#3lMA#Vd5SW!C+ty+
zy)fAizOh)d^~K%uc}Qi&<5u0la^}`&ij#l%!?~0;ME5WWAN9hxzsD#ye-9zUf7j0n
z`{$DBZtb&q^vkGLnzSqR0UHvh)?9Ts=R?d<T7b00b$kDJFI-=Ig4b)$;xPv61Y$B{
zbVzQrUoIAPoTU_XtdxYF)#S+o7G&pRnLECqXHBpjP$8=5VLf)b!QX)?MR1i-Fn{sF
z_a}xA2;T{G?%wan9=OTh3aN=pLAYM30s60~%K22!8$oQWBl$c(%ZFsLEFK}&&xtx{
zH|T5X#E>OMB6H~lK5_G;1GRn-RZ^g5xSF!ki*zr{s$t?S+eb?5+;&U{ntG~5#dYfQ
zZ6D9>S~&vVkOCCcf0)c1p<cW|2XLO_TQIqcA4Rp<QXO7S{;>g{8aNZtZ{}lo5-Tiy
zPsnmMELz1a?9do%gNiB4Ib)@L=f-o)iyNXDK&*j@JZoP&(g}^7!e!r9{0HORZPso0
zh!!P~@&O)#;syjvat%;)!pG7t5tDKHVW0sVyZ^a+W8IkE3ZEcDL}3NvWNpwi4Y;b=
zluwcu1PO54UITJ&;uSs5$8bX=Oc`5ra-En<E%^IZ9SLL7^q}vb?#mZc{_&QGMfI=o
z>gFt)kNIVw@_OzJRhur^mmzQn;2&}!JpfETjY}#423R)(o}CAF^dc!`w64;7kLXz~
z9DE82lrF#{-O5lamcQ?aVMN=fhS+jNLJkim9jVN2SpvGU&a0?3^+E4q7uVZHd4G(u
z2vsWK<+l`1x5(##$y1&r(D<i`6?j}8-pW(q8~`<ZhOI8DRJ{EG49m|S&zI_3nkS>0
zry41ZQ{ZU_DNtCV5hzsO<~7de!;y7`_h+*EHD(HSGr&cIsF|wTi25_bc3c_~Z<5Ao
zGFDK>Wu)Zd^x&a8rE>!4P_>ayFE(dhDHK|oT{2cYHZ@z>pO<i<&Zp-CA#@4H$|>vr
z!ln2f6tQt<XYrb~^@|CLFGJz#jcn(DVdF;CVLDm3!Q8=q2jr*EJ3woK5XmDn{1Ih_
z6{#V-pp4N6ET6E1=#ExB&fN6=DZHCc-|F6^4XNrgZ<(sMJzJI75t29-0u!8?FTIbS
z_@%NKg=V6NLdA1^bH<%|-@f+!Xo={5;swa*G9pgX!H>xwyc^R_85?*zL+$<aW2ARQ
zt#^f6f_!n(5&La(@0_O>RsHW)VSGNg){iHHs2;X71|YC%ir-sU&w&oqOhDA@_g5W(
z5JfS0jHpf>A!O-U1m+@jy5(XR|F%fN%>e=D7}q_SaQ%Uz-ttzmO?;Ec$w9OJv#Liz
zHCvlv^V8xamG-m7HSLvdQ|J;7QOEjF!m{^OO;19yZ=~+5>zd3Xg1o;W7OnnWn`CQd
zgV|R%(hI>QctYyF!stktu7_i(lg%s28`eezWUSm8bAR(^3k(GBQ#4tXvOJ)VY6CB}
zMtJaHB{)9+!Eo#{5kjE24LqmJM#DA4ZK4Dtx{~Z*X%;=gPjf4@E$5Se@?V<#(q*Zr
z!u^OV&BrdW1Q-?xJ((Gw9Z<@C@ppbeOi_Mp+uGS;XX0%!;iwtY5`J<xWemaXvA$SK
z)7!wmcip*OYnZH`FLLmjX{GB@;x*b_%*yq%5Q@M{#jxHi<)S+P4fb+*$1+cOX=C>s
znBq+OyKAUbB<F%3MF;QqBQ{gzwzJ!TM5(!GLvye|0pIq?OawE{`}Ih`unVSfO<s6x
zZ$LXLM~0iR>TX5Nl1n2Y(;Hvvl$m#^QMIh_xwFyOTg@IgGG(|BT_(z;Ftr!H_vm~$
z)S?|`*jju(d7U|sR=eXvBdi0$TKNx5kpSh-8t3k>GQ_^aQU0^vpXy_5n{J<c`P@A`
zX68=Lug5*^X1P?+Uu1tA@cs^0;KvlzFJ`!ttlp*~O+Es2!fOtxz0_u+eZ3^WsLXQa
z)Vh%Wf}K2k){aUiUbQ2%<mz~ShbbQgm>ykMo2dYCQ&(7~N#u&i2hUxfZT}T}Lgi_B
zewq2`wJi9{hfm&nejHTYL$PZ*7I%c#9pDqVK5Zs&xSTE4W@~L{*N$ISaQ@||>mLyH
zBJZ<lr4|=QT=JviFK#2p19e&EehWu$rREh$jGO`%?QI9EwF~EDWP->P_L7dYm8J%N
zdb<swk(+mFFeXPgwPZf-btcbcF+V_l`6_G@OKQMZrG|4$v;!G~mx*P9i#dd&IA3x>
zdK9Q1iTECLj*$`jaXJIbm3@1!(+F2w0Jo7#Ldb9}2_^dN>m>;5XK+4jWm29z=Bj0?
z$LrU95*<{QGkYa2Z+sIod8&l4SA1VUS6s}QW-M2zy!L_#OMbiJ65*kFM~HIsR(G?;
z+9RQ~#a5CR9x{;+k3wEp)>`>9$&N{^2r8u%P&9qFs<*5*9{uRC#=6_ZqcUf1&_Re~
zV4K#tku##DVYK*)>m`jADeRBy0fzy{uNfVJ6dQHU!B0P5{Fuvz0&Q2g!9vF(z&}oO
zzx0U#nR_zyOu6e^gBb2ke+^34E}4#xe3H=_yxat!3rp`;*?WA{g;o4j?eqK2_{Bfv
ze_x{DN>9-eYq>HBmzr{OiRA@Xa?v^$kN_!*v+a!ZiX?2Mt6qt}7L1RqO1h&PBdA;Z
zMAW%S6p39Bd=lR_ZvvIZ>;mg8Z7LGxBx-uFlGT+QV&?9Mvu1)|vx|TFIqzkBp*Y7-
zU~?M~(x^{)1=09a%4ai93h*ALaQb~>Pb;pwF6{JTw0N^ebe0I4NY9ltkKmJ8?kEay
zspehMGZ)stzF?Ou558`o5ej6~clY9P71kbG(d<9Y6e-RM41u+n4lrCmW_H7xzvg#2
zF4QzE#`#J8Y`q793rw5Ol+*NwT!V%bmAv)*#qti%x}!`@P-sh=x^+aEB3<;wb13<O
zPOo4c*Wm@2)BvUXGb3~$+F=*xvbM##MH+qH1#F02Z+3TdxU+I)@#ClMd1t#}_b~A;
zubYCK$MP%E-E(_-b;5u41vmOm>XwLJ$dt{VfFGEdqwN!pg2*=C)nXgzt=dtQ&1?MG
zmNU(Amh{gR;1n`uc5-(s=bG)DzOpz4Hki6`1}cvBU+c2&I^d^!B>v;pI$&M;_Vv|}
z*-QN~e*+r`QbZJ!wM8{ApT(LjS3I*d)d3Zwtz!)9))JS(^o?<?c^ETShSQ91Z9`#u
zVLa2KLy^z$H3|!hg#?s=<(PT%A*x{58d5v|gA_h?!FJF*Blrlw1!uQiaBy21vqGKG
zx8XyyzM$3f@8&+Jla?>^SIc3_33`MuyTLgyeBqJsm0_!+h=G5We)0GGk2L3i63SRh
zspER71D6U<S>eo6nI*=~)>H?E>upt?(7a}OXtpob2Y<nK&Rouw`-~P*B2HkxZDwEo
zGzO5N{aD~e?CdR?WM|wOQyd_>$8=-%Mt`N&qMD@(oyc;NO#hkBh@^pkq%7A6SNEek
znLS6ZWCuDUQ_cynHr7b)D6e@t>6RhmF`#S?)paWdZx;st!0GIaH0`zAs|^25d0KjB
zcB1}h7w~D+?NXfDSdW7e>Nd|@B|am0rI{iWr(MZU`o^N-*<xjGEH~y-|2B0e57zOg
zD%RKHdw&~&8h0^Gy6he6$4n&?DLcTrpn1;OJ+FW%UfZU0ZJ^4yLBrlrPic>*f|&!=
z7KNI^d$W@*rFZXKZ**Ihing2yb02@Qa%564psmCdTABdxvzsH#2uWB3s^W;6QnvEa
z?{7-Ca_VRVWiDL0KGlbjGLToN@A!6MD)unk-1t?%Ao#Y`ckc+x8^?a<S?~v_;u>LW
zeJ@%cFm6W)NP%2ex2zpsPgpp<Ca5c8QwcPrnEvZEL%hdF2Hut>cYti6TShg6Qd|5z
zZ2V;3tW1I19wm$TnDc?-a*r=A&QO6z`V^`p*at>U2ZNhMWzAslwlQ0+&_FVgB(9&J
z6x0OO<#VB=PN%oHjq4~j?xO%Ldw|BLe_8vBi>hUJ9WiB~8ctJRj76!gvG%npR62yA
z-Nx=qG~MP$E19DU?^J8)6}m}Z2sa7K^XNTXkDi&@JDJ|Bk!19Y)J0iqk+cld@rTHi
zK=cNz8v{H?c(8LyjZ+E^E$6b4>~n<gm$-N+EUD}rAd->*Uv=1a``~ouaxo;jv70kq
z?)XN25JrXAm^2@#JGAb*+hYdUW<+x~5~Vh!l(~0>uA9Cn{s$!CB8M5_#r*T34r8pi
zgT4X)+1Vye9hl|@Os<0GZO^9^Ll`Xxcvo@!B2xjJlPn@AQ*sZkFSkc!YyHsvbyIqC
z`A@f&N$*JC9eBu_BOu$UuCI$J;!;=mMx~qh;Zb{87^&o=C;IMG!3N1B8@Lme7)I9H
z4N7CRC2h28#iGycJg{Ch@KgRhr*qrn*v>@Lsti-npUDxcbjxO9S3xXTrS0+AyyW#$
z3`yIc?Q?IHxf6+_98<7EW58Va#I<du>~x4mvhN^@Vx8FWxG5)erd{{wqu;j~@Nh5S
zpKbGK>GDI15qw>??_~-0H|GK8O|-4T(~h&&f>NzEGa2l21(55ji^QQM`Jcztcjxz1
z8p{B>!TewEd$)?dQ*A0w&8`=XrkBBdYQzEqB9Hn8!befS(^S8Y=<6MX8R_(AR>h*E
zSQBGL=ejeCnzjDzy*}~erSDPb0fCl?3jrU+vt$4MbVSC*tNY=j#91V*Oet_q!Zode
z32S|9QF0{}16`r^u%Gvy`AO?9tmyQlDJ{r4YcgPF)YZM23nHBXap9+uQQK@iITYCT
zrb7D7a++#DY@!9niuG!i>ZJB`-jnNTL~oYPqr_I;^hF`ac-D?*e4}||%KnZgPjh7G
zm+^L7)XKnnFEY@SRK}BZMN!3+BenXf?9%?Vvm+(s!OX`LQ-%mY2>djUcoHmiv3nip
z%nT}gcJ7soc?BW*dwI(jDs#wssFm4!@XiKDeT<2qK6<L^f_$;<pD|JKr&2SbOj>tl
z=R4^CE<77j5QRNh1@{KuUd%7obwHO}Fnu>hOwCE=3}3Y6hcT0x90)$ikomrWN{=*F
z&M%)r@fBD6(G2+T54z4g3N%(Hcip9IGJduUXwv2=3(d%e;i7KxLX8qujTZm#(vTNA
z{Vrf*qkg=TcHXl*qY&w0DYPf3ZW@qZ|2vT0Q=q4%(<P{5rTQqCaNsaKUUSh^{D7E|
zA7hH8#?2Sv(||l$Bc6@5{&cuQpuOS&<%Y34C7Tc!SQgI<&wcs`L0QczMv+sY%boVU
zHG)}&`9l6?Q&WJFgXa>{dE~r^eD#B)V(@Ave+-cRo*Qg4wKj0dSU%`7JxMxqZ*Ut+
zmSrTwr7BVb=)TK%cDSiW4RATWvx6Nj&2qN6?|3$MaR@}KD9D@~Hiy+5AyW9M+RYag
z*$lhiO9c3?bUjCu>gbK#q(JaYblc3|!_IkS5Q|ptx8`WkbK&es4Nd~x5>;)jndSo5
z(rtkBZpmFOc1f~R3kn}dC4007d>Qya$wK6&YMO)Ari(YVK>1h9Bay-z{U;gC{Zpr<
zl-U{KpSpQhxJ!N?JHH7S6iXV`N7kQAUNHvOdBdlcr$$e(6C3oYpIS|~TLneDMvJ1?
z|DH1NbV3@;sHEJ-0l9Gx1~efYlfUXg7Q}JDMdrN2```X}S=+=IoYHpt`t62~kDK}z
zXOVH=d$++FkYV?2>emmi(|WI}WhK`KRKfn7f0<Yr@#y0Df`Ge<U$|DX$vRSpEZuKw
zO#lh4pBZ~ll!%sy$k236+K~sJxkS{elkIKqocD!o7085Qo=3b8D23Q2gO1RI5yy^-
zxxOKZV~!Wqtm6C@E3(XOLI%vA*<Gyb-BfUooppTNjPiMNdrTm|NTsT`B`yi78)X#u
z@$GZ;r%Xi|Cu7>wvV54iG|lHt4$ftx<%<1JeaBdS8R|ffJU+W&V(O>r=k6T2@wfak
z7X^7Eq+dv!ee9;>D+^eFq77<ivc;Ahk$fjHPYb(En}3xz<#4(*bzAbchEKi`8W(;!
z;57Sr$GL~z`jE0oJplxta;1EKlLEPDz*uD*d$SHPbIPMF^=#U|Gyvf|I#%rpBRzCr
zTXU$33f~P*x?lV*|Bpk(`r-*fSOzsxp#GrE>Ev444lvv^-QyJBpm&axPg}z3KpVW=
z2QI@+!Rp$e;#ufgm&CnAA!*ekzoU?j<15Ev;My-=I%e^w9-@)*H)f7`lb9oZNT)%3
zxEZ(Ku90xUE8kUOzGIksw2{1Kbqub!(gbh<OqNRta}z#$Lm56{UkScgceI_|*gX#4
zFg5VYS>*}xynfDQVd!osW$?G@WMZ4gwej7U+!F}wfLpHsAdN~Dp$zUko9+&5w1D1u
z086}(UB?O)Octm+Ii7ClyUKD4d=^IA8+QxKy6+kpFo)u9&`q{Omw7)>+6*+Ny&&ST
zOTi|heG{l^5B%w7Ub)w(&*W|;Oco|{XCrpE{hX^<<im)gI&2!C(Ar*QIuLQvlw0gd
z4GJw9Zt>RLCglx_u!lN&lXMt66kIm)pZZTR(HU$kR@Ihqu$!!cx0GTss?^tj){~K(
z6OX~Bm-Wn7G`5u<ri0u)zd~Vq8^CcPWWHg{#8L{UX)5YKb#4v+k;sWEwrbjp;nRZz
z(5-;4P&B1St<>Y;NeDKzd6M<TKcwkDISbkt>Pi7p85Sv^n6p>c0trgR)VtwK$8G;e
zB?j6@Isc>=v0mr2_doseGYVmbX&#q50Z&{Q{6Nf0Mq_Y8UqfOKemznlyQvQU^jP(r
zkNoGPEbha&LHT<?m;vdWs1|6r30}LH&Bd)rNi`(Xd|5{2A7q;NVq#<8hz_O!l6^pj
zUMe8hC!^G+>u_xP*w4!Qh4&oa{ZE|C-Gzw%RJ^abi89*)O@V~p3IX|$96pS!yH(pS
zk6Gcby?W=}<xc~zJVeURk54`Az}FBbi|v*anp7@Hor=iOZuCkh;LBo-fBifM&HqV<
zo?^(e+4+-hVUUZ7uO|d1MM!jh&f`Q#ISG$TUAKr%`}Hq7aSVQfXlc_$lNP4_rqKnZ
z8bLUmecJfecv%JhDEhBGJcIPu)mcKYPX*+vAh2?L$`2sVn-$>OC-fK#clE~qf9&8t
zKuL%GCZIjwKYju?CWwTQxAkHbK3I1;Z?FE_Ga8B!g&E@-b&$}IG$YW}NyyHj8+2U$
zRLPxK9q`+i3maf_d#TPBg?}C*GM0W&GE*3HHIWMm>@1}nA8LWRlHrp-mX_e$Z?yFb
zW0U6o+f<Li+C{6B59Y1o`4N+cI)A#=7-dWDVfQ3}DyM#Yh>2vEh>H4~<ox;D;1Gl#
z%ptM;miD=6Z2-ik(dn6q&1<v&h{3Fz=;i;i*e--PtcywUh{hR|cbY!MZGNJfGphdO
zn8kOeaeQ}!UO287^zTDlaYR1-K^#?QsCiN%1Rhij1DSMHkQfAQH}(=R6GQXMd;flg
z=SAeDu&lP~K}q-U5N?oBlJeW5V>(>nN*WH&Yq4~#i;DIf`TvjKt6z?<2BHr&L4t|3
z0CCi2Q;TZoQVARM?3_IJfA_x074N`sR0$!D)P~4F1SP*Y3bbaAC~mMS0Gn)LW3@lG
zj~V_QOPBQ^xWeMj0!o`^P0)DFl{o_qkf4~FOh5KEfpp>D>xboJk{U_0h0Zr5EI|=r
zOyJTzVd81*M(dYhu#5*k{n>7?|M$AyP!B2OLpZcZSBcvwUU;@9!I8Z;X=a(v=J#LA
zadZHWM2l1oJP$M`cvLEa>gF)S+4)%gO?ml$YX1LmVKeCN$yZf+hFqr2w;;z7!7dq9
zp`>sU<>G&zF9JqJarIdB&jUXB!A1e{)45&GGUWBB>2ao<<I7ONa~+lcadkn-*d0F6
zdrwOY@O85kuuMZ*5JvNcjqHzqM*_zn65^tA<3Njg2++$snX0=oSJLs!N=$%K+ZVv1
z&3o1Vy_P}2s^QBAMe?@3n+Z$qcsFlJ520Jj;@YX{L=A+=<-bfq9K9mKN_e`*OW{ZM
z>4QA&D9sy!Z(l#Vq&*;6-uUZRF%26Vd)z<$p9p1|9DmN`6Vp}+ds>#$Pbm8C&%I`8
zYkZCMhv@(MXPO&&gK|7~H4o$J)!0GCCzZjJg3^jL+cjIL&1DXi1@V6)1`KxR5F=c0
z>SBx|eA~K^lR&QKd>hHRmfiC)QCR&t7`kyYr*Ff{2|t`Q#`a(p)2ukriG@|`q9XW4
zGuDa@aZYXt*clAZY2=u$1kl3yZ5O6ex@bz4fM-*TcgAg|saqy2)>C(fqbhWFfv1+5
z*&qB$mPDsc4MRQTL`P6?%h#satcHRLN2uRnNzz_Vcu%9FYR*v|1gx37#Ur*+ctBM6
z5h?b%IjKzuim%D(li10Se`BB`6nve2kmr$tj!vybh+}$pAjeR>M_2+zca5vKQfmhv
z1Kqb>O9-`&M|F-CJ+vP!O2s58i6khARBDM;CMkKu+lE+H<1$X{P{Fv#TNtIG_$Q+a
zwHT#@KJ5d(aP@`L(?u7*uu@Fj<W*G6?()cP>$lzI`t`)#pU#Owz-;z!!1s&f7ZtKX
zX0nl1=f(ogZdZlWxe=`lM(>h0vlpVyjb9?xDHa%W0S<bQx)IUZ8y9l?L0vNUHoqUm
zvTX!wMw5e2$sNB$`6<$3Jxr9t-EyDCLuW3H6sC8MahoTsC-yy}?X8T5g_l7W4|b38
zc8_emSxl9~EMH?ND7G^ePPL23j;TxRH_;_|UTXkhdbhPE%ovN?l1;j$x9m<}xt-A0
zxo#L5C!K#hGRl)7z@@CmHTHHWegTkaj8$UE8s+^g_Dv=b?rr_0``9XFT>Z^I4g#%4
zAt?0?x|ESSDkRoTMId!28#hqk=pj!QmQW+L946hdhfXWQey+xb2Bp=yr(+HMC<u|X
zdZzbtEDbX@>UAN63lt5PWXNXhHwPta{5?z6<jh6k_H*H*X@r_S0)RdmK6UFXd5&J~
ze%4|1#^MFaBJP`s1_uQqFCkTyqmvM2gki#+E+?P^O_SN=d2NrswFhD{{CSzeoD(0o
zQmoMoNZS70XZH+6{;(QKSxCzTxLuA!8Yqcu!|o7J{lG_*y%tNdVwIdLE+b><ir+Er
z;%Pa?bfrXY%Z{|@l8&kunSZ`nY3AB~u-e{6`4zBUB?LkD4}(3ll8{X%etj<%Cr1v-
zN}(n9ixcx<NnBv*VQ!qzJLf2k7>za+oestpU7r0W`%S9Mw)uUW-8m$fwy@F9Uf$}H
zi79*J-ct1xRJRLP8U6&R^qPOu!sF-XqZ1W}j-%{KKhfjEVZ1}rja`EKte-6}F%l#k
zaGUfkQ+q9?Phi|oqr3AB(dGIb1^i5Qt1x5B1e`5yW3@D;y`EypirzLR%YeKcejein
zvmorp^6RF=?5TIF=9oWK2~z+nq6Mj6JBU7U3$c>PjzmaMZfHqj9-B{z^d03-6LQ`W
z*xxC!Crs?!^k%7%+LWWe&#q{EB?saXa$)Q6&e19b()K6bI1&*()S}f^QKr4Gm8^7W
z#QwW5$)l$J{y>pN`*T}=ufsuXQuwrqooGC|poe<kwiuAr3Nj*TzpLWA`P)iAKyGHP
z(FQvC$i~zH=&>tnMMN24vo#Pb{<5R;pTkSBBI|}>gj<$J*>Ce<1}fD-NZ&Ke4JFge
zvr95Z5J%y9Q{{ti6$kaEXn4gQTYTYjXDXst3$rRqU}t77#4WI<u1N#|J>f{H#E_~o
zn4D5vD9c~z0>MmqHCVTyfOx?xym2+{q9*A6kDS~=S;cYcRR(d08&A#&iKNcOl{Vcv
zz_1y@qDg)1_Qhy@F9F(>v;cb=R$6}BCefL^m_~i`if4r?Ler*LHOlNp4%5X^?ng!#
zL=u@n?@uP$F!ti`Ztu;nubOn+F7&)Q55{wF$d6XQ*=gZAFY;`tV0q{w><-}aXW=Ab
zy}|ml{VEtbX#z_u45Icj5Q}#WuTuO*d(&kNlVsCqMr0rukb@;#P6AX&j;2_w_};TR
zOEQDAwghfkkFB6@;%6BTY>(<j7F^GJgbm%pP|L3aToihKipHR#I*`2ZtB8*+iu0{G
z#2`AQWYIhnyKmU~g6n?Pjc$Z-DP@jRlyk%K`!I-3<uyH9{a1+j%I;Xmt7MP0qNAXC
zue#NpnQpxM=SqGD^}p*CbRV?Z?@Ms8J>thO_Idh<hqegF{3lFh{}=IYKpAmbF{Cx)
zt=RumVzjs@E)<fOEa;dG&nUS#J&pV@9=<=KkPgDkvRtn~N#n)3lGwL}$Ta68#P{b2
zmpfGNFa0eOz|cuho>jKPTcWY>hmaEmwIAb^QWOZo9#W>oT9Jw-=iQ`=h4zP+J+C1z
zIPu?V1rzwY5!?p!gMkZ1xABdmzvWH_Mre^8S4Vi!AN?<n`*C#3mkW0X-0xesoKAYD
z=S#QW--$`K0$nY@V=Y91IJ#)3g*IHoE2Wd`QGh0tb2u@V_s*WNy*<nJ?rg2KNPBb9
zQR41C+3(Pkk)mUQq2{XA2yuq2=(a~5`ez~?aVrshavUrvUTz6o=!;~;#Aqg9>%TMg
zefyk$R8_*VIM?bEpvA7*60lm*oR&JBWGZ<DmFwLAV?DO~*9Q4}!#TUxLp5UEBKP^h
z_V+6hLe-f$ZtDu_*_$4H2PIqxH@UARODcZd$v-+)t#n!5`)ODD<Zl1t>WpkN>{rrT
z(?#YEAuH$CpZt!2PX!?UKZhktlk%0H>l7)!20>_U<Y@1%H7OBuy<0U_JWWa|Cw;x~
zE*w-V2;&ADiRUOzOy7DHA>&+xBQ2pMC;PB`o_2V$fwg5m8HQt5crQ{9$qg8j4!#Gy
zoF%I9!G8qZ>q@#YrwAFTJlrqUJ`6E=w%8X_%{7<9Ql91(us>GJN-`|{QoLf`Ph&}h
zDM85g&#b?$7?Aw-?}OnOyax$V=nN#XNyUdmp7oj%v4RgO^n$zR#Vtt^ONtJNl!S_~
zLj3O#UANayAFCuR4*oKNm$#GFQ5$Jcn!`aF(ED(N#{$-4ME9t*{BE-HXEDyAb2nDe
zex%jJ8&o3F(ahWh_~tkHLzqiKB#tGZuDu)Jxh7qbn?Cf&6Fx$6(^a3l^O7iqm><kA
z(t%jTpP0#Yxsm0Z65)~E9b`$HuCvH`Q{(qATb6TiIc_;eQh7a?KD7f?|6{*5jt68{
z0^59IxL^D@L9*&pZ3j%w;i(TfU>0t!`!nX6pnDF^Aqr`?1Jbw<YhIpqO(;o<&l?rG
zYZ89&>bPIIRe=(J;T#CE#TAcbW#x+j9i0stAeJmaxoa0&o^%v3bQ<`t>s%tU^>ao}
z%4RFqb}zNu<I6UEg&6JsEcazSmZ+C<jsU4faxEen2)WFYdtT>dvCk>6_FCP8cW#7g
z(_p25QC4tz2J{{)vA-cB_UCQk$@QjV7U<=MKqSel(Kf$V;Wb>vO8yU<*2-v3`!CPc
zFEJTggKGDb!%A`U9*Mp1()&Yib6Sqoqa^+=pc|UdH|DLwGd)7>&ENJOW;Y7W(b`5&
zUf9+{dRc@zRi?UF%skuSoO6cMdf8*6j8N~QuA)?4*u4OaSfZrBbrLQ2ggmOar49Nr
zm<vx7;hvhFx~9$WXtKX+HKa6s@$f;Dof`Ja&JXe`r*6h(NHLTs<E*7}foIKr)Bh~f
zR!U9e{F9YR>PYx2#V^P`sv9md>H%BuQRH;|ct5^f?s9)4!{W#Q;nAG4%lY@o>IjPR
z)s(q^Wgc6(r;AdSk;b23V>=TnMz!CMcfV2}E!DF2!B@HuNN7K-|GNLN?kfY{(hz-D
z15{j!kgrVTzOB%iVeThx^_&=iyg7a3Lo!@u_lCJo!)6^_Xl^a;30HH$gxvI!KnEq^
zorgsyEj55~Hkc-Wq=DnFG>nYB(y-9oyLEEKgKC8~E!=eZ<^GHPx2t*0s&;3_ZEYXp
zdhZX%^*%V>diel|Q{0Vl#1XJ^F<s<im*5f&>s>O`O<lDov5mo}p{0dC{j4_j#!$p=
zCc6c{GO#)Y5#Ea(x)!3AGSEs$<2Vhy<DdpY9?}+T?}QX9e#0iJREN(dC4l(TKF~7v
zO_81mm1s#}CanrXY5sCh#7&AWs<!3S`Y?I*r?Z=kZ*PB>5Xbusyxe~hrWzc>qONdL
zTxUG?{()5MYKXdBa3U1gt=XU7Jur{!imqjQo959yMv<l4&rr&qB0smr`=i1$|CiND
z?bT!XF{J^9#ClaGpoBOU&jr)>f#eWcnLA%ttuzL)L&#;L5Ymsv7N_zRzpN#MDH*p{
zmvMuK6A)i2HM1k^_P*mO+5&Dz-7!V}Rdm?|AS>Yg+iT+ddo%+tWz>UWdwWOY9$+|?
z!y}-l>WkR)<zgABfwwga@k-fy@naKKB9$?{vOLR<!*Soo^Vri&)^491z<rqvWQ~^1
zhdQ?+s`tnQ_g>-VX$^<7mbQRCEwF10sNfQec*B;C&hJi&HO*s(CpvMk7Z*Po_ka@w
zQ3;En?9v}WQa)S!J>X$kBOh3;7A&k9;AgZAd=cS8go^(ajs0o$3UG<MM_Xt6Wk*3&
z1EJ>Zw_V<-t9B?-OlHWd4-l*e*_|#fh|I|*3F>tt^gT50!ulE0!qF1mCI#WDOQ)Il
ziWG9075i2`YC*3tWv^z9$=NrV9bpVeJ=fNE?ixPWsAjuaS@Sb<{xcC|V<BeA6+U6F
z0eo$DxXbXzM#^+cehMO$k4Ts<))I%CWZMuLrGsoz{1+DU{?2n7!lFUDe${ork-;eN
z;p4B$<VPnw17fuKaS0r)K})kVFEq(pO8mmiXd$*gByrOo`&SqvPu_Z*>C;}(VH9+*
z+M9O6MR{2ZNlA&2IL<PO7CI3}g{pNcQE`eOe|S6&1f5ieB`&f1b&qa0+4;P3&R^DS
zCi!dxVR>ssCf>GtqKY~-{*f1Ehr9Y$(11@Vx_~!H24@)x_X=7C){l+??`euEn)UT-
zO|)4)Bd}|7buGta*=mso-YX277u$`gKe*yCoo@(;OuZs7mocw5e!VKuhQ1tTlmy6#
zkT8f$fnzIA7n-)S<%aYcjG&i^H&#^=f*xAF#%WFY2MbqAz_g?yN?m2|%vdMxxH-SK
zU&2(H$X{xK{x4E_S|DHis2o$bk2UVY$*Xroqbwax&CQiLjKR*0NM}LW8$Oxps=@EJ
zzP(##y}kojr}dtkUS)Wqs8<8<Q{*Ir{}kVn8SkmN+!@1M8%o=vAA61dM(H@^XL-r~
zfXSHMp`^~OX!)52$e1F>UuitWxefcI_1sK8EaW0p&)W1;)g{)GD>bw4U?Bl}z0IxP
z&&-*Rvv=;8=e18%3v$de<5$Lh9^@I2Ol7P-QS|sUW~j1Dt#6*3k@ZQ4L@x%sr#%oV
ziV@|Ud(z)S{PqO&4)pU~Y#GhBOMxcoOH##}AkzmBmd{dh`{t(Elgn0}%_J6A{=y3M
z1Swm_u<_^#Fl1}Dv{sR4d>uFxK2REXj&Np>y;~u6!>3V@nqfn*-tRx(_7JTPPnoxQ
z3kCSWdX6t=QB_Aj;l9aYo|!~{4MsK*`Q%!Hkl|V)KDKGHA0(sz9v*#BN;@|d=uhT|
zPiz<XUlk1*OUsb)yCg2uHeXRZtgO5pLmIHBG{8Z45<*ezj1coETgMym)8CbQjSW?j
z!N|8aqp#N5G#){<jUo3XU_t{f({Bn|b46}re0GANmx*<%#}ksKG2XNyEpD{eh#H1o
z0Bod7EPr}BYrO~oas<|2l>htL-~jrUnoVZqMZ~jrtuOz?KGCmyrp60i2sWnWxRIyI
zzH{Q%@5ww841^jEqvd}#H2%1lQ!>8)KG`GM?3l9$^#0eOR}8sDJi6U9G-Ql7!^aqs
zBQ`?p3^><E&{g7G5>_78osP_s2$R2(`Md8ruA6hp?qI!iB~7~B=eaM=G=?B7&48^s
zDr*Bdr+_B-Jp;|E@Lwknd$qzk4<ETQ99<$7dHfWJdSb6--(yO5j#zrk-G@*cehe7V
z-T{tnO4Ee``m#VVhC-9|hT7OsUYt2gcb3avn*X#Jdi_&xMV4;95}(Af6wSm2HZ+l<
z)S<nrw@~;drfU?>In(*beam9~3mZE_7U9vKlPryeofZDc>q~d8z~;_KKR^C*XKY~i
z#K*GKy6;zsxcSx-Ig;X?V#*gpAt8_KH;H{#G-_h~EGh8sNo?2@CDr@s#e^%2sH2y?
zAGcZN5t)PmnPZP2{4EVgw2s`?&WrlO)h4WOsSsr9@Pdyt@c@m$+CMG1slnDCbw9JX
zyJsy2CxMF6A=1M-2SKZLuLqK1gGCyI{})ftLeM)JW1+;ZX{1)~S$3LWm78Vir!m{%
zUazJu#^Cyf4}Yr1?=|P94DleN#xwAgbZ|w$cmk+o$?^xC%|`dtyduLH4&iHmfdM1(
zQ_abWy8TjsF*WeMU<$yQK#Mb}?iIpsXvCUZEVYSUCa#hXd2+R9vz9Meg!q*b^mHKV
zgkjmU(rBTH>Voi6jEKeBlGtCeGMW#1!@;UFuIv7wx}9`zsnp&w^Fz6wbvHc7-ihss
zlgBDs_UH`X7WH-F?IL$>JxL;xH(hnfccpIlX`BLKiNE(k-RfX$EupV~tmtHV!$c;v
z{V$5n%FoePB%gI3J}7acb;+nRbW9s`KR0*Xae|)XhHV_z?W`Zvf@?oM9EQpgW8L!_
zcr(bdp5#^G*qR|ePP%EX0#sV9Y%D9OBPBD!eJVVjvC!8KI^+2()otF`_ARZ4e(jm&
zJO(O={|ZsfFW(E4|B14U#t|(6o0BJ{`FcV{<R#WYs!2V~HX<M?9^+qwq9fiP6&nX0
z2ob8+`x9TDo1uE20$X^db#QZ*fmrZ;aZdv2HA7Sj*?*|#;|-5oC+U};cDx~mDAJ!c
z-T+sW&p0Pj(R3A^42>@U9ds{Eo^WAO6L(sLop{X@FZ^|EO5nI6%wftL>Z?!wyKizm
zcL;S&Iwg=n^?cKnn+`uN58~Ov?nNUE$ypxkY+7djKHAzDv#2M^SVVLHIfXYANO$iF
z^zm&`{doxglj&tM5U!D9PDV?fPK2>J;@qAP#q+mm#L``ZJ&mwSkAgR6)XXSW5Ov*Y
zl^m~9?B&(>sMQtUF>Oe3CfL=OraRe~tjNrfa)m8UI`98VX~@H?+YFiZL+XWLD<zP}
z=A!R^g?ARq7}KMdDsGBn9d$z#|7;LBmLp8^*Q=Gfu~=FzcJGlWgpe^PhFGv_OQHO3
z36GDPv0MG!Qy8QK#|@>Sk|(gOS$WG1)^nJIjd&<R5Gl*k9k=XPP5(q-JdlF8tHCV@
zhHHPv?Y^{#>@BdjPh*P<8(C5J|6%JZ<D%NyxAzPnp@bkJ-JpP=gh-Eqq;yH6ba%%L
zqM}D>0cli_ZW)@vA|$0l7^HjXo|$)Zo+HQSdH-Md@d0M<S?gYRT-SBqtLDQIi_{yc
z8;9fV)#jt?y}@k1!@^V?G}^{@P{|gjhQvutC(hw>g$T5;lpK98cdb64XXEx$?yw^e
zY9yi`j^rj|R`-ivx79mCv+l$(66Y4oKC`%I_7}#@bh_mx$?p@J^`2<weIJ3%8a(zj
zPCP)d&fyU6rw>$uuCt`SjUK+bc>MWqDoT!vjeP5V-*q`PqIP1_+oV~1Ox6noOT<%#
zY*sdf2BF-)Go7%Pv>VUwA6JPskFN|>;?dlIvk8=C|G6@Jt?x&_Tg?NL$x|j^M9mUj
zaHuIP)ij<^2n=jJQ&a(zIi?<jyu*L2dtyF3(h<LXcC1Q-ViE>xS7?@mMuwU?4E$Y3
zPcWUJu=p!GM~HmxMfzVQc;Loe&=DAfVLc#<M&~v@a6wX>D`y4A&ch<r*2vgGD3>X%
zQ(Bx-y1y7<=!ehrmEL*H+_55o%4Mn7ND(w#fW}%d*jE>&ELX&uap)Z}$t24J8o<Ft
zh<d0&(ki}em81-fbjdi+3k-}zq2@~ma}GkPgeLt+D9`=gB}6k3$zp3KLsoR>13nv!
zx@$caolFZ9P;+oJwsQ(w)vf1?mo@?hlaIk=`1leQ;)%%Ifwt+JKnp^Fk~BiC8L7Pj
zltHR}XrXIexk){+eO759_(}aKGCiV2fg*cX+`>FLfU0JMec*W!8@=;>vSu)0UEB%`
zGsD!q72fHLy1}f)YByPRo#xCWAXzQGv-<ho%6o++NjTyZjX~H3SQ-4|SYU-j(j4Y+
zm`|hK9$pW$fG)s>9%g+Mip?`ZIf?NIot_s-Se9)2xK5I@pf;pJfY^PB3${IkxLkbe
zTZ28iFr+~eks5slQKuQgSY!8y$H(9dKqw0G&XLf5g(ybiM*v395LA1uvuV+zSK{jO
z=X1G9d-D>ZHG#AUka=q&KBmTI=+jcIyGPS={(iq+9%u%qu%f^0VH6i|6_1~!Ao*@J
z;GA$t8TF`hd}53+HU9LA_)?FEPmF0MLSEO)i!>*iL6&Jcofvc?alRaLVB-Ftasgy2
z{1vk!w}K^KuHn0#3G<HFmGz&9LOc7(HP8DtO7%RaItAPIdUl!$*ayWM*}q}h!t{pG
z7pD-$=VI(#?fr{;&^9KpM*a!4meU>l`*TOsVYW4`{!!^_&?!8~{PV)LU4hJ?s9>wS
z30Hvk6v!Kc!BX>922Sx!!O_zB-og^p1(-gB>9vB=geXcVYIZk^EQ>sYUE_BZ=E^oj
zAFD#tJo*^ED>Gj4d?($EvkyOeE*dHiE;BD(-pjRNB{2eN0aC!w?OYx;;5bY`kNGin
zy92Hv`?mgbyBllL8Rs@)(d^|vMw4MR`GL6Eh#wr6L>22Xz$q*<hVy%@c}n;TYFOg=
zCk+R=jpDd&%MM)S-YS{AP-bJ&T&J*&v=TDgj(^!dGjX<zj3kSk{VcIY>pUqyMmf2q
z8d3A2L>!@V>c1}-Q?*eyrhtmDHV8hBHJsptxVxta_$dps=0{eYIH5k&e{XkV|Kk-6
zo2~rELXO&AxhVsn9xN*k&}=I7iR$!kZ}JPPJmn}|IJ4@ehjR~#B{x%0CVGHq8!{q7
z7b}(zeE?sb;dgUoyw`oUC!hdeVewVw5~uKxxLa7O0RlZvrj;zcYmopv_xds3QwDDI
zH$vZUhd;HFmZc2!fxM{^=0pfn22U3dkEK}6T*mGksTfew)#qF|!%^&|Ajw!vDQhfJ
zp>Cq`!jy9epa-3L(K&*oS-1}_4gyQ)$P-~Y7BhX^K=^exg6oEF1R+AzJ1>J+hiKym
z&Uza-Uh+I651QMF>Y~ydVtD-AR4VIfkS>_eJkF;2P`rZ*a3OQ|uXwbrAS)Qr6kub(
z;<8Rr_=?WSE#}m9mJUEKPF^3<Hms;}PNAl~*!IouodLa%^vyZ45bMAOJ%9;ZbX!)y
zh<bBYDn%gnV4tXM>oVy3v*ZaKEku&7>0wLl$?Nfey>!*jx9p=QX!&;8XB1%z@@GkT
z1YHdBhwv8}4L%^soB1A5^FAM&qAC=|4BF!K#(wPi(<84zx|+EZq7Oo*#Jsi#PUON;
z>l7Wpz!jGcK<8v{;KLE_uL#KR<N!8BOeiTQdpxWIDMPI+iW@=Qk93HuxIp)KhZ=Yv
z;C~uP>@MadkIwWRaiIo|^iWpBKeI1pf&QVK#aRRT)gg}1Bk}m#zmWABUoZFcZl+4s
zaex;QAO#6FBw`~4u+Mk8SiXqBCrZShP@aOEf_JkxzAYMMuF@6Tei<yPsn-MY9Ersy
z$E>%H#x9|Q1Ruv#{~L4or*86n(PT}Q(0mMcAXJ7<)nC8pLJQEJ=1Mh#J{Va}@G}i*
zPF*eK{cUU{7X(??p#fZ1p{U|){*-T9d}|P6Wb~`$53b6N%oM9IMth`PisA~xJnYdH
zASeSF4i4)9=fjkYe8$vJ8BKD~rA!GxQxux2bVD$SSqCq_lp6mmphTz=GQqnHb~n~>
zhW6(c1$qRAf9FPP0$FhD^%?4ep`fVPtYNe2ljF%F{5&B-mSZh*Etvn{_GxDLj%bhf
z_=3Iirpa6s2v$^ZTbdQ@u7sDHQ<{r%@t#RwO?B8Tb>G-ok0DDmGizxxQgMy7)YETv
zfGkLsn(W2}GRW}d+n4Nwzf&V<mGp=ZjABqdS^#MSlp0q(^Dk8yyJ2QG+|>W-to^Zu
zDy(URKw7D>sm;sVI6l|-czs<TC}4l2aO4^dVswH};`dLTDDyRU%fKmepZ588@B1fi
zK-j<v{g6$aYJoYl%X+!(xY_PZra*Dc{Tl|o{vo>Upjx!?Jtbm{^ldHJuavI%;i=>-
z`ON89m@w9hdFsMuW~r-&Q&FUVK2er0!APd#gy+@C4HK4sA&@W;qHL22S<gLA;T1DG
zr_hCNFjhmdm_R?&CkXCzc*JSzxcjXzH{IZpBF$S1wNB6}gaAQas-uj@jgn!tF$FVT
zyLz~((C=_%=?75(P813NWIz-T#GMapb!EM|!c+fc`xLZ-F`gf2yyzbJx|y!d3EDhF
z3=<=`zbsPy>znNAY+p+c-5DNFN43asGq)N9vZOLNHC@6NO2B1<!dgnA?^_hHZngk)
zHB}eDWA*cXmWMISFCTF4U;&Vd2yicSh+>=%vu}-l))5pB!qE%<^J*Uz**u?_%kg0~
zGh&w_q*Lps>KA^*0ngjo`sHF-Mi?Z`!@-DlI}R4oP;Ha~B#!t(Vk{pJeOvbhk>Zew
zoD%jyj8K%fTg|Bt0S^@DK_3$Cytmume%?897usw9(aL7c@U8svlS%Lt(6P^f$v?`J
zTGkcFWbvFKM7Yo+L<yXg_kt=DoEt9ub_nhwVZ0*sK?>HkD#R!69hn<U3?LsxA+MB$
zhN8P0y1-KU87NQJ5X?%MWKNquM(hA1-pWIt>Ya$dlwqVLbJ@_JZFE7A7gcO3d$tF}
zVdXESbB?hj5__Y_&t4ri!1Zz91HAhd!q>m$HaD1n>RV#D3YEZ&INql{RBG@-O??8c
z`c*ZENrwD|raPs(MMu}3;eY3~5W;S%jVsAZLZk@KYV&h!GE_UU4pLIlZC6?dPGipP
zc$m$JOVYrHH@SnkDba;%8$Ut)ddox}lHmSLOsSeM3Uo<G0`CvR$xi=F(F1ELf6w)~
zK4Qx#P?LAF+U(qo?*>@+2XZG}ykjcq(Wi*Pm_pY29B#rfzVndR?x@~pqm&wCt==IC
zUR$@BUhgk-N(H>A&vs*wQ2Lo2&X_e8S2b<`dF5z+uGi*Zb-{FPQW)%Qb$1CPXdeo#
zAew6BwT%I^R6v^Z8ZoLW!hCIJZp<&^#~CU@$G6cs9JHd8UAib4hz#0;Xhi~`GZ&8Y
ziMA1T@_yTM5hD+lgtWcZSd?fZBiIFBPtidEtefJ{!oF3s?{?&`mZmSm#a)20U60u>
zzm3I#a6L01Uk_+lq>l~ly`Boe2|;cQi#$SB_x}_Z1bN_}#xRq-6@$!akw)23y#I{e
zzBwKp2WUw_26&J4hj|WV-ZF62?Gk*R`W>LcSgCvEVsSJ*Z9AIMtqp6>PS1#CB9BUp
zPdbM=>sQ^s_a?l#{bz}J9Pq$1I1s4B>)_m+2(L=9D-*%2%qlP)==+uC>lgN8ozC*t
zF^j2(4(G1K;!?mYLq#4YejlpL+5G$?K}M{D)fj80=ILK{TTCrp$iz{vh6V;pf{J}K
zg_b^KRdchWBx7uQY};^-`FBu8n2^{@Mz?*mSmx|Q`bUL!kkbJ4DGTwKJTBPh=CJts
zns3+bVnD|~0PS1D$vOZvhhRGx$`InA!@vQ0+UayR9}&r2^7-lC-y2d-_UaW%gEcvE
z<#3?hH5G_aL`aymHmL2}*UQ?cfmMs30W9_6J2&MukqW`lhJNHaR*zKLqRTjbl~5~b
zdcQqmX;RKgs`+I|-x>H>^ASPV%n8yH>z*CgAxd3|vH(3T%X?uK_odX%De$x}5&3@G
zMHM|v!C2UI)Q1p*0$?GCr*j>c-cM>}+J~$*duKAH;cP{KGm~_Ma@wiV!j9@Q9Mxch
z%yK%aGZS-KGm&lf%hG(?7IpL@JH8_GU%{1XzDM?V8UbQjMV;QPx35NG-W=l5f+UXo
zu+5R780TcYq~6wjj{E?r-^YAv3|etvN_*)!s-L-<a8)ueYRJaAC8+NCa8Ui8nXNat
zqMcA)8fZx@n_r3m<aXy}1R4$9EYnj^eq@~_s@$0uxlispf81Gh7F&GjYPdWVDMv4|
zbs#S^PZR*wojMThNeSV#Vaaq`KPTB!zX!&&qx?iCZpaO@M1YAMvVjGin~Fk(g^O7n
zI_{a?c8}oKq`#xu-xlD?-Rt0Q{AA&I=ft`pQ4CmWc3K_9CacsbCqill<$EkIx^skq
zbwei?&~1+xdE;n63lMYP*}7--mrohZgn=OKZ(q5{7S?LMk`o;q;yc`Cq(j6OQNIJx
zn)#?Nn_b!~BavG5o_XhBv;6Pzd_Mh=6Cmu{?sF|s9&DvYL1DI7u+2i2XYisJar_Cq
zy%OZx{;|+rvas$R9_dy3WP=$A9q1!J(6gpMK48{_CAX6eZfu^qn5+pRjSog8F~a-s
z4$1vMU&uiyC<|85Q$ZYAqrVV?n8VL?@jo=zX*z84kxtS$QQpBJ;^v7!i1J{#0KtO~
zV4BmYJ1HdyjxRMep0W-uRb$W%=2eDTV%U+86L>uv69|`#F+YU=g?TTCWxH{jz5E?)
zvaS<JMhKz|<!o(piUlUq3jpUXK%_wEMQ5;{xW}Vhr0AUKsU3l6KRD-&Q8xsym+4p{
z{j*_>xz*uZ0W{0u18OK{T59@HalqLO9*~o-HUJq;1l~U?WpI}MS^}^hM`&LXXdkym
zMYk9#*O+?z(_Il12Xu3=MXsL{&pvXIluRdV9;Id*V+8$!@+;58<3IEh6zo~7GL4yp
zpF1W>>8G6Yp~}aKr?v1zSy4BIhe*vS_5u!@vMR8!l>ZCO+iJlH*^nnigm3`|A!itI
zw*?IPODUTRXHsoUmQ?^K7Ulp;PwV8e>3b|9{Z7-RJ(}C1UDmI;fsPd016>@vh5Gq3
zy_Z9xUkV04Ja_=LL@C9H{A1LJ4l?PJ7O|s?OZ4Dr$urT1zDj-{ppcDO5tW`Hofx^K
znbe570LJ4qjjV^Z(JPMeU0&972%f>6C|Lk6avS8fTJ+TVan>EI>FX_?pZ>8K1cH;q
zn_j{xYX>;^?6u=8zCv_k<%yo$rDerjBc@-n?&RPfBB&2+jjKCyh?^CR7ABiD06Q+2
z4pw6z7ZmD!NQv0|_)lF9TB7Om=8=0DW*owgq&bD1>g#l=vjT{p5U^aN@7aBx7O?cR
zck^^WLsl`-M^I&SoV$m$G5afkF%r;B#U`!cxenwWWG?SNb$mTCw4Qc0a>||c^u)|v
zOy08?7Y2N4I!b`|&ia%q^-;mwx$9n)^w+@HT?bop5`W{Ui~T+j=$8nH@<LJy*}=*s
z_n^rTB!~uoVAzMx5Wd?VVM)Awn7B}2?iAqDgl0*M{+PX(EFr(Ym^v)ELq0tXx=I(q
zk3My3ps))qDcXg~4+Dk5gw3&r*Hc!b%8CW^d(bP7LXK;?zBI%Bb?GD*Kya8_IHbW&
zp@n6Cj27lg_*~g-@lx#G?Q!VXT>Er32pVTVjblsH%sex-D=t_L-!WN|>H;)7sUobm
z7a~=#&+Pk)k}`R(3H>WnI)Fpt=}ZeijV)K@bn8!EQnqnufhywpD{8Z^MXCOLr>9Ga
zYD9c67xlWKR6hh@PzLOIZH+$?v?to|^2+u0UtFgg{ttWtZd1(@*l>C2{@(M>gVNB`
zv}K9-h7LDGSPaCtwf9G63(ck#g+U{CcZ9e+(*V<@YD$e=xnJuY07GsHH|ccHN7;5^
z>};i`>8}Ct#FuC9$)paGlPt~*wI1W>Y3t;ny;6Tq7j}vnf54!uR|l?6^pa^R)$^Xt
ziK@v2bF{f1bzIxSk*-akNf+Tu)ovLUtl>WvJxrg#s92uHlfRuCBArMw@_T~`bXp&o
zb9%C`U_Z=n?l{q=fBB20OhhR6^!eS_dN&?rt}w=RZR>-{J)<~*UI&}?3Tm!CKEzd;
zmqF;PI-;rp!d}owsdzQWwU>W!IfCRVwAveyZH%N5vA{#SFwg=2^Po@d{QxCbnO|6m
z!!qd6H%Q$gkhbK<R}ZKXG{dcJmfm39`g31`Qj34wZ|-@8?uL(QvyAX0RfPO{JYmdV
z5p6q)M$k>SiRN}Qe>QN3!lEwasqNI(-uiL!<C6n5Nxcy*f&uf(q2L6KiLblFuWl^0
zb!WEnA6sfxC(H=kHV&CBvL^j2x<;Maa>v<dFGf2j`hL)W`nvEJ1<*cuis2)it~QHU
zkDRyV<^1xjX?mh%g`AY;VCT>6ji}9>BSLt!$+_N!)lV1&mkP8KLnS`y<c+7xKWjUs
z1BHhU7j8e_Nj`f1>OJ`0Z{GV79TaRYChyk`G+N&vsi_4|w7ksBOL^XJNl%zx3Y{On
zVsSZR<9orzxOd9TXVC`qOn04Ok<*}aO}zktmI-S?0kP3BeiTQDu4md`cegp)Mt(AB
z$?<U!4l86a`&6D$2}-27?LzTNUUd#NTjR%$8VA3+>FYN4Nooq4U+ag5(pfOn`7P(l
zf6Ny9WgP4<5?51ER?j>rpDJCZX4Wt#B+MB4(<~7(VvCROig3~mw&;6SzK7P%R4@76
z5n}qFc}CMMMTWC~a-T^?32No149&aw{U(PM&W3aHW8FrvjXg<CLi5YapNv$7)JTp1
zpEuVbSrmssp?4h~z?Gifrm|b(g>1%wLehzMWK%T^b`>_?Ci7**rIuxW)%_FF07w#D
zuN*EgW{2Rxk2Jy<M?~9&Vc8TK=17){$^G8Z8mLcmZZ`-Nn#l=yhJV5xOdTG0o2uBG
zZH;|0o?dpp{#KwtC6TCMb2?5dV#2XRb`ZY_y6WPw%e@I8R~45-A>8f87>8A={WQ}?
zb>?W4F86wyDcVf_x|m!(G(_2a9pp&u5U&D9$sbm%M^_4Y&DMXZ0+m23gmE3~%v6S#
zaUS1W!^M_}+#RnqXA$VCe$Ld5gqrvz?uF>f2WGC=&^LDy<RgJm?s&j)97PZ}HIif>
zy4&o{8dtJ*{CxAQml@=>B`JFvG{FL;+~pcViVLDw!6_VqlI7TLXNf&8I9Cgvw1vz5
zIX6}dk_;%4IactL;)Z}SwPmp}8C4y36W5Mmlw_Ti?saiBtA;Aa#D-e6rWGbf>Bu-B
zPjmCS^hQAspwvigO7}alnF@ubeAs@jjDO1Hlo}7X_R?6sTD?FOTR!duQc0z)e=!BF
z+}ICdqrVAVxW;CN&n<2Wu?%j{Dwy@rA<|;7RfA>+3oEEyCBLp}eCzh2bkB&O&@j)k
z<l5f?e4G>o%JGL@b+93598>tL>j(SCCmY_Gch(-aNBkSv(lTMW&tI_%i{M@?#Jklh
zaU+&PsFKUo_#lc)&un~T<*u89j6@VyZ*Nw;Y`|dF;{$!_9kmTNHE0ppu#OzPCkN8G
zjZp~hVJEIsH<{=(N;{0NsN=$;#JG+JS!2Peo**C5eXjL`nlR^R1J<%2;LU8(;aLcT
zHM0|Ok?cKB^UAbSm|w^cmS4Y|0KB(#>Z7!b2n7>US5Ixahz23kOVCrP<*dpC_lq1q
z^}nuDpi7}}kP%dh6Fv8epV2g_W_g|T+Dq?@1!-;K21|HadyQQCi6W?MdtN~3KE#Dc
zIh5N=xmT#RH|}xu2ZoXv)~<90sF9>4fnz!(Bioq3P*hu2do!z0h&X0~(mL&^t+SN-
z;tgYQ-&px`Bnv*20XLzpSF^q^(WsrH{EMHWP%8v5rUsS^$C%klW;1$b)Yj>z^F((`
zi4F$2Q~S9N{JwJ`j4^NpTil8+7P*!=zaJ5A6?tN^oJYwxeAcFrcCA-J7;E11{G*R+
z{}rw4#8<=$Tee^9@cK}Gv-nH{;_ltNF<M6(V!Gcy8}by#5;o_9r~ww3#qe@T#H_WM
z5U_+E^069`-6&)q^jypmJ?EXM3ecXY;UDv;SO$mQ_=aJ>uGSjIw{X1s>#yIQxRFTI
zEEm+I4Ju{R2B{`Dn5<IVIJ&M+sx^00SVncf^)`~k8)E?|VxB-98xLRiZCr3T=idOL
z5Ng~A7e7Q_8G(mQIFF`apTw$XW}QPwu#>JpyN)8-{Q<JqYljQ=-qgyh09}5><+UDm
z`#eaJZ|px)J5vrf(JTrJyJWp?p{rBZMBMBHZgR{phFFiu`TP(G+_(znXI`XV6Q0WQ
zk|G*k<nBW3RiL6mL?jc58`>kiFUG!VL`hbhN}r2Bp_@h=AjWI4@7H!6s$Yo$6%~bq
z_ttQi&`+NESEAkrdYb)q)&O*YJuBK@1{CYggA4O{h>lJ8OBJR5CRK7M40$hDJ%wOT
zijvP9%&D0LsH#1CZ;)<v^sEx}R$O9x=yTv<L{@e?v<p^B(KNt{J&1q#EO1DD_Za)u
z5KFeA)5+^RPN>>D@q-q!%wUWZc-@EZtGk5eUHPz&nQu!p{dY=va{!q?1-xT~TiEIu
zh_8f|xW*F3D1dO9HkO8dTS`VUwPI*H*xX+N%FIo5ti6b+>Fe#Q<OXon{IJDeBNcaO
zW^5^a4{~IWb+J$|k+Ue#L<R@2eJjYH1PaERifY}etr158yU8GFJM0i@JTV~4m@Ua3
zYN3;vX-jU^2v?F>3H}Yev4NvX%Dn<tIMK>GOuLHV3-OMLrjm>Go?^{y;#DOT=N~Is
zAB}axyZvF}?iF837?GIBg;kQ<(akSe$s1*nTmtw`MUcXvotn{AgCst~|D;#+6$a64
zxrvRAXNHaF63ts~E@|_n%#sNtWq$V%WG60}+>y9t-4moZ*Dlsg{_*aowfKfQ$#CZ3
z=l>)gU^aOZ3dWc_`0-l&043Zjb-`YIgh$IIJkOWpO0xF41mBv6ncn;$-Ivx=4O0_T
z#AzM1lMu%~s^ZAs-0us$4GzILBH$__>o*sqNELs$6ry-+u05WPon2i|8svV%>Yyyz
z$p7hpj{1aE8kcfUif<f~ZyW3qdqImE$2TR%vmia$(1M4ZRzh1?@%`Kb?42O)*#acv
zMZ3Fy7k#Hc+@TP4%uSB%htb+gPSz{Zqq04N$57>*FZTMIG1?3CvB^_6CA+2x#b2l?
zG+!qYe#x>@;0x6vMTq!856o$s>pqR~e+%D7=}7w5tg=k$4a$sx4J_<Gj_ttOm}@i;
zV|DEZ+9+w-Z}kZm0Vu%ZdoFiX1v2g#rmJ>N?;5=0ZBr={qg$%$bfi!H>+1#hcxFxm
zN;|aa{jJdkMI?8c=Z(?h%PtjO^tE$edj6f(7({xZ<NI<^blN6Oh{91YD3_%0sS@k<
z+MGueFt7>Fl-VhaRdj1+<L~abj#8jPN6hy#w>hTrpx64Og-W=j?-AkU5&<o_m)9BJ
zaThauT*s0RQ7JL^P?{yJ`selA?$vnXKLRshTpeyX9Bfsxqi%CydZ<$CWLOT<vEEaJ
zD3!C$9bD`ZZY<UiTlL;EPi`EEQQMQ^!#Kp02F>n{>+6Sg?g>eQO5a++oSt4c3z2=v
zWS?>FZrd-r|N89_m1eK|b<wSDoeo=7liSw@X_`-0pW4zIWS*m4D(+2-Bt>O}gs0m}
zTnDQ-1Z?(|a^vfLya@w@1y@dpC^)AT38nddH<~w*BJi-?hSDMw!n#1^_5);2R;ZyR
z64%-hR{h1|DloizNZcWP@|tFz=2nmr^cb3d`GH_0VN!d!DYjOy{iI2cvO$m(0T<^o
zX&K;6!Hj3Fiogoa1!ml@H2p<IFvD?{RS`02S$<^{_YHW|t*~@ni`!|=Mg`&W;inI!
z3gDg41RTZEqXQMQQ6>28SGc-|M(NBO-R>$RHR-U#TSZ>M4vUo@+z*cjjPd;)xSl<`
z1VVosn}hWv!)KEi)d##YbruG4gPv=5lD{Pt9~}+w5+4kzpWo287}QR+77n3d>@{mL
zFHX5o*Ed3cS`PeEiZl|{Vd^?(-lh>tbD|#zsvu}81e$jXA$k^w*yL6jj=teV&OSx6
z%`4>4HS8OYP{MBRm;`Q8L`AO$^(w|y9YkBm?rYaWUq5SNG?C8hsqOChuiJyBUL#~5
z8CdlEaQoWv!_p~jxWRSOhjI|m)+bQNhOb<V-HZ}Ae<e@%rPpb0AgKU$jZqssm8G?y
zM(TF0XBI+XSm`_FbcPH=S1g3DR>%vcQ2ue>OS1#fvrz9w*@h|Y5bL8yAmB;^HgIP<
zPgc=DkUY=T!Da@L5Nk!%+>2i8L*xRU1>Msc#|<98NYZ$2XoH>Dw%bbW)QEy19zc&4
zcACH5ZO^)Qt?(`Z@W(@du<c8|a$;hj+D|c#@GE+R4`Lc(gi!T-rDwuXz!T<HvV8J2
zHU3oY!qr%}MCqQ<Lm{Lzb(hGQ6fwPhAIN)#D6oL3EQUSlyVIlf&Fk&aA5-C*8;Lj;
z%m=ScM=FOXD28>$ux>MnwN~*%1_Vj?E@mO`F{S&OwwR90h3(_t;a!mZE+X@jl!EX5
z48k535W|+Ta&w@ThK2mVfG_}#B`Qst{iL+XPpmQ>^#@A;f;*2vPNe^6Ny)b9sv5LO
z&uLx;1g587082sOEmBt2MVj5OnF-8=wywxJ-Oat2?6-oueOz(=?yNfKk2N4w=V7Ks
zi~dIas9b$@fcwC0i6+Zj=tcOK7vFy2B^QV{|EsO#z#~k9bCP8LRh#l~bXwJqL=r8L
zxssn;y|<9Mw2%s!cRTkER14V6mza|GoDwcQJcfl@QQ4b>wcjJC|C&U8^m3K3x4;EJ
z4RdKx14uqF-=OtyI=AmM&OZa{8h=-)BsFhg(QQOY--iNFF_!)rc3+ER%#>8b5QY21
zS}zcoBQ|SM6^kc<qY_!YoYT8@dO8YCDL%0xJFW+}Z&(wK>9Kh#X3Lg{o@B-Wx8G<D
z)tLbrnov<g$P<<{9fqTxTa7m~{^*ZKNS!yOmdI5~0>|5}DCG+6GbJE9w%f(CIbbe~
zi_<2=1qz5U`cDSTF`=*~*CfvInHM{G8qr-0plavxD*a~NKCRUUzy8zigY?XcEm6&f
zWZ443fjp&ky!YY&bw@L}6A~i5Eq0BSa_G@ZdBfI(pX#*Dhm(N$nP38h5h=-}Z{-)R
z3#st*@Y+TX$?a)`$#PUGKAz?o?*mNq5oB>@JGTb~$_kCi-Xf`97XT8z1+t`Oina~8
z(aOiUvclUx1U0kKIgGOPnXMa3mwQ@mcQ%8i`?IMDGcH!9MuT9UP|$Lh)2MF@T7=NM
z?z`#)w;S9;t>q>6{wTw-nKCr1)(^}?YU1wTlSTI*QktF>aHlYsI+1l@LuTU7EU>0m
z7-|uEEei>f;q24&k4jWPq+B-yRsK9s=MDnBOn^Sukzpi_s`u+unJQVEPFN!d1&VpT
z?&y0lxP_gI<9fhuAxHiGQS|fsqYv3dCawHaa@5^OdF7i)iA2@?mP|4yB=>XTGA-Pp
zFmCb>p|=$DA+H<t0;@}Dgx%Z!u#($h&9m)hbs&z~;q{eKUPkc)iidm~*&cX!&IIA?
z#ISg-9f6^S<|dNmaVe{P`I=}>`u&S7hg{GWvxDH9a{V}{pTsBTdFqR0h0ST;&2!17
zlJ?ru%b$!-hztObg6uO6fIEydJ<)%w9Y17}4=r0Uo0<Lh`L06l?eWPI++~e9UJ7GZ
z9j+X_?R<ubGr}m2uhtlIY?ui*e=8)=C=IsHzZA3Sr~e7xW~3g+mEWt>Agj7R`>|sJ
z_Z9+<Eio5lbOehZi;Rzo-w%X1z%gHx*+q;3QqU)Y!8U_tjT0=F&-e{6JsG=a`M|&~
zTDz3UU%_^A*v5KHM29*P%u0}k)DR_Srv;O`mGMN<8Xe)O0RfZ?5|!hT#b9ydA?9mD
zQKp#)Gz>0nO1!OW6|P5iG)~D=xx0srOqXT0Bs?kB9X~W{JHq#);|27Aa+|l~G^)gM
zX$fLQmEn}>9e*}%eIw*?OwU#em5T;zjd<7rkwcugVF4kZvp%FtWV)n0XKLvV-oDBT
zL5RD!BxQqyC%@X)kG{C{BONb&{IKU&|0_Y?2zm-A9XDGg4wb+b>Se-p>ZpH?_0GKD
zf7XzmvD>>#=ku_E{x=nIiiru{g(2JG%^^)0Uqs|{tZ-MsR+URV7n9Y%93;V|tDz_o
zKRI@Y;Uko+P|eCw{q@l(q$=%>8Rkv3hFPV{%VsxgCL0jn#VE(k$Q^0Zb8;_vpa}8o
zb>&Nh9CVu_8wSIdW7e_oNPbf6txrSk_|G8e0OoVNzl=YBFC*{&YyJ3zQ^!ro-vj~p
zMrkTjOA?0W!Y5r|OM|WKPaErbk)zlpl|Cu9VG*!(Ab8^1C$D}#QpliO*4*t7(mQHi
zjW2P51=MeIyz%utx{c@cnuWkroPBiHGGgtBLs<5;Q)i4N-X^+jXVbG7WvGrF@P(hM
zneFPxP5Hsn;fBY%5?yB%d)r{6#m(~*(2dUQurX?_BVaY@>*q=<I`ZAsyz<T3f6Wvm
zXRM%(X2D-qY<ocMq7M5;jUMsIJ=;NxSi(<E6+Y&PvK%57QG>$c=7Mv(_4=@N2_3O3
z(qd9VpMnfk2u}{!OJC?o(c~d48igA3CCYkE47wZTp~t1x#W;q;pE+9#Og+DrlDCZF
z-n5-01<MsUDI8%WWnx)A;Jp;#6Yt&33sX%8o~DB37ah+HuL*3DDl|(O92{6kh`7$K
zb$RHu786q1W388k&ex{lHy-wPYBi<_yG1;#B64TqOT4uA52K_-j)k4x=r>|nx(Y39
z*ypd%s#>^gFgl>xU!AD+S>I4exzHqd=Q#B!wo;E2H*P26ET<NvCbt!Nfpp%c<1X!p
zT?5yPXD_xEt{!gFoQieUB&5|7uXfg{i1YPlAIpDFs4KsgfrMEk-dObZG&>zB;=*ww
z$3O2B3i2AK09>?iXithkO}4jO!J2)`8|)|Fk?qCPTz@RLcNv1LO+U_ZYE}?gaU8J_
zxX9D~wkc!H{xCVPm~3${Xz-3D`jdEEw4YMg!@eB3CV`VAodQ(Obp{|K19p2*b1FvQ
zy0Y?BX3t2eBjGdc)@fmKdIp&8vNi1>)w1>E6p_G*V)3|J2N@ty>Y@@RN_V25Pk;L>
zqV`O0`}?1MYFnyqt{Hw!eA38b$lzO3><iqMd688>Hv2OYgx5lE{xF#P@`rNhpRWT-
zhVe$yWf4Vqi}(iDvc%qJAWOVLU^!0Cc0ZmcoKz^(o7cnxdCWXd@Mo+zeJWL0&0zRB
zaHo0ZW<I%?;NZr>cl0lVwSRG{4g&*J@+?jLT^oL^Z2q|GXTf4|Yf%V{+Py<kKw8rU
zSh~p(Fwk<DG9)WKqOJ7|!~VVA&HRPy%hw~1Ds0k2<H2cLAIJgCLZECHa+Oqux}I-m
z^x*rr;2oAfoydPIOMB{@SopDuB`#o@SAO;KNn!Tm;#y0U2fC&X2lYY;6q_!s>|5Hu
zAM^VqYibc6`oASU#Y&dw4dK-YU_o8D>a=0xg)D(04y33+XV)D4nJDCUHnYZiqt?4k
ztS?>8z;>Q;)C-IEBSln&54r;6p3+01?`Pxxtt0;Po4Z$7jlSQxuZhn>Uw>3Y;wxv4
z@EA}rC<|~uq**9|k9_Gm{6C(<NoC==FXTLjXC3#$!qve19r}9WoQ87WueGlU4`tUx
zRAv9Xm*Q`G62I(kW7ej>`7L~!>$aTr`A*H15w~hNwS+s5gA=&`Sq%XSY%=4vi1!~(
z?>{T3#D?^D*D_TZSy(II!|yz~+h;uPi$L=Piyp-8(O=6vQ%3%-M;Om5YvDi+pUD|R
z2z$3m$d(x*@bI4h>;LQ1SA}lu&TM3C=Dc0<WYT;vr~!)46R+gWozsEzUb2u}oO=xd
z{cCc@vj6J*{;_p&TK^pDwza+!H?>Dn#CQ-v##2+gb>j(U80%1XgM2x|s{UE@Q<P!o
z*&>bVm-p7=D4I2y<5LBQ2}Mi7v$;Z9!ae5ee>UO&{g7sLB5JjWXJ6?eia&y*q+mZ?
znelK-LkR5&@9TUU;<pxGlYWYPRd*x!zaHk1^Gg$y+1{jmUhTKxb}W5pI*ttIej7xi
zhB*umQR*1|-;?AnA9l^=SEx>4=6mGyO3W1gqatF{=51>Z<tJTNe@1Yq!v9$59<B0K
zQoL8N%1AZyj}y$!lW=2b40wDmn*{fq-($Y{|9_t@LUV!hjW-|K_$yBHRh>hHf5&Tr
z=GLQm=wBuZy%3q6w<K9RT5MVKKTjeV(PaDezE|my+UIJYomG?zF90^#k^zTDf!_;)
zN<X6WB>wD}{`<dOxo)^%Cz5z+BR&+K3uZ3gMJHp=f#p<HxIXJ+KWbI^pxPhBmU;ij
zlioUSaF%}qlalP?P^Bb%H7J!4=eW?7UU4EQcO04an|}U%R@tU_prkqSB`>a%r>52@
zs;(RQIPc>@2sPn}vSSI*_7Z#58<F~x?AdQ!<L^g;qT1<~UoxWj&mZ4%h_oWaBe_n+
z;w#rkP1qwz-73+G|Hrpti!r^tp8I%pK=WDNsBf!;9u$_y*;bX%WGZZ*#Rxv-Ul8n{
z@;ro)M~I|Ww8Xj>MPu-kxq@gs>J4y}!i>3Ec-8fo#QndnUOM&sKVfX4hi0F^60q2#
zW)zPRf;`|?`Rk6WyVMnq|Fr=Zp&J2%tR=6mlWQgl9xKr>XK$kS`KYW(Vej;~za~5j
zWiko$doX_9UGaa<^-q|k>SzpFbpc-*?_#nh(L07ubaGgNXff3JeqRo{J291b<Nq5#
zH)b$3SMip|p`=>0T)<R!d`-d=%2vYVJO~2J^<xHz%KvrTQ`6A+#EFnvLTssWFMNbu
z4X;@W#JB)6s(01Qjp##jU!pHRJEOq=@gT5qQfr4VlDs8kA<B=J-QtHX_;x1aMW}&_
z`ws(5N2fABrbGXL@jw=nf|kUnaH-e}Rr^yIj-i#gJYZVT(I@G*NVNHjq$aDmBj+J@
zM(u7Acisnhl<^Uq4@|y!xQdwtXn}_T?W|8J+&_(f`g1s(yE@3n^7>ZT!Y97$H!_EG
zop)Sc+@9PE!d9R{uTC|7=M~s4P&!^%XL9SxPn*p&+oi;(Ez=3q>TBa95;PC&Fu`qU
zjb3>Y)$?{kt0`35pP6ODlE+JZ)wvaY1R<HVV&`-P_wlA0cE<s$74`M4i4*aBX1mda
z>qiu|>-dkhPrw-xpaj3RyH=&+S&E=_XTzCT{M1Iq)Y$k7E5(8|DOaXbs8&u2<dVG{
zKOD{J(LSgstTys2^fU1+KqVkh-En66m`q(C7!)6l<g72y4jp1c7gjd%R6AA&qjch+
zPFOF;$=D~KxH=k`QRD$ZUo?-KYA2TC8&}Sy-zwJ)B7fPl1c2>&hdrfrt!b5BQDRQV
z;mqzt8ray=B=nVq#G;V!u|*Qs$}+Ref#I;78c@Vo^zCv)4)1G<+LnAbfbNg#7g0!d
zg-+k!H`TArKEq-=ODvaXB2KqzBF?0rEewA%d1<(abydb^^+yo~zKyc_<k~gn`7szz
z5D*!Ny(=+m7sq73)l(uXuuzaBhbgx;EKNY=9`&F%)zsDn<9pKFO1<?B{aBKA8<#Ed
z0fU9btV6dBd&W04OW&=TO^nV2x8h3Uf>>XG6jZ`id1s!K{}Noy^Bp&Y4NInDYtMeP
z%`8%SCLK7998zQ#1p4Zf1CT1Vi&iHUekBR?$Boo^tW|=yX=i)TIfn~F_QI*~hY^98
zU=_AJt}s=qyjg^#o!4C$ACaSM0$;d;V>=Ax=Zm&aub=!9^<{2gjmt8?&Po#>ppSVV
zcVKY-!9lUKR03(sQwwjW+-Sd}==Ouz#PM8ZUTlrN{KqHy6m@fGha7w^FQE7Nk*dd{
zng*Qa%9-~Ay-W$0dwW#4Oz~)frt!RfqVgzCb|oKX)^%Xv-i%IB2va4?D}b8JH4CcC
z9%sQ_cYU2Sd}4#sr=;*JK&Aw(9?|WkFCXG=&+qf`wh70&r53{UKIigf$O6UnZ~N8O
z$u!J-dLlNtAF6NKbZZ~s&7d#_+5#59gP&LiUH4;)?@!lKR*3K!J?c0P*4nnryeGAw
zmW5L5+B+^}yS~6-dt^d$fbVrOj)Pz@+F{cy9Vh8IahH_Ktqmuq6I4cP%vjG!rTt8)
zT%psMC~rp_$Z))1$v=rXmUyuo<z>}c%&>}`RtjIZe~rHH^(>(}zI#<ICeN4eD!J4}
z3#PrDTBQ#Df1>?=;&%yjc!6oX-whX)L@+<7x6>6H7hI(%w-4<&7UEgNhwT^4K_IN_
zhV9R3aOaz@Rf2bBCN0xg8eY<vw1v*6nN@$^iqc0uiPH;wzzv~_F$?Ma7`%@eUzIoA
zQ7A2{tM<F=uvqw_@Gj+TtBuk)h+{6)2yej%`t_T1jq3k31ag6DBiWFd$7v0ngup-7
zFYai1Q-$><!J(>GVMI|cS42kxrk>+ZmY)t0iJ`VrUaQbZ5Qh#Fo%h{INX7+=&7ilO
zRpeE=B&#d3j#EOgOb2~ZCw=C|%)TzBn_1Z)DoGqSBxyK`Us}QIqaK6M&K#-DFFB06
zp5Wgr@y`#xOK)y#uUL2IpQL;5;YTi~<;TH;h&NokLrpRf_l~olG%T+mib`jolatd6
zQTx3=S_Mq7MqRb~wK(Koak?^G*||>ymU>SXhNNB0N`L&^BzAptlEQ9IEy~-H^lV6~
z!xwHh9(Uty?TJOa%lVhns-ImwcI*;Y{zMe!2<v)qtHMru-8ZQ>4D%^YeBCyN6~plR
zg%In@Mo_iU#Ely6+<6(b?kFj<bw!CyL@?dzGQZlb3g=3k;{+=3oO2}0Tw4k5`_^Q4
zYP!F_Z{yBs60JN6Pa*77iW_PJUt*~UBY<{N0ooo+2HM!vd@6B2m9GA48%;vJg*&s{
zxKS~y9D(`|wX^8%3GCX%lj<~GqIhJV=lB(aBfMWLmPV|YX1~FTs3AxDy}-5hy`KEI
z407RPv?q$|B3nJcl(2wdo!Is>8!9(kdXt%9>N$L!^qU`EyhL<0@A`p|SH>EyJMp!>
zIi7Wh>l6NUtrzQu=`S}~rAo-o-lmxw1jFnyP*QhoJ3)W7>a)6wTZq3M)7)p!9%Hth
zP$Yy;_t1Wtt2QY|%&OORLESB*8oQvAQ2rCyWdYt$l^^5~0<X61&L11In;iDLeV{dl
z-<tIk@!fteZ_{`(eUPv(%3b2oErz$_flwQa^IeJRIys11+*6vP`6C5&w}K=mG+Hn$
zh7|8T^h?~u6*p<*pVN{e0tJ+X_=XhpN*<y8Fz>|cdaR?9?;J@-!*|cY%wKr@MA04`
zYy1|TetzGn#A*1Y*9N7Uk?4R((?JHhg*L)f*<9*@uKIRb&R2YEiO8Kq!LP*(1w(k&
z2Q~Sa8H!NG8tFgw#Z;+T5*}2BZzvdaRFjEV-+{}D;O&|WTyFBVlN(KLJbkq-J6szS
zB||;aFd-W{s;|q{j6Rm{NiueQ)Lv48wDq#kK&5)HQVOfq;<rJUmB6>5>An?*@23IB
zqEev(^DdiEBRQQy+Ju;ougx$2YY|l7l?$1*CgeJaGKRMOnl;WFaAOO=get|%%(iPZ
zAnE1LyAe#!Y;cqOMG^^q$(4m(UA1Dw`noNZ2F`gb<mY|UW0vCsn!sBEnLTf;1#7zr
zo!qNldWs@Rt>D{fJgDd;a4c@9EZxV$=kRfzF~xX2u`iwuj{Z(kG}|7(Gg8p0*JL7m
z*2R-jy&N-=Kw%&2g<e71p$Q1uNgt9cSy5<sxUgPl;u5eJ>Ngq1+1)3(-#)&|KZk?U
z&5$kap?9o$5(~b^RN=+uiKHTGkNaM|dlzOlt+u`wEp$FJPKz3;|9FO`q+$}^NeJ`O
z;oN!SY;)UXtD^qF-osW46^*k7R*=D0hb5STNrdkMbP`X1M4uQMLf~6(8ow&;rY}V}
zs~76nRZ<t-f^gYB|4YViMPGOZ|6HPenbTp%&~030`jsu*Zlc7)e2y5>!BAh_rGNXE
zk!bq*w~AiI+)EKrF=CrJFPy$m@W6#1sF}_&bm6*(&a<g7(1Y+K%j-;;wI_bB{*@bm
zy2n~V==_=}crQTe5Rot=&gxD|ArDbD8CzC>AA*eZfzn<kmfobtY>`vIZ27u`)cQ_O
zNpL^%Y4$3|!|{M$Og$Rg>lgHoXIV}@nc3kju3f0-Yx3Wip}s)Zmgs-1_g;>css8SJ
z6f0vmL+&d-xbxCfgwRg;OvoQQ!`7<`0lk)-3If?-rizE#V`~dS%dCf2W31cwv7Wv=
z4&1Cly0lzg!$ECh*zue|>jJ&FVD`w9sL{uP4mJKIQx=UalJM$fT;{Obr**~&BJY+l
zD(vY6IrJ9PEDVOii*lRa9=_x{K*w@%Z>msVst=qhZOKicFW?3|Y~E(R`~>r>-GBAR
zovL9J7fIe!cY)WXRk}F+%3;E#eM%`bfQ+<ohvf+n$0V=F_nm*()M+i(Yjvk9huPCA
z?U%d_QcfW_cz%sUq^I!yYdgEDvCln6O`?aoJ-Ymvw7Y>ORn0-*rJm0oS}ckcAmB&e
zrRuqhn5b{hy}yHsN8sm1`pRmBkFgHH9`^5zXG$MGG+f?*mvAXQHXhTW9^&d?o>VoZ
zpZ9u;{DUC_!;dk$Wio$I#lpa<n;_Qho3jglc-_!BIK`o4xz->6PHA{Amdn?jQi;ti
z&hjoydN4WRx-5k{>PZaH@6Yi-OPXw1hwbQ;5#bg#nMQ5#PALMT3EQsex*j<l?5c6I
zIeqmZGlt|x>4ba29jqzW#t&)1!TRiB7*c(l>-i&YD&O2@6!%TbRICuG3=>{^vGV0*
z@?G!R;~vDHKHw5$dt7W-WxHM+JNT-2ya!iEhUllDeN!-xh`SI&s8Zgk)%s>(@IdN&
z<I3|DtwE|s?hyg5yZ%nTyFt^tk;^~byd2f@@kVh<NE_bK!Bp-a!bO}d)}=kcMo3Ih
zt@UC^Me&53&C7ZwQh)w<IhLY)`GkGAc)t+$#zG3W-&`hdAq%k%_D0T0HL7B`ajM}@
z`(uL&dr93_MOGV4ly6!%@zd*ZSpKMX3^}?v+PzMo*4_PMejiEUo<!VMsJ!CXo!>Ah
zSAFCGzqXxJg{`o8C#rr@W?*|FRN<H{;n2%Pnz(~ItT%nPIX!Oib9Aj($c-`afu#Ky
zKR>ZycBrsI>d|P-ylto}%W9?%F+x8MI9$x=!k_H5XV!FJF3p^^w1AY6JfXG0v0Q=L
z@nO-hZ(AI8=-f8lwj^!QtsVo`y-dSKg}R@bW%H|7R%afouRtsKO3P<ML+Ve1$}!3i
z8z;@1<B6usR}4YsaM0ZzhtF49jeB~U?;1jCrQnn7D8S|5?P(DiaH8}O_53<TCeQKc
zaGql53%(leMf@kS2+R<^w1F3kPQ|YdKC2Gb{j&&dUV<h*Zj=ET*3jnZIs<Vhukk4q
zw+EXD8tF(%3oHyVRm|$SZuR7+T;7-*hF|b^YwZ!J9akrK`BAWYC)+_%eVDg!IuLy*
zMNon*@{M_Gzt4J7$v2Y|kC&vkD*n0sp6`w||DfT@@%Yt)>U29?_smdQ%1BIdimtfv
z$?$iJy~ykICzOMqEQa=3qxl&HRt_h;)bWP`hFTqL*_5BlzxI{2^3aic7oZvKj+hsW
z|A@)GMwbVq+3uL%bK0}_J8s5zeuvOfb=2+8ukY$BeX~P}mXFV7Hd-Mi>K(Jia<@vF
zsI^k%@>b`xa@JCY+U>dv_z5n%VkW&p8*|3tjO%5c<A-@-)wX{Lcsy`UH#A$yG^?^`
z@m3%@SspD*IIPz1g{Qpt`5~*Xu5H^j8IoFwlMFpx(>Dw)tHlUeTw^(T=&W+^X|`&8
z_!~YLiW9LY<l~xFmG}Ev(j?VplnE(eJWFZ-NGo0M$L_>{!FaARDc9(!?hxv81>udW
zSF)fs`rR33+$*Dnj5g^f)msaiTrnE^nHFN*LP1LY%?;N>!;BIdJ2Atib}Hlk_f8X@
zB;tE@-6p)n`-_53pmX0HHlD{UO0X6FtVhGEC#O+aM-Po!@vjPu%VrG{+60M%tX<&Y
zrj?yr!}gH#du{A5$j6=W0p45S09V>R_rAU4ZQrP2^#RGzZ=bq()6Insp4Cimpjt0S
ztRWMQ3&n61r7}t@7Y3q;D`-Az8*yx+^S}L)SqrYeE%OKbvd-_md(vpww&#)zmJqoo
z_~7tia5N_&5}E8(^)zcthOPc64-}#zimAcc%PF?=qn+y390syoz*1#9{KUk|Z_>Jb
z!e*<hWYMJyR~MnVSHkG5@;GhT3BIaTx@lCltEg|&>$h$YzT0RP@^?t<$j3d^V?R;x
z^*cxno@eYU%z{0}c^)1`cGeV*V$Z4cG9eRo3s>|KE+B2l9gmwtz<V8A(faT19BH)q
z2*j8ZG<6@C<n0wERqT3SvygjJqxc;=XbgXh-xk(d!P~SeG;%>(TIMKyU!05SJ`nKg
z`q%q_Qv*^f-$xUMzl7@1BV`^-cV8<h&;&2@D7XvbCbG6Q>nc!#PAPk_nVVU)7f%YR
zJno{-gL6ab3a(sD+^0QQFlZDK*{+oX2Zt`S9or~9Ugk*dvfyn!n&&2ovwmY}bS<-7
zH({%=CB!pop3TB6oNUMBaY#`22EG@Y<V5;LXqY2`_(M)TeBl+!ag#gTHCl+&?5fCc
zt4lhT^hBtw+15}xk1upCD>ZFXVk+g2L*&i?L8qnrskqmq?BdsM%!CBqaCTzJi-UG`
z5vI}*bhU?JY-a|G8u&iBkq*HZSNt&ArE;`W<K5f~RgFqwt4?1>){GXk!WI^;vbt
zNdrsA;R*dGpWB{lq~)z#vbfA32wtT~dX(x+zDj}<>V&Pm0=ceBhD?c>TkX9o=}Qt*
zf1YV~!LT9$BRpzb`<gu3HZ{TZWpk9*$MW|sNnxyVdQZbdYRBU)#vOnwVjbcZR3?J$
z%cIzR!H=o4u*D7MRe?8*t$<G%fpKeQpTOOmH)U?d&&#g<y59pG28p-d8-~y&eX!uj
zGM|>RkaNG`)2)ux`**m8mmBug;?yg?zP)AtaBZghqy9TG9F3|x>ub;5p19$H)4Rp#
zQcsl4#UFgf%cGtP)pq1l-_h8ml%f0M9w!9#VuH^WwU>s^V`uD;^{@tpaHX5EsCu)p
zvS5xxr`)ppP!fye=5_P_fc{!T8-7luxqj&KNz%m=3+Ii}3v>2y*{TNLmHc#YnER*;
zAk}&H&fBC<1oCS2Z1K4!bn7mzdc!TBSQeZXnxIjkc<XE7#*U9Ns%N}1(~A8h``um<
z=2w3=@Hs57mWfTqpBFrolW~a2w#BP`_T?#VSRvIn1J{J$zt*ImbSDY>E9X4+{>o=J
zQXI34zwgr(-AKG=!TxR#e4nJWbImM$j*chP=Z!=;mw?orp`-qd(lw+++R+O=?IH$K
zYSiw<%1Y_;ro3k_4K@(-Tbk{4%_aU!cNn5n2DFMT7aWPMVUvo<q91q`>I`}<2%toD
z4I|9J`<+Y62Q9{la0O(rT}@@d`UU@=DQ`tGWhC%qb^$Ckf8NuWX3%^JWG1Gi7!6Sl
zPy<rLh%|Iaq)QIIUepVm)g$X>cqq{!bpQLiw;80|@)_~MyPPUcM%(amC!8i6{+(C;
zW6g9>Q`B|llPLxDm05uv!n3}9aKRD%WCxx3HGOjRTk6yRc!hH^P!U?D6mL#5Zr%C<
zy;SkByL;<AXBb|{`eog9(n6aS<2Az`U$~2H%+V6nb)=|s`|Id0L6RNY&Hs)|_`A;(
zYX@r4giAf^Ky9c!RQc&+GrmhjtZkJECKHxj#Tlm{n1d?b!YDLJpBgwnc*}<n?*iJ~
z>nExpknwCJA)H6CByvD%SMHsu^dGC-4NitGH<~OA{UKLB{|4m}bj$YhP5XK~uv|>y
z8OMncbrxpO-q=rF@7@Z!88BFE*pf)`S9~)*&$zI=6Fv@3LlEXRO4J1raoXHqPd7xR
zG|hkSq7a)%1<U;EGAV9UzsfQ4)+e`dB9yD!wG|w}z+T*F0{@Zins)(As6=4r;x#Nf
zw!r|I|9%yvPEKvuu0h8AmUmjVR>(ZpK?Co0mEaVi{U@z#4j{CaK^ApH#mqYo4iVL>
z09ueAw|WqcNBcMyQe5FMSYoaFWLS`-3x-aZ4THF8<9l1&HLP2GGTdYVo{TjlMI0oA
zH>GT~mxiw2?;-jxlU5_i1G?hOu(gf@^Lv#;T!0{sUh5NlyYi#V)Wr8+buYRHf5|l6
z_I~m@7jxfKeF<)2C^r(vw|tc}UF4LZulp*Obpd+zvfzLW>Kk@zTZzeI_lE8r3(6jF
zB7B3sAc%rQoeXT==euKOUD5U${X3f2Zl01WBb;wVcfz?yamiS>@lm)55rPmOXF8hj
zfI;?qGA?rVzx*C^7{gkh>`T9{)#|dLwQxf|Ho+3&yI!m>QaB-QZt6?5%j1*XdunkH
zJbU6R_Tb?CTp&D_b0T-=|Fw6eVM(TK8@H6oY;3g6B^%LP(#ECTwHiZBOeHl$+tiHI
zw3J-IY;4L>qmbP5Ewe<$4R-}~T3j&`luU8SUBM+36yberzRJG$`~CfT`N6@T=YZqp
zzP9r^uk(`E0S1XG^!2NHK3}D+>ssrIP%@X#dUNV~F_Q=UM}G+xFE0mmr)`lr179+u
z{83y@F?`1Pl()`%dH64n;I1GbY^-;>6Y3?J28Ps&MUe9k3O&#N-nMY{TFo~fv|512
zVQ&mBAgf0Yh;iV4#kKljrH*gn>-eS;MSnhr2MK7sh3~>nlbOuOLouGRlc_GDT`RMY
zOuW|Qn1IDViRgSB<7N8#fo7o0WldeBN&obVZNR)1;#~1(C;d$>ZdNm4wRNNvO5b6R
zCL#SH65dZhD1W|B*#^VhoWvU(S*Zl{<WJcnCzwkl;G#7-%~SU6&DWjsUu|Tj&2As~
zDb6X2jd%LB<ww2>Q7ns5$EHYg^YX<X0swH8<9voQUUeV3%5j}&g22m)uWvC}rUXxT
zANy!D19{k<Y70GU=n@t(+)oqM=nCw*_*Rb|{vhe?>i=6Da75C&%p;{tuNzSD1j$3r
z^2bdyHw2>+r*eiFQ#n1U-1iv=fn5~i0#QMpKy(q<#eURB4cLPEYOsWkhP7zdOv`&m
z*p>TzvkSmN+^l!)3u~5Tq~>fC@vE|)BfNrW3ZS{`i^e$bznALVTMbB8;29wvtbrDa
zOj5==_q`UJ=EB$KrN@P=(q>gB!`I~<bsYlzk_+r5b1zXEf9s#9AK3jhlc=YBmVjwM
zDspd~!hz0NVT(;97*ed0Wg_IM#HnP@NY3=q-C~iV($SZbX_ZTCKI!p_o6V&aOp0EV
zJs96DKQ5#gOyNDrFNkR?t^-SJlM1b<ls=Y!f;))A)CM`-Jy0yz7QVRgr2k)XweMRh
zjI97Ho+Bkh+n71u<SjD7T-=d{1-il0`j?g|?fYf1J=LjwjmcXy8WZmoW@RFPt0HVs
zNLP6CjY_cUqMN~Ao|K7BgJ%{BAixF;76cne%wlF337Y$udsrz7Gj%Fv&LK12xysvc
z_MtRFqpBRh>THlaR%9f6RJ;DcERh|uKb<VfpPQ^d_@l^mJJny58#5^ph_>a@@=X0u
zGA9+VVLMMAI|*Ol5Na;^v-nlQ>j=NRMtnMdtMevs{9aj>r3AGUAtEt^Ku^y9o{lUs
z)#2#NcpVe{`)i2?ge?h@RNC{Z<xqqIwnd1OyyhqY%&`=kO@`5{s<+aQPS*H|;Q0#$
zZwbBg2rW9v)*VoH@FicefH(qu%L7o)V|Pxp$-J-nXxQ*ouIGO)3n0YE=2z(z*Lo=U
zHoh{wlBM=EOv7C9WFw_T003oY5Jk1ZXRFYh+k_gS&bCt{_?|vE%rY(wst)>i34HsC
zfKZ_QrMyK*JNa&B-~*zG;aUZ2F~YB7WuK`J0LPyMXq;T#FlGt`C2<!CO>#DNtpTE`
z2_^nSQBT>av!VhkK~B5okd0?)=&742l2l*gSoZzV(^;a%4xT<R@~AnhbLZ1%oM@lH
zp0)QJPCYO=39_-HUl6&Gb+AfbB(C{N1jT0!9@91pUZRog@Lmae@5e=VBF!8DRN}r4
zc;`-peB~WU>gz?&LC<o>U`O7wksQ$;gYS}<tLEcM#UUc9AXSy`6a^oCZTH*)YOOML
zN=xXI(-8#bSoKy;^ynb@6=yCwDu4=g0F9w4dSX!9!AbU>uGDgETgJ*AW!pWn@wBEL
z3?@B8`OTU(EHK*b!s_|GJJqp9!`%4xGkGc*2f}rNT}oh&hE<mHm~bDVD}DvJU}1Xk
zoa@Jew!2xGzYX4N2!1cozgrvh{EHcsA$$u2+c%_5hE>h;4F}g64>T%advc#BI!z9m
zz$@fNn{+7om7%2S{3=Q^-zf5W<PTTSCv%xc{#7%Yf4xFaG`jR>s)N!3BB{b_E4E_;
z4D>QzRCND>mE~-|nO*0Nv^LMSp9t&JIw?zrwfs5v*3BrpVFwhuO#?H&83qH5ep0c=
zFC$p2yrivDeO`_EEn|e5dBw?3T$N2inUBMB08$Emps!p42~q9=xxWh(C$l}`Vzjar
z1txl!8PDJfXeuBl^23-8Tbh4JVi9+oODY@kMfsgVVsj+zWyN~~*Y$#<G4zH^e)=^2
z4@_)CQI5*QY;bFk@~rxyCT~0BFFSTeaR{$6HfBmwL(Yf+lP+DIrI=aBK=B1aZ*T8u
zwpQ0S!M3ll$#>7@edsXsb#^|+B{2Am>-C(h9p>UT<Orp^ptnW|R1f+6fxgDl!@Lsz
zg)Z1)8sg&R2CI4>n1bl^lS8%YB}QCekJG55*wa#hW5gDKoJ^>8+cB~~;<wZVi_!Wu
ze@^+fD3uLY^th4!90@Td{zTD<elUG2m9Z0h9D7k+?72ZhFw6;!34#?7n;;hRw^oZ&
zX+?#giYH+lYtAX2Q3)Z}BZCwyW^Xagm#kwiokh&(XNe4i(*ZgSm?3ML#Hy6w_ag-4
zl*U%ukdwEPvvm)_Cv)e~s)?6Ccd>D~x9x@5w;}-=(E=^MZz=;hFUOLCmm$+iXV<HY
za5hvsYzxM#gWT`y$od{t=)_4LeCq(}i33B<bMHdXuqTE4kJAjl59zH&Ge7lnZcYPQ
zt)Km7Q#=gq#M=yP{91p(z=Q4Lu?s-2!%&b7anEJaxkYb8(O5qGV#M{}zF`wIu_tKJ
zf11QP?t3A-n;xy2xOYk$ejp5;M)#jC2gnI$dRCMl?A-*jdshYEE{EsW@<ulU`|c6|
zEs~KCV>FNAY|O+tx@udDokjqZb7R7>cx)->;jR}sogT)Ej#hp_dAf~Hydy{&^~p8F
z47(3*Q{ZCSHQf68ynxr4s@ai$sA5%ZB-O1yP<TZ%F90@gg-CnDVll0^KX*+Av#Z}t
z+|@O0Zw0*!F#<Q$vEazNVj_2+3qW4?IeZrzOIn|>9pkxuW+2jsUFKMP$=M&b{=TgZ
zyQ@K>X#euzu7-|T=ak2MB5}yNepEdlY-Xp5Enc*+*J~_&fjR%@EOA|L=Pdex&YCP2
zBz9-ZOlv;4u!YEvJ(N9xgi40f<;!z$+|rC+(Dixzv%UJ}w<28~GH(fMD>|<JUX@dy
zir{*@DtdCMF;9T!M=bWWaW1HYljBUz51TXq^bks6p1&Dwdd6*qySI+=QSbL!T_eGT
z+>q~jSgWzJJPI3d9(e%ZKP=}~(4j@@PhFDNsmzJaky<WseDuzHFJd{G$Imjj&9;=F
zfwI98XCM_q{w9Wr%&10!BTREc3Sf-3$=?3=J_I#8{zO;gEHNe*&?<N-&ht<(w{(4(
zxMxx*D!wq52!z6w*5}+a@xc{p;WBGV6Pbe)Dixp?v>w8jS<ClxB1Snvl98<2`NsT@
zT1RAz4#+y;#n?|a+FvY{TIn#fkXmWlogGTSw8a5HBb*ca!4?(VDkI9h63hM!g^gn5
zl~9sE-|@p^vKj2YzVeOkQbw9KXz%G;qH_A;mBOrn9u|+c@GfEd!y5v0?%PD-8hfH1
zl8n(iJRUM?nU}&5q=}7$;9*dQbNP?SnB9|1v@2xurpw@4NMp4b<fzb5j4~0QfD8i4
zHES=vr_Jk6$rU)zO$!G1&XR6-=(8Z^0fL;a_QaqPy6X^W4&R|x_J*WXa>iGB3{YCT
zA^;P!hA>cGDbqvnMQdC$<kj^)cs`)M^20qU+3d2JyqZLrU7s|t=^>N7hgqrDlZvcy
z*OthEZ1XGd4ajclr{kg$wZ*)BG`bCl`dz*V_O2lrmp#J*Cj1m`>LuaX**C6wrv#T=
zkDrPOS02hhFg-$U=hB}9_`cPIPbVetPLDn2;o5%#v)!b2)nS?{uT2lf*Q0@<jOABN
zk1B0G&hDT2iQn0;CoZA6HE7&4tjn{j206Snp?K&3pjO7E<!e30h7hk_FGC0;f%PNW
z+cy_n^SJI{F2ztLhf~i~vZ@s_D%bUp-x+g}>QS{y+1C8{=8r4U2G1xo9KsPICL$E2
zoAuy|=gk;XO;)Sj`)ScaoS%Er*{<`rjRAzP>A!|-U4l5ivsnY4jSf<q^`i=^_Db0s
zinLIk3lyWPG#!BWnVnbW&i-rhF6zgmB4BD;w`_aqgR})WM4Mczv)@jK$O?1rKAqB-
zsfL8T?UA=7B?ir=z*?U+pXKiW7ZB}uM0fGMbaCx%X5`0I#Z;nKbSXqCdud}yZk1V0
z^3&n43F8TJDOKon&40s;XGE>_;g_@m<IzVQ5h3xC+_#@EKQ_l?C>`<Kk4bSG3Wd6S
zMiiksfYer0p!YJe<#F+HcCTW((b6SOWnCDXL9}G#dnU4?(tGZZD^wh7l@_{g<I&32
zZqx2HpsSuDRLo_^dkxw{W>uVVZ`cdufO%Pr&6<k~5<_p9Nt&O=NA%?_%(X5ZrV1>E
z^G4)yBK^`AxsE~({cj-C>%;elRkRclnw_=sNS}1Tw^rnz95}fz(!Lgb94GnKw?{7h
zY&3^-YblZHE;Y}ZK50*X?ye&yI32Q*InrO7V-a_jFI0h=I=#x{U1HX2^ZC+qD;wv-
z@cIB_>Md_%>gLm)PccVGv_92s31nv1Tw7fF3SCd;de;YwUa(5{^CFKV`FoN3^#jOG
zpmOM{gDAhTOz4x=;q(ayz2)N4uNklnG|S;`KN0oH)2R2!p=3z<Arzs^cO~49JIz=`
zt&^_y;OmH{n#^p@nbsvc@>QXr>X8h<D}qPn)qgLrjWYoEnLXl=2v2J*#g_to>dWjR
zYi*@~O?GJbVuV%~EWuMow2wwq;bc@z2E<D87*omvrL+*z;ciSM`2+;A+G=^<NG?yK
zY}j-#e=L1@u&I7Oz<QgSgMy6bNx`N!$DgU~EH>Q`Zh6IR&oa8sJ6UZ_@1$Qvyu-x9
zn7-k0(K0sV$OG+jixK`-9+asZa}+x+<!X<-mvgV;KFWk<t$aH%4J<wa=ku#QF3z|X
zEdN0^rBJ>=+6zrtCh1$Zdxj4K8OI!R<>HXdI=V)F;D9xVJR-UX4Sak%Z@FtOvw?v+
zljHPhM9cf>+DHcY`2A5y2-RBc+Jn0A9fQoKA!MG~(_}8pU9%43GnNd@Rxejf|F1`6
z%Ja+x_te}2fOKlGxjr6JVJ#1cRQcNMw62e93ckb9NbI}*_V}r;Mqhsei6157KLO1g
zTwQI@qM5I*drTXYY6^bJSnjzc>L{ozhezWs#7c7q^uDWlefwgnR#bOZ^b$biraUSS
zEf~qggA95|5StlQXZgzCGQY4#w=h`2vIn-U^^RZtWZUK^4o5q8qlQ_JnDfuHO3Cvb
zO6|~13OphT-!FOwFnKU`ul9uoMz6`y{`sAN-sy|*a4Q)2Uqc>R+lw><dhMB}`kk4N
zKsley_>N$q^Bs2VUfENRVq#V*ewq{cT4e&#T;8Ls$P*6Z)R%y?NvV2nKnp~yl<MKN
zLU(4qnbBdk?i%6a(ZQ(KGhcPZzdrT-twiQ>GP|P$=8xf-smf~I)8CK>M@&F+1Mfq`
z<Y!QYS<z&ztZ4M>#7#{}l}C+^>IgG!%EP{$*LS4)nwmI3vrN`KBKddzrr3vEF2Jdd
zQGq?q6Q}2fS$$bo(7Isr$dVtb8$vfx)y&)R<+!EKWzvT2J2*c%kJXqHWhm*D`=C=Z
zcOwM=Np9GML&xfF(+5h^#N~%k;YZXZI!C)rVL6*GIL9c5SKK@~vOHW@b`o!?>8H3h
znt#PTN(!l+gEQ&S=7u}a-Tl5kzm_{sE4C}8%9TQZeOlqZr?<CP=Ti=imH9$l6hqyD
zHM{kTS2!AbRgJC&THK`VSK0AhZu5IM1QbCB&&V#s>42*M6miN7pg4P|C;q9NKovb%
zFZ4C!W_wM-EzPCoy^lBzQ_(C!*Q?c093Nks-D+QM3UUgf0mTOG!B}a?8-3NKW&m2R
zso41+2io2yu0>?mIN(5Nn5%-Kmd8cU5c6~;<01uCArDvZBJm2gSVPPXB5jAT+(nWz
zQRBRd)saQ~HX3G9db9n*ERnO_ASkGtJbl#Y|5!WQ_RnCCM(&PZpOkBV$-F&S;4R-&
z?|8wcAyEC70?RnAd?zQNzt%xpT6>r_fg(!^QarWll6iyea?k(9ywKI>Eq5wJtH$bV
zH`-UB`{j@4|8cE>;%#tF+GD|Cytnr5YcxyuE_UCmjXeC--o<nCUG38JjG;5PdkHRw
zd2u|PnoyrqU7QjvcX#d7+M4>}KkV&Ca`N9#|2>?aN|^7K`u~0|*N{;niJEF1vj@eW
RLP5X_dcy8_zU8@F{|2yHZH@o{
literal 0
HcmV?d00001
diff --git a/ui/pages/login.html.tmpl b/ui/pages/login.html.tmpl
index 5aa10bb..9a2a393 100644
--- a/ui/pages/login.html.tmpl
+++ b/ui/pages/login.html.tmpl
@@ -30,7 +30,25 @@
<title>Kimchi</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
-<link rel="shortcut icon" href="images/favicon.ico">
+<meta name="apple-mobile-web-app-capable" content="yes">
+<meta name="apple-mobile-web-app-title" content="Wok">
+<link href="images/apple-touch-icon-152.png" sizes="152x152" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-144.png" sizes="144x144" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-76.png" sizes="76x76" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-72.png" sizes="72x72" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-180x180.png" sizes="120x120" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon-precomposed">
+<link rel="icon" type="image/png" href="images/android-chrome-192x192.png" sizes="192x192">
+<!--[if IE lte 9]><link rel="shortcut icon" href="images/favicon.ico"><![endif]-->
+<link rel="shortcut icon" href="images/favicon.png">
+<meta name="application-name" content="Wok">
+<meta name="msapplication-config" content="none" />
+<meta name="msapplication-TileColor" content="#4f4f4f"/>
+<meta name="msapplication-square70x70logo" content="images/tiny.png"/>
+<meta name="msapplication-square150x150logo" content="images/square.png"/>
+<meta name="msapplication-wide310x150logo" content="images/wide.png"/>
+<meta name="msapplication-square310x310logo" content="images/large.png"/>
<link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')">
<link rel="stylesheet" href="$href('css/jquery-ui.custom.css')">
<link rel="stylesheet" href="$href('css/theme-default.min.css')">
diff --git a/ui/pages/wok-ui.html.tmpl b/ui/pages/wok-ui.html.tmpl
index 9ac0e89..a562e70 100644
--- a/ui/pages/wok-ui.html.tmpl
+++ b/ui/pages/wok-ui.html.tmpl
@@ -29,7 +29,25 @@
<title>Kimchi</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
-<link rel="shortcut icon" href="images/favicon.ico">
+<meta name="apple-mobile-web-app-capable" content="yes">
+<meta name="apple-mobile-web-app-title" content="Wok">
+<link href="images/apple-touch-icon-152.png" sizes="152x152" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-144.png" sizes="144x144" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-76.png" sizes="76x76" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-72.png" sizes="72x72" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-180x180.png" sizes="120x120" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon-precomposed">
+<link href="images/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon-precomposed">
+<link rel="icon" type="image/png" href="images/android-chrome-192x192.png" sizes="192x192">
+<!--[if IE lte 9]><link rel="shortcut icon" href="images/favicon.ico"><![endif]-->
+<link rel="shortcut icon" href="images/favicon.png">
+<meta name="application-name" content="Wok">
+<meta name="msapplication-config" content="none" />
+<meta name="msapplication-TileColor" content="#4f4f4f"/>
+<meta name="msapplication-square70x70logo" content="images/tiny.png"/>
+<meta name="msapplication-square150x150logo" content="images/square.png"/>
+<meta name="msapplication-wide310x150logo" content="images/wide.png"/>
+<meta name="msapplication-square310x310logo" content="images/large.png"/>
<link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')">
<link rel="stylesheet" href="$href('css/jquery-ui.custom.css')">
<link rel="stylesheet" href="$href('css/theme-default.min.css')">
--
1.9.3
2
1
[PATCH] [WOK] Moving JS libraries to new folders and added license files
by sguimaraes943@gmail.com 23 Sep '15
by sguimaraes943@gmail.com 23 Sep '15
23 Sep '15
From: samhenri <samuel.guimaraes(a)eldorado.org.br>
This commit updates jquery and jquery-ui to the latest compatible versions (v1.11.3 and v1.11.4) and adds all the JS libraries that are required in order to run and develop the new-ui.
Updated the old-ui login.html.tmpl and wok-ui.html.tmpl to point to correct Js path otherwise the CherryPy would throw a 404 error when loading the pages.
Moved all libs/themes files to libs/jquery-ui/themes/ and added a copy of jquery-ui license to this folder.
All the new libraries where added to ui/libs folder and configure.ac was properly updated to read the new Makefiles.
*New-ui related:
*Removed logo.ico and updated with favicon.ico in high resolution (name convention for IE9 compatibility). This change can be spotted in the browser tab bar with the old-ui.
*Updated opensans.css to point to local font family when the user already has it installed.
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
configure.ac | 12 +-
ui/css/Makefile.am | 2 +-
ui/css/jquery-ui.custom.css | 203 +++++++++++++++++++++
ui/css/opensans/opensans.css | 20 +-
ui/images/favicon.ico | Bin 0 -> 15086 bytes
ui/images/logo.ico | Bin 1214 -> 0 bytes
ui/images/theme-default/Makefile.am | 2 +-
ui/libs/Makefile.am | 6 +-
ui/libs/bootstrap-select/LICENSE | 21 +++
ui/libs/bootstrap-select/Makefile.am | 20 ++
ui/libs/bootstrap-select/bootstrap-select.min.js | 8 +
ui/libs/bootstrap/LICENSE | 21 +++
ui/libs/bootstrap/Makefile.am | 20 ++
ui/libs/bootstrap/bootstrap.min.js | 7 +
ui/libs/es5-shim/LICENSE | 22 +++
ui/libs/es5-shim/Makefile.am | 20 ++
ui/libs/es5-shim/es5-shim.min.js | 7 +
ui/libs/jquery-1.10.0.min.js | 6 -
ui/libs/jquery-i18n/LICENSE | 19 ++
ui/libs/jquery-i18n/Makefile.am | 20 ++
ui/libs/jquery-i18n/jquery.i18n.min.js | 1 +
ui/libs/jquery-ui-i18n.min.js | 7 -
ui/libs/jquery-ui.min.js | 13 --
ui/libs/jquery-ui/LICENSE | 44 +++++
ui/libs/jquery-ui/Makefile.am | 22 +++
ui/libs/jquery-ui/jquery-ui-i18n.min.js | 7 +
ui/libs/jquery-ui/jquery-ui.min.js | 13 ++
ui/libs/jquery-ui/themes/Makefile.am | 18 ++
ui/libs/jquery-ui/themes/base/Makefile.am | 22 +++
ui/libs/jquery-ui/themes/base/images/Makefile.am | 20 ++
.../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 457 bytes
.../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 351 bytes
.../base/images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 244 bytes
.../base/images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 301 bytes
.../base/images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 387 bytes
.../base/images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 246 bytes
.../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 5854 bytes
.../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 317 bytes
.../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 367 bytes
.../themes/base/images/ui-icons_222222_256x240.png | Bin 0 -> 7006 bytes
.../themes/base/images/ui-icons_228ef1_256x240.png | Bin 0 -> 4599 bytes
.../themes/base/images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4599 bytes
.../themes/base/images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4599 bytes
.../themes/base/images/ui-icons_ffffff_256x240.png | Bin 0 -> 6468 bytes
ui/libs/jquery-ui/themes/base/jquery-ui.min.css | 7 +
ui/libs/jquery/LICENSE | 21 +++
ui/libs/jquery/Makefile.am | 20 ++
ui/libs/jquery/jquery.min.js | 6 +
ui/libs/themes/Makefile.am | 18 --
ui/libs/themes/base/Makefile.am | 22 ---
ui/libs/themes/base/images/Makefile.am | 20 --
.../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 457 -> 0 bytes
.../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 351 -> 0 bytes
.../base/images/ui-bg_flat_10_000000_40x100.png | Bin 244 -> 0 bytes
.../base/images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 301 -> 0 bytes
.../base/images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 387 -> 0 bytes
.../base/images/ui-bg_glass_65_ffffff_1x400.png | Bin 246 -> 0 bytes
.../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 5854 -> 0 bytes
.../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 317 -> 0 bytes
.../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 367 -> 0 bytes
.../themes/base/images/ui-icons_222222_256x240.png | Bin 7006 -> 0 bytes
.../themes/base/images/ui-icons_228ef1_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ef8c08_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ffd27a_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ffffff_256x240.png | Bin 6468 -> 0 bytes
ui/libs/themes/base/jquery-ui.min.css | 7 -
ui/pages/error.html.tmpl | 2 +
ui/pages/login.html.tmpl | 10 +-
ui/pages/wok-ui.html.tmpl | 13 +-
69 files changed, 625 insertions(+), 124 deletions(-)
create mode 100644 ui/css/jquery-ui.custom.css
create mode 100644 ui/images/favicon.ico
delete mode 100644 ui/images/logo.ico
create mode 100644 ui/libs/bootstrap-select/LICENSE
create mode 100644 ui/libs/bootstrap-select/Makefile.am
create mode 100644 ui/libs/bootstrap-select/bootstrap-select.min.js
create mode 100644 ui/libs/bootstrap/LICENSE
create mode 100644 ui/libs/bootstrap/Makefile.am
create mode 100644 ui/libs/bootstrap/bootstrap.min.js
create mode 100644 ui/libs/es5-shim/LICENSE
create mode 100644 ui/libs/es5-shim/Makefile.am
create mode 100644 ui/libs/es5-shim/es5-shim.min.js
delete mode 100644 ui/libs/jquery-1.10.0.min.js
create mode 100644 ui/libs/jquery-i18n/LICENSE
create mode 100644 ui/libs/jquery-i18n/Makefile.am
create mode 100644 ui/libs/jquery-i18n/jquery.i18n.min.js
delete mode 100644 ui/libs/jquery-ui-i18n.min.js
delete mode 100644 ui/libs/jquery-ui.min.js
create mode 100644 ui/libs/jquery-ui/LICENSE
create mode 100644 ui/libs/jquery-ui/Makefile.am
create mode 100644 ui/libs/jquery-ui/jquery-ui-i18n.min.js
create mode 100644 ui/libs/jquery-ui/jquery-ui.min.js
create mode 100644 ui/libs/jquery-ui/themes/Makefile.am
create mode 100644 ui/libs/jquery-ui/themes/base/Makefile.am
create mode 100644 ui/libs/jquery-ui/themes/base/images/Makefile.am
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_flat_10_000000_40x100.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_222222_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_228ef1_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_ef8c08_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_ffd27a_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/jquery-ui.min.css
create mode 100644 ui/libs/jquery/LICENSE
create mode 100644 ui/libs/jquery/Makefile.am
create mode 100644 ui/libs/jquery/jquery.min.js
delete mode 100644 ui/libs/themes/Makefile.am
delete mode 100644 ui/libs/themes/base/Makefile.am
delete mode 100644 ui/libs/themes/base/images/Makefile.am
delete mode 100644 ui/libs/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_flat_10_000000_40x100.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_222222_256x240.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_228ef1_256x240.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_ef8c08_256x240.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_ffd27a_256x240.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_ffffff_256x240.png
delete mode 100644 ui/libs/themes/base/jquery-ui.min.css
diff --git a/configure.ac b/configure.ac
index 2c76bad..e11a17d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -110,9 +110,15 @@ AC_CONFIG_FILES([
ui/images/theme-default/Makefile
ui/js/Makefile
ui/libs/Makefile
- ui/libs/themes/Makefile
- ui/libs/themes/base/Makefile
- ui/libs/themes/base/images/Makefile
+ ui/libs/bootstrap/Makefile
+ ui/libs/bootstrap-select/Makefile
+ ui/libs/es5-shim/Makefile
+ ui/libs/jquery/Makefile
+ ui/libs/jquery-i18n/Makefile
+ ui/libs/jquery-ui/Makefile
+ ui/libs/jquery-ui/themes/Makefile
+ ui/libs/jquery-ui/themes/base/Makefile
+ ui/libs/jquery-ui/themes/base/images/Makefile
ui/pages/Makefile
ui/pages/websockify/Makefile
contrib/Makefile
diff --git a/ui/css/Makefile.am b/ui/css/Makefile.am
index aeebe02..6f8fe05 100644
--- a/ui/css/Makefile.am
+++ b/ui/css/Makefile.am
@@ -20,7 +20,7 @@ SUBDIRS = fontawesome opensans
EXTRA_DIST = theme-default
cssdir = $(datadir)/wok/ui/css
-dist_css_DATA = theme-default.min.css
+dist_css_DATA = theme-default.min.css jquery-ui.custom.css
theme-default.min.css: theme-default/*.css
cat $^ > $@
diff --git a/ui/css/jquery-ui.custom.css b/ui/css/jquery-ui.custom.css
new file mode 100644
index 0000000..48b44ab
--- /dev/null
+++ b/ui/css/jquery-ui.custom.css
@@ -0,0 +1,203 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.ui-button-primary {
+ border-radius: 8px 8px 8px 8px;
+}
+
+.ui-button-primary.ui-state-default {
+ background: none repeat scroll 0 0 #0066FF;
+ border: 0 none;
+}
+
+.ui-button-primary.ui-state-disabled {
+ background-color: silver;
+ opacity: 1;
+}
+
+.ui-button-primary.ui-state-hover {
+ background: #0044DD;
+}
+
+.ui-button-primary .ui-button-text {
+ padding: 10px 23px;
+ font-size: 13px;
+ color: #EEEEEE;
+}
+
+.ui-button-secondary {
+ border: 1px solid #AAAAAA;
+ border-radius: 5px 5px 5px 5px;
+ cursor: pointer;
+}
+
+.ui-button-secondary.ui-state-default {
+ background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat
+ scroll 0 0 transparent;
+ box-shadow: -2px -2px 2px #EAEAEA, 2px 2px 2px #FFFFFF, 3px 3px 3px white
+ inset, -3px -3px 3px rgba(0, 0, 0, 0.25) inset;
+}
+
+.ui-button-secondary.ui-state-hover {
+ background: linear-gradient(to bottom, #d5d5d5 0%, #eeeeee 100%);
+ box-shadow: -2px -2px 2px #dadada, 2px 2px 2px #fff, 3px 3px 3px white
+ inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
+}
+
+.ui-button-secondary .ui-button-text {
+ font-size: 13px;
+ color: #333333;
+ text-overflow: ellipsis;
+ text-shadow: -1px -1px 1px #AAAAAA, 1px 1px 1px #FFFFFF;
+ white-space: nowrap;
+}
+
+.ui-button-secondary.ui-button-text-only .ui-button-text {
+ padding: 12px 23px 13px 20px;
+}
+
+.ui-button-secondary.ui-button-text-icon-secondary .ui-button-text {
+ padding: 12px 35px 13px 13px;
+}
+
+.ui-button-secondary .ui-button-icon-secondary {
+ padding-right: 5px;
+ width: 15px;
+ height: 15px;
+}
+
+.ui-menu {
+ background: linear-gradient(to bottom, #EEEEEE 0%, #CCCCCC 10px, #CCCCCC
+ 96%, #A5A5A5 100%) repeat scroll 0 0 transparent;
+ padding: 10px 10px 0;
+ width: 250px;
+}
+
+.ui-menu .ui-menu-item a {
+ background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat
+ scroll 0 0 transparent;
+ border: 1px solid #CCCCCC;
+ border-radius: 5px 5px 5px 5px;
+ box-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #EEEEEE;
+ display: block;
+ font-size: 13px;
+ line-height: 38px;
+ margin-bottom: 10px;
+ text-align: center;
+ text-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #FFFFFF;
+ width: 96%;
+}
+
+.ui-menu .ui-menu-item a.ui-state-focus {
+ background: linear-gradient(to bottom, #EEEEEE 0%, #D5D5D5 100%) repeat
+ scroll 0 0 transparent;
+ box-shadow: -1px -1px 1px #BBBBBB, 1px 1px 1px #DDDDDD;
+ margin: 0px 0px 10px 0px;
+}
+
+.ui-menu .ui-menu-item a.red:not([disabled]) {
+ background: linear-gradient(to bottom, #FF3019 0%, #CF0404 100%) repeat
+ scroll 0 0 transparent;
+ border: 1px solid #B10F14;
+ color: #FFFFFF;
+ text-shadow: -1px -1px 1px #9E0505, 1px 1px 1px #FC5D4C;
+}
+
+.ui-menu .ui-menu-item a.red:hover:not([disabled]) {
+ background: linear-gradient(to bottom, #EF2009 0%, #BF0404 100%) repeat
+ scroll 0 0 transparent;
+}
+
+.ui-menu .ui-state-disabled {
+ opacity: 1;
+}
+
+.ui-menu .ui-state-disabled a {
+ color: gray;
+}
+
+.ui-widget-overlay {
+ background: url("../images/theme-default/bg-mask.png") repeat scroll
+ 0 0 transparent;
+ opacity: 1;
+}
+
+.ui-dialog {
+ background: none;
+ background-color: #EEEEEE;
+ border: 2px solid #0F71B4;
+ border-radius: 8px;
+ padding: 0px;
+}
+
+.ui-dialog .ui-dialog-titlebar {
+ border: none;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ background: none;
+ padding: 13px 0px 13px 10px;
+ box-shadow: 0 1px 3px rgba(0,0,0,0.15), 0 -1px 0 rgba(0,0,0,0.05) inset;
+}
+
+.ui-dialog .ui-dialog-title {
+ font-size: 18px;
+ color: #0066CC;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ margin: 4px 0 0;
+ background: none repeat scroll 0 0 #EEEEEE;
+ border: 2px solid #CCCCCC;
+ border-radius: 35px 35px 35px 35px;
+ color: #CCCCCC;
+ cursor: pointer;
+ height: 35px;
+ width: 35px;
+ position: absolute;
+ right: 7px;
+ text-align: center;
+ top: 5px;
+}
+
+.ui-dialog .ui-dialog-titlebar .ui-state-hover {
+ border: 2px solid #444444;
+ color: #444444;
+}
+
+.ui-dialog .ui-dialog-titlebar .ui-button-text {
+ font-size: 24px;
+ font-weight: bold;
+ padding: 0px;
+ text-indent: 0px;
+}
+
+.ui-dialog .ui-dialog-titlebar .ui-button-icon-primary {
+ display: none;
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+ padding: 0px;
+ background-color: transparent;
+ border-width: 0;
+ box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.15);
+}
+
+.ui-dialog .ui-dialog-buttonpane button {
+ cursor: pointer;
+ margin: 0.5em 13px 0.5em 0;
+}
diff --git a/ui/css/opensans/opensans.css b/ui/css/opensans/opensans.css
index 6ab53b4..57a6533 100644
--- a/ui/css/opensans/opensans.css
+++ b/ui/css/opensans/opensans.css
@@ -22,7 +22,7 @@
/* BEGIN Light */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Light.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Light.ttf") format("truetype");
font-weight: 300;
font-style: normal; }
/* END Light */
@@ -30,7 +30,7 @@
/* BEGIN Light Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-LightItalic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-LightItalic.ttf") format("truetype");
font-weight: 300;
font-style: italic; }
/* END Light Italic */
@@ -38,7 +38,7 @@
/* BEGIN Regular */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Regular.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Regular.ttf") format("truetype");
font-weight: normal;
font-style: normal; }
/* END Regular */
@@ -46,7 +46,7 @@
/* BEGIN Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Italic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Italic.ttf") format("truetype");
font-weight: normal;
font-style: italic; }
/* END Italic */
@@ -54,7 +54,7 @@
/* BEGIN Semibold */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Semibold.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Semibold.ttf") format("truetype");
font-weight: 600;
font-style: normal; }
/* END Semibold */
@@ -62,7 +62,7 @@
/* BEGIN Semibold Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-SemiboldItalic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-SemiboldItalic.ttf") format("truetype");
font-weight: 600;
font-style: italic; }
/* END Semibold Italic */
@@ -70,7 +70,7 @@
/* BEGIN Bold */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Bold.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Bold.ttf") format("truetype");
font-weight: bold;
font-style: normal; }
/* END Bold */
@@ -78,7 +78,7 @@
/* BEGIN Bold Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-BoldItalic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-BoldItalic.ttf") format("truetype");
font-weight: bold;
font-style: italic; }
/* END Bold Italic */
@@ -86,7 +86,7 @@
/* BEGIN Extrabold */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-ExtraBold.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-ExtraBold.ttf") format("truetype");
font-weight: 800;
font-style: normal; }
/* END Extrabold */
@@ -94,7 +94,7 @@
/* BEGIN Extrabold Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-ExtraBoldItalic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-ExtraBoldItalic.ttf") format("truetype");
font-weight: 800;
font-style: italic; }
/* END Extrabold Italic */
diff --git a/ui/images/favicon.ico b/ui/images/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..cb3a3dc2f9c9ce0e5d3e14f0adab89c28c729ce0
GIT binary patch
literal 15086
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¥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
literal 0
HcmV?d00001
diff --git a/ui/images/logo.ico b/ui/images/logo.ico
deleted file mode 100644
index 446143f066a60f479b2cb8f8d04ab3c97ff60e56..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1214
zcma)*3rLeu6vyu=X_;nPV)$&PPF)r(wTQ|dTGOUtnOdf0mZ=cR#99xbub1{BqnD9^
z^Z>PV6h)fUny6#CN{3di2P{*h2ek@Oq0a4o*=I}2Iv?krbAR`oKi_vQA0faVCr83o
zF{!X2#Dx$Nz}$(sm^sgR<Jj30yCMGpMl1z837jm3H1$<DU4IV>Tbdw<FM-;Hi<#et
z=I}n~iB^qh8{XzCNyvT<I;$&znmT~?eFXZgAE@Om?1h(6Iq+2e1-ca!zOAO7n3*};
zXq6n?2kF<!f%cez;-Fgx4$e+xo{WR;oqhc_OW;#nF!Zm|JK}m8gi6aC+##`QA5PmJ
zfeZ(o(}%&&1P5#*1vVbnssk~XhN5bNz=T)>5^+BS=V54SJ|^z)5I7%kU;>-skiq*{
z5B^=eF<T)pK9+)bV;9UCK>t-HOi+bkR-wK1xpfXL;S<?ho1pQ5gYzxiHR~=e+XHS(
zYe7QMZb3IjWV72H-JpD~6z(tbgwn1o$D2s!YteWNJS!i9l%iW?+34Lvr*KL(6{_X|
zobEjAb{lD|4qsmYvGF;~r0Aunc#>=c)0W4s|D{#(q9~vaX{rGms=((Wn*~LeWqIu}
zkGvlzwaxjL25hey2bVweu<xK*t+@Oa_)UKTK^x4IwmKMOjm@oL`l)}_NGPy}tdb}w
zHa>H`ji2N7m}Xsj#j7-`#=Dv}`)h&)9th^&^dR%>WH_MB8KcIXVf8p&s1xD|_k)R-
zrk$Z0-|Gf}&4Au$KhU$k?3YR5by~D9M&-q$=ocNz4!IY&p7%OxuJf&+Ei-G(23hU;
zHTLhMtjFR9ExVbPQVLzBFlROcIZ|#jmX6fm_hsVa3XP<aKAeAt8dqp&oBW=V^+d>Q
zkcNnm%Ds?ggd^Rv2~9_o82cv;p6LSBD_g_s-n1uZ8#<EeLwTm~LE9J!Zdo@M&*jFU
zoM+Z%F5)(8$8y`Wz~%Pd;Nlx@aH{<lk}}CcRMRXZMD&%Uhz3Ze$jpg#uec1IlFMPW
MDQ4iZEk#_;cNAJoqyPW_
diff --git a/ui/images/theme-default/Makefile.am b/ui/images/theme-default/Makefile.am
index 336729c..bf594d7 100644
--- a/ui/images/theme-default/Makefile.am
+++ b/ui/images/theme-default/Makefile.am
@@ -17,4 +17,4 @@
imagedir = $(datadir)/wok/ui/images/theme-default
-dist_image_DATA = *.png *.gif
+dist_image_DATA = *.png *.gif *.svg
diff --git a/ui/libs/Makefile.am b/ui/libs/Makefile.am
index 49ad3bb..38af60b 100644
--- a/ui/libs/Makefile.am
+++ b/ui/libs/Makefile.am
@@ -15,8 +15,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-SUBDIRS = themes
-
-jsdir = $(datadir)/wok/ui/libs
-
-dist_js_DATA = $(wildcard *.js) $(NULL)
+SUBDIRS = bootstrap jquery jquery-ui bootstrap-select es5-shim jquery-i18n
diff --git a/ui/libs/bootstrap-select/LICENSE b/ui/libs/bootstrap-select/LICENSE
new file mode 100644
index 0000000..4e7f552
--- /dev/null
+++ b/ui/libs/bootstrap-select/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2014 bootstrap-select
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/ui/libs/bootstrap-select/Makefile.am b/ui/libs/bootstrap-select/Makefile.am
new file mode 100644
index 0000000..df7964e
--- /dev/null
+++ b/ui/libs/bootstrap-select/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+bootstrapselectjsdir = $(datadir)/wok/ui/libs/bootstrap-select
+
+dist_bootstrapselectjs_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/bootstrap-select/bootstrap-select.min.js b/ui/libs/bootstrap-select/bootstrap-select.min.js
new file mode 100644
index 0000000..d770e9b
--- /dev/null
+++ b/ui/libs/bootstrap-select/bootstrap-select.min.js
@@ -0,0 +1,8 @@
+/*!
+ * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/)
+ *
+ * Copyright 2013-2014 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a){"use strict";function b(a,b){return a.toUpperCase().indexOf(b.toUpperCase())>-1}function c(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b.replace(this.re,this.ch)}),b}function d(a){var b={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},c="(?:"+Object.keys(b).join("|")+")",d=new RegExp(c),e=new RegExp(c,"g"),f=null==a?"":""+a;return d.test(f)?f.replace(e,function(a){return b[a]}):f}function e(b,c){var d=arguments,e=b,b=d[0],c=d[1];[].shift.apply(d),"undefined"==typeof b&&(b=e);var g,h=this.each(function(){var e=a(this);if(e.is("select")){var h=e.data("selectpicker"),i="object"==typeof b&&b;if(h){if(i)for(var j in i)i.hasOwnProperty(j)&&(h.options[j]=i[j])}else{var k=a.extend({},f.DEFAULTS,a.fn.selectpicker.defaults||{},e.data(),i);e.data("selectpicker",h=new f(this,k,c))}"string"==typeof b&&(g=h[b]instanceof Function?h[b].apply(h,d):h.options[b])}});return"undefined"!=typeof g?g:h}a.expr[":"].icontains=function(c,d,e){return b(a(c).text(),e[3])},a.expr[":"].aicontains=function(c,d,e){return b(a(c).data("normalizedText")||a(c).text(),e[3])};var f=function(b,c,d){d&&(d.stopPropagation(),d.preventDefault()),this.$element=a(b),this.$newElement=null,this.$button=null,this.$menu=null,this.$lis=null,this.options=c,null===this.options.title&&(this.options.title=this.$element.attr("title")),this.val=f.prototype.val,this.render=f.prototype.render,this.refresh=f.prototype.refresh,this.setStyle=f.prototype.setStyle,this.selectAll=f.prototype.selectAll,this.deselectAll=f.prototype.deselectAll,this.destroy=f.prototype.remove,this.remove=f.prototype.remove,this.show=f.prototype.show,this.hide=f.prototype.hide,this.init()};f.VERSION="1.6.3",f.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results match",countSelectedText:function(a){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){var c=[];return c[0]=1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",c[1]=1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)",c},selectAllText:"Select All",deselectAllText:"Deselect All",multipleSeparator:", ",style:"btn-default",size:"auto",title:null,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,liveSearchPlaceholder:null,actionsBox:!1,iconBase:"glyphicon",tickIcon:"glyphicon-ok",maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1,searchAccentInsensitive:!1},f.prototype={constructor:f,init:function(){var b=this,c=this.$element.attr("id");this.$element.hide(),this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement),this.$menu=this.$newElement.find("> .dropdown-menu"),this.$button=this.$newElement.find("> button"),this.$searchbox=this.$newElement.find("input"),this.options.dropdownAlignRight&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.liHeight(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile()},createDropdown:function(){var b=this.multiple?" show-tick":"",c=this.$element.parent().hasClass("input-group")?" input-group-btn":"",e=this.autofocus?" autofocus":"",f=this.$element.parents().hasClass("form-group-lg")?" btn-lg":this.$element.parents().hasClass("form-group-sm")?" btn-sm":"",g=this.options.header?'<div class="popover-title"><button type="button" class="close" aria-hidden="true">×</button>'+this.options.header+"</div>":"",h=this.options.liveSearch?'<div class="bs-searchbox"><input type="text" class="form-control" autocomplete="off"'+(null===this.options.liveSearchPlaceholder?"":' placeholder="'+d(this.options.liveSearchPlaceholder)+'"')+"></div>":"",i=this.options.actionsBox?'<div class="bs-actionsbox"><div class="btn-group btn-block"><button class="actions-btn bs-select-all btn btn-sm btn-default">'+this.options.selectAllText+'</button><button class="actions-btn bs-deselect-all btn btn-sm btn-default">'+this.options.deselectAllText+"</button></div></div>":"",j='<div class="btn-group bootstrap-select'+b+c+'"><button type="button" class="btn dropdown-toggle form-control selectpicker'+f+'" data-toggle="dropdown"'+e+'><span class="filter-option pull-left"></span> <span class="caret"></span></button><div class="dropdown-menu open">'+g+h+i+'<ul class="dropdown-menu inner selectpicker" role="menu"></ul></div></div>';return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul").append(b),a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menu.find("ul").append(a)},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var b=this,e=[],f=0,g=function(a,b,c){return"<li"+("undefined"!=typeof c?' class="'+c+'"':"")+("undefined"!=typeof b|null===b?' data-original-index="'+b+'"':"")+">"+a+"</li>"},h=function(a,e,f,g){var h=c(d(a));return'<a tabindex="0"'+("undefined"!=typeof e?' class="'+e+'"':"")+("undefined"!=typeof f?' style="'+f+'"':"")+("undefined"!=typeof g?'data-optgroup="'+g+'"':"")+' data-normalized-text="'+h+'">'+a+'<span class="'+b.options.iconBase+" "+b.options.tickIcon+' check-mark"></span></a>'};return this.$element.find("option").each(function(){var c=a(this),d=c.attr("class")||"",i=c.attr("style"),j=c.data("content")?c.data("content"):c.html(),k="undefined"!=typeof c.data("subtext")?'<small class="muted text-muted">'+c.data("subtext")+"</small>":"",l="undefined"!=typeof c.data("icon")?'<span class="'+b.options.iconBase+" "+c.data("icon")+'"></span> ':"",m=c.is(":disabled")||c.parent().is(":disabled"),n=c.index();if(""!==l&&m&&(l="<span>"+l+"</span>"),c.data("content")||(j=l+'<span class="text">'+j+k+"</span>"),!b.options.hideDisabled||!m)if(c.parent().is("optgroup")&&c.data("divider")!==!0){if(0===c.index()){f+=1;var o=c.parent().attr("label"),p="undefined"!=typeof c.parent().data("subtext")?'<small class="muted text-muted">'+c.parent().data("subtext")+"</small>":"",q=c.parent().data("icon")?'<span class="'+b.options.iconBase+" "+c.parent().data("icon")+'"></span> ':"";o=q+'<span class="text">'+o+p+"</span>",0!==n&&e.length>0&&e.push(g("",null,"divider")),e.push(g(o,null,"dropdown-header"))}e.push(g(h(j,"opt "+d,i,f),n))}else e.push(c.data("divider")===!0?g("",n,"divider"):c.data("hidden")===!0?g(h(j,d,i),n,"hidden is-hidden"):g(h(j,d,i),n))}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),a(e.join(""))},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c=this;b!==!1&&this.$element.find("option").each(function(b){c.setDisabled(b,a(this).is(":disabled")||a(this).parent().is(":disabled")),c.setSelected(b,a(this).is(":selected"))}),this.tabIndex();var d=this.options.hideDisabled?":not([disabled])":"",e=this.$element.find("option:selected"+d).map(function(){var b,d=a(this),e=d.data("icon")&&c.options.showIcon?'<i class="'+c.options.iconBase+" "+d.data("icon")+'"></i> ':"";return b=c.options.showSubtext&&d.attr("data-subtext")&&!c.multiple?' <small class="muted text-muted">'+d.data("subtext")+"</small>":"",d.data("content")&&c.options.showContent?d.data("content"):"undefined"!=typeof d.attr("title")?d.attr("title"):e+d.html()+b}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){d=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+d).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}this.options.title=this.$element.attr("title"),"static"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(f.replace(/<[^>]*>?/g,""))),this.$newElement.find(".filter-option").html(f)},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(){if(this.options.size!==!1){var a=this.$menu.parent().clone().find("> .dropdown-toggle").prop("autofocus",!1).end().appendTo("body"),b=a.addClass("open").find("> .dropdown-menu"),c=b.find("li").not(".divider").not(".dropdown-header").filter(":visible").children("a").outerHeight(),d=this.options.header?b.find(".popover-title").outerHeight():0,e=this.options.liveSearch?b.find(".bs-searchbox").outerHeight():0,f=this.options.actionsBox?b.find(".bs-actionsbox").outerHeight():0;a.remove(),this.$newElement.data("liHeight",c).data("headerHeight",d).data("searchHeight",e).data("actionsHeight",f)}},setSize:function(){this.findLis();var b,c,d,e=this,f=this.$menu,g=f.find(".inner"),h=this.$newElement.outerHeight(),i=this.$newElement.data("liHeight"),j=this.$newElement.data("headerHeight"),k=this.$newElement.data("searchHeight"),l=this.$newElement.data("actionsHeight"),m=this.$lis.filter(".divider").outerHeight(!0),n=parseInt(f.css("padding-top"))+parseInt(f.css("padding-bottom"))+parseInt(f.css("border-top-width"))+parseInt(f.css("border-bottom-width")),o=this.options.hideDisabled?", .disabled":"",p=a(window),q=n+parseInt(f.css("margin-top"))+parseInt(f.css("margin-bottom"))+2,r=function(){c=e.$newElement.offset().top-p.scrollTop(),d=p.height()-c-h};if(r(),this.options.header&&f.css("padding-top",0),"auto"==this.options.size){var s=function(){var a,h=e.$lis.not(".hidden");r(),b=d-q,e.options.dropupAuto&&e.$newElement.toggleClass("dropup",c>d&&b-q<f.height()),e.$newElement.hasClass("dropup")&&(b=c-q),a=h.length+h.filter(".dropdown-header").length>3?3*i+q-2:0,f.css({"max-height":b+"px",overflow:"hidden","min-height":a+j+k+l+"px"}),g.css({"max-height":b-j-k-l-n+"px","overflow-y":"auto","min-height":Math.max(a-n,0)+"px"})};s(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",s),a(window).off("resize.getSize").on("resize.getSize",s),a(window).off("scroll.getSize").on("scroll.getSize",s)}else if(this.options.size&&"auto"!=this.options.size&&f.find("li"+o).length>this.options.size){var t=this.$lis.not(".divider"+o).find(" > *").slice(0,this.options.size).last().parent().index(),u=this.$lis.slice(0,t+1).filter(".divider").length;b=i*this.options.size+u*m+n,e.options.dropupAuto&&this.$newElement.toggleClass("dropup",c>d&&b<f.height()),f.css({"max-height":b+j+k+l+"px",overflow:"hidden"}),g.css({"max-height":b-n+"px","overflow-y":"auto"})}},setWidth:function(){if("auto"==this.options.width){this.$menu.css("min-width","0");var a=this.$newElement.clone().appendTo("body"),b=a.find("> .dropdown-menu").css("width"),c=a.css("width","auto").find("> button").css("width");a.remove(),this.$newElement.css("width",Math.max(parseInt(b),parseInt(c))+"px")}else"fit"==this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width",""));this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement.removeClass("fit-width")},selectPosition:function(){var b,c,d=this,e="<div />",f=a(e),g=function(a){f.addClass(a.attr("class").replace(/form-control/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),c=a.hasClass("dropup")?0:a[0].offsetHeight,f.css({top:b.top+c,left:b.left,width:a[0].offsetWidth,position:"absolute"})};this.$newElement.on("click",function(){d.isDisabled()||(g(a(this)),f.appendTo(d.options.container),f.toggleClass("open",!a(this).hasClass("open")),f.append(d.$menu))}),a(window).resize(function(){g(d.$newElement)}),a(window).on("scroll",function(){g(d.$newElement)}),a("html").on("click",function(b){a(b.target).closest(d.$newElement).length<1&&f.removeClass("open")})},setSelected:function(a,b){this.findLis(),this.$lis.filter('[data-original-index="'+a+'"]').toggleClass("selected",b)},setDisabled:function(a,b){this.findLis(),b?this.$lis.filter('[data-original-index="'+a+'"]').addClass("disabled").find("a").attr("href","#").attr("tabindex",-1):this.$lis.filter('[data-original-index="'+a+'"]').removeClass("disabled").find("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element.is(":disabled")},checkDisabled:function(){var a=this;this.isDisabled()?this.$button.addClass("disabled").attr("tabindex",-1):(this.$button.hasClass("disabled")&&this.$button.removeClass("disabled"),-1==this.$button.attr("tabindex")&&(this.$element.data("tabindex")||this.$button.removeAttr("tabindex"))),this.$button.click(function(){return!a.isDisabled()})},tabIndex:function(){this.$element.is("[tabindex]")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex")))},clickListener:function(){var b=this;this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),this.$newElement.on("click",function(){b.setSize(),b.options.liveSearch||b.multiple||setTimeout(function(){b.$menu.find(".selected a").focus()},10)}),this.$menu.on("click","li a",function(c){var d=a(this),e=d.parent().data("originalIndex"),f=b.$element.val(),g=b.$element.prop("selectedIndex");if(b.multiple&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var h=b.$element.find("option"),i=h.eq(e),j=i.prop("selected"),k=i.parent("optgroup"),l=b.options.maxOptions,m=k.data("maxOptions")||!1;if(b.multiple){if(i.prop("selected",!j),b.setSelected(e,!j),d.blur(),l!==!1||m!==!1){var n=l<h.filter(":selected").length,o=m<k.find("option:selected").length;if(l&&n||m&&o)if(l&&1==l)h.prop("selected",!1),i.prop("selected",!0),b.$menu.find(".selected").removeClass("selected"),b.setSelected(e,!0);else if(m&&1==m){k.find("option:selected").prop("selected",!1),i.prop("selected",!0);var p=d.data("optgroup");b.$menu.find(".selected").has('a[data-optgroup="'+p+'"]').removeClass("selected"),b.setSelected(e,!0)}else{var q="function"==typeof b.options.maxOptionsText?b.options.maxOptionsText(l,m):b.options.maxOptionsText,r=q[0].replace("{n}",l),s=q[1].replace("{n}",m),t=a('<div class="notify"></div>');q[2]&&(r=r.replace("{var}",q[2][l>1?0:1]),s=s.replace("{var}",q[2][m>1?0:1])),i.prop("selected",!1),b.$menu.append(t),l&&n&&(t.append(a("<div>"+r+"</div>")),b.$element.trigger("maxReached.bs.select")),m&&o&&(t.append(a("<div>"+s+"</div>")),b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(e,!1)},10),t.delay(750).fadeOut(300,function(){a(this).remove()})}}}else h.prop("selected",!1),i.prop("selected",!0),b.$menu.find(".selected").removeClass("selected"),b.setSelected(e,!0);b.multiple?b.options.liveSearch&&b.$searchbox.focus():b.$button.focus(),(f!=b.$element.val()&&b.multiple||g!=b.$element.prop("selectedIndex")&&!b.multiple)&&b.$element.change()}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(a){a.currentTarget==this&&(a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus())}),this.$menu.on("click","li.divider, li.dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.focus()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).is(".bs-select-all")?b.selectAll():b.deselectAll(),b.$element.change()}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var b=this,e=a('<li class="no-results"></li>');this.$newElement.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){b.$menu.find(".active").removeClass("active"),b.$searchbox.val()&&(b.$searchbox.val(""),b.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),b.multiple||b.$menu.find(".selected").addClass("active"),setTimeout(function(){b.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){b.$searchbox.val()?(b.options.searchAccentInsensitive?b.$lis.not(".is-hidden").removeClass("hidden").find("a").not(":aicontains("+c(b.$searchbox.val())+")").parent().addClass("hidden"):b.$lis.not(".is-hidden").removeClass("hidden").find("a").not(":icontains("+b.$searchbox.val()+")").parent().addClass("hidden"),b.$menu.find("li").filter(":visible:not(.no-results)").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(b.options.noneResultsText+' "'+d(b.$searchbox.val())+'"').show(),b.$menu.find("li").last().after(e))):(b.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),b.$menu.find("li.active").removeClass("active"),b.$menu.find("li").filter(":visible:not(.divider)").eq(0).addClass("active").find("a").focus(),a(this).focus()})},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},selectAll:function(){this.findLis(),this.$lis.not(".divider").not(".disabled").not(".selected").filter(":visible").find("a").click()},deselectAll:function(){this.findLis(),this.$lis.not(".divider").not(".disabled").filter(".selected").filter(":visible").find("a").click()},keydown:function(b){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a("[role=menu] li a",n),l=o.$menu.parent().hasClass("open"),!l&&/([0-9]|[A-z])/.test(String.fromCharCode(b.keyCode))&&(o.options.container?o.$newElement.trigger("click"):(o.setSize(),o.$menu.parent().addClass("open"),l=!0),o.$searchbox.focus()),o.options.liveSearch&&(/(^9$|27)/.test(b.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(b.preventDefault(),o.$menu.parent().removeClass("open"),o.$button.focus()),d=a("[role=menu] li:not(.divider):not(.dropdown-header):visible",n),m.val()||/(38|40)/.test(b.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$newElement.find("li").filter(o.options.searchAccentInsensitive?":aicontains("+c(p[b.keyCode])+")":":icontains("+p[b.keyCode]+")"))),d.length){if(/(38|40)/.test(b.keyCode.toString(10)))e=d.index(d.filter(":focus")),g=d.parent(":not(.disabled):visible").first().index(),h=d.parent(":not(.disabled):visible").last().index(),f=d.eq(e).parent().nextAll(":not(.disabled):visible").eq(0).index(),i=d.eq(e).parent().prevAll(":not(.disabled):visible").eq(0).index(),j=d.eq(f).parent().prevAll(":not(.disabled):visible").eq(0).index(),o.options.liveSearch&&(d.each(function(b){a(this).is(":not(.disabled)")&&a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.filter(":not(.disabled):visible").first().data("index"),h=d.filter(":not(.disabled):visible").last().data("index"),f=d.eq(e).nextAll(":not(.disabled):visible").eq(0).data("index"),i=d.eq(e).prevAll(":not(.disabled):visible").eq(0).data("index"),j=d.eq(f).prevAll(":not(.disabled):visible").eq(0).data("index")),k=m.data("prevIndex"),38==b.keyCode&&(o.options.liveSearch&&(e-=1),e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)),40==b.keyCode&&(o.options.liveSearch&&(e+=1),-1==e&&(e=0),e!=j&&f>e&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(b.preventDefault(),m.is(".dropdown-toggle")||(d.removeClass("active"),d.eq(e).addClass("active").find("a").focus(),m.focus())):d.eq(e).focus();else if(!m.is("input")){var q,r,s=[];d.each(function(){a(this).parent().is(":not(.disabled)")&&a.trim(a(this).text().toLowerCase()).substring(0,1)==p[b.keyCode]&&s.push(a(this).parent().index())}),q=a(document).data("keycount"),q++,a(document).data("keycount",q),r=a.trim(a(":focus").text().toLowerCase()).substring(0,1),r!=p[b.keyCode]?(q=1,a(document).data("keycount",q)):q>=s.length&&(a(document).data("keycount",0),q>s.length&&(q=1)),d.eq(s[q-1]).focus()}(/(13|32)/.test(b.keyCode.toString(10))||/(^9$)/.test(b.keyCode.toString(10))&&o.options.selectOnTab)&&l&&(/(32)/.test(b.keyCode.toString(10))||b.preventDefault(),o.options.liveSearch?/(32)/.test(b.keyCode.toString(10))||(o.$menu.find(".active a").click(),m.focus()):a(":focus").click(),a(document).data("keycount",0)),(/(^9$|27)/.test(b.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(b.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.addClass("mobile-device").appendTo(this.$newElement),this.options.container&&this.$menu.hide()},refresh:function(){this.$lis=null,this.reloadLi(),this.render(),this.setWidth(),this.setStyle(),this.checkDisabled(),this.liHeight()},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()}};var g=a.fn.selectpicker;a.fn.selectpicker=e,a.fn.selectpicker.Constructor=f,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=g,this},a(document).data("keycount",0).on("keydown",".bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bs-searchbox input",f.prototype.keydown).on("focusin.modal",".bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bs-searchbox input",function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);e.call(b,b.data())})})}(jQuery);
+//# sourceMappingURL=bootstrap-select.js.map
\ No newline at end of file
diff --git a/ui/libs/bootstrap/LICENSE b/ui/libs/bootstrap/LICENSE
new file mode 100644
index 0000000..9a683e3
--- /dev/null
+++ b/ui/libs/bootstrap/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Twitter, Inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/ui/libs/bootstrap/Makefile.am b/ui/libs/bootstrap/Makefile.am
new file mode 100644
index 0000000..da746a1
--- /dev/null
+++ b/ui/libs/bootstrap/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+bootstrapjsdir = $(datadir)/wok/ui/libs/bootstrap
+
+dist_bootstrapjs_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/bootstrap/bootstrap.min.js b/ui/libs/bootstrap/bootstrap.min.js
new file mode 100644
index 0000000..133aeec
--- /dev/null
+++ b/ui/libs/bootstrap/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),
+d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/ui/libs/es5-shim/LICENSE b/ui/libs/es5-shim/LICENSE
new file mode 100644
index 0000000..3dbd7de
--- /dev/null
+++ b/ui/libs/es5-shim/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (C) 2009-2014 Kristopher Michael Kowal and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/ui/libs/es5-shim/Makefile.am b/ui/libs/es5-shim/Makefile.am
new file mode 100644
index 0000000..0d40e3d
--- /dev/null
+++ b/ui/libs/es5-shim/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+es5shimdir = $(datadir)/wok/ui/libs/es5-shim
+
+dist_es5shim_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/es5-shim/es5-shim.min.js b/ui/libs/es5-shim/es5-shim.min.js
new file mode 100644
index 0000000..f05f5c7
--- /dev/null
+++ b/ui/libs/es5-shim/es5-shim.min.js
@@ -0,0 +1,7 @@
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.1.10/LICENSE
+ */
+(function(e,t){"use strict";if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){var e=Array;var t=e.prototype;var r=Object;var n=r.prototype;var a=Function.prototype;var i=String;var o=i.prototype;var l=Number;var u=l.prototype;var f=t.slice;var s=t.splice;var c=t.push;var v=t.unshift;var p=t.concat;var h=a.call;var g=Math.max;var y=Math.min;var d=n.toString;var w=typeof Symbol==="function"&&typeof Symbol.toStringTag==="symbol";var m;var b=Function.prototype.toString,T=function Me(e){try{b.call(e);return true}catch(t){return false}},x="[object Function]",O="[object GeneratorFunction]";m=function Fe(e){if(typeof e!=="function"){return false}if(w){return T(e)}var t=d.call(e);return t===x||t===O};var S;var j=RegExp.prototype.exec,E=function Re(e){try{j.call(e);return true}catch(t){return false}},I="[object RegExp]";S=function $e(e){if(typeof e!=="object"){return false}return w?E(e):d.call(e)===I};var D;var N=String.prototype.valueOf,k=function Ae(e){try{N.call(e);return true}catch(t){return false}},M="[object String]";D=function Ue(e){if(typeof e==="string"){return true}if(typeof e!=="object"){return false}return w?k(e):d.call(e)===M};var F=function(e){var t=r.defineProperty&&function(){try{var e={};r.defineProperty(e,"x",{enumerable:false,value:e});for(var t in e){return false}return e.x===e}catch(n){return false}}();var n;if(t){n=function(e,t,n,a){if(!a&&t in e){return}r.defineProperty(e,t,{configurable:true,enumerable:false,writable:true,value:n})}}else{n=function(e,t,r,n){if(!n&&t in e){return}e[t]=r}}return function a(t,r,i){for(var o in r){if(e.call(r,o)){n(t,o,r[o],i)}}}}(n.hasOwnProperty);var R=function Ce(e){var t=typeof e;return e===null||t!=="object"&&t!=="function"};var $={ToInteger:function Pe(e){var t=+e;if(t!==t){t=0}else if(t!==0&&t!==1/0&&t!==-(1/0)){t=(t>0||-1)*Math.floor(Math.abs(t))}return t},ToPrimitive:function Ze(e){var t,r,n;if(R(e)){return e}r=e.valueOf;if(m(r)){t=r.call(e);if(R(t)){return t}}n=e.toString;if(m(n)){t=n.call(e);if(R(t)){return t}}throw new TypeError},ToObject:function(e){if(e==null){throw new TypeError("can't convert "+e+" to object")}return r(e)},ToUint32:function Je(e){return e>>>0}};var A=function ze(){};F(a,{bind:function Be(e){var t=this;if(!m(t)){throw new TypeError("Function.prototype.bind called on incompatible "+t)}var n=f.call(arguments,1);var a;var i=function(){if(this instanceof a){var i=t.apply(this,p.call(n,f.call(arguments)));if(r(i)===i){return i}return this}else{return t.apply(e,p.call(n,f.call(arguments)))}};var o=g(0,t.length-n.length);var l=[];for(var u=0;u<o;u++){c.call(l,"$"+u)}a=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this, arguments); }")(i);if(t.prototype){A.prototype=t.prototype;a.prototype=new A;A.prototype=null}return a}});var U=h.bind(n.hasOwnProperty);var C=h.bind(n.toString);var P=h.bind(o.slice);var Z=h.bind(o.split);var J=e.isArray||function Ge(e){return C(e)==="[object Array]"};var z=[].unshift(0)!==1;F(t,{unshift:function(){v.apply(this,arguments);return this.length}},z);F(e,{isArray:J});var B=r("a");var G=B[0]!=="a"||!(0 in B);var H=function He(e){var t=true;var r=true;if(e){e.call("foo",function(e,r,n){if(typeof n!=="object"){t=false}});e.call([1],function(){"use strict";r=typeof this==="string"},"x")}return!!e&&t&&r};F(t,{forEach:function Le(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=-1;var a=r.length>>>0;var i;if(arguments.length>1){i=arguments[1]}if(!m(e)){throw new TypeError("Array.prototype.forEach callback must be a function")}while(++n<a){if(n in r){if(typeof i!=="undefined"){e.call(i,r[n],n,t)}else{e(r[n],n,t)}}}}},!H(t.forEach));F(t,{map:function Xe(t){var r=$.ToObject(this);var n=G&&D(this)?Z(this,""):r;var a=n.length>>>0;var i=e(a);var o;if(arguments.length>1){o=arguments[1]}if(!m(t)){throw new TypeError("Array.prototype.map callback must be a function")}for(var l=0;l<a;l++){if(l in n){if(typeof o!=="undefined"){i[l]=t.call(o,n[l],l,r)}else{i[l]=t(n[l],l,r)}}}return i}},!H(t.map));F(t,{filter:function Ye(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;var a=[];var i;var o;if(arguments.length>1){o=arguments[1]}if(!m(e)){throw new TypeError("Array.prototype.filter callback must be a function")}for(var l=0;l<n;l++){if(l in r){i=r[l];if(typeof o==="undefined"?e(i,l,t):e.call(o,i,l,t)){c.call(a,i)}}}return a}},!H(t.filter));F(t,{every:function qe(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;var a;if(arguments.length>1){a=arguments[1]}if(!m(e)){throw new TypeError("Array.prototype.every callback must be a function")}for(var i=0;i<n;i++){if(i in r&&!(typeof a==="undefined"?e(r[i],i,t):e.call(a,r[i],i,t))){return false}}return true}},!H(t.every));F(t,{some:function Ke(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;var a;if(arguments.length>1){a=arguments[1]}if(!m(e)){throw new TypeError("Array.prototype.some callback must be a function")}for(var i=0;i<n;i++){if(i in r&&(typeof a==="undefined"?e(r[i],i,t):e.call(a,r[i],i,t))){return true}}return false}},!H(t.some));var L=false;if(t.reduce){L=typeof t.reduce.call("es5",function(e,t,r,n){return n})==="object"}F(t,{reduce:function Qe(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;if(!m(e)){throw new TypeError("Array.prototype.reduce callback must be a function")}if(n===0&&arguments.length===1){throw new TypeError("reduce of empty array with no initial value")}var a=0;var i;if(arguments.length>=2){i=arguments[1]}else{do{if(a in r){i=r[a++];break}if(++a>=n){throw new TypeError("reduce of empty array with no initial value")}}while(true)}for(;a<n;a++){if(a in r){i=e(i,r[a],a,t)}}return i}},!L);var X=false;if(t.reduceRight){X=typeof t.reduceRight.call("es5",function(e,t,r,n){return n})==="object"}F(t,{reduceRight:function Ve(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;if(!m(e)){throw new TypeError("Array.prototype.reduceRight callback must be a function")}if(n===0&&arguments.length===1){throw new TypeError("reduceRight of empty array with no initial value")}var a;var i=n-1;if(arguments.length>=2){a=arguments[1]}else{do{if(i in r){a=r[i--];break}if(--i<0){throw new TypeError("reduceRight of empty array with no initial value")}}while(true)}if(i<0){return a}do{if(i in r){a=e(a,r[i],i,t)}}while(i--);return a}},!X);var Y=t.indexOf&&[0,1].indexOf(1,2)!==-1;F(t,{indexOf:function We(e){var t=G&&D(this)?Z(this,""):$.ToObject(this);var r=t.length>>>0;if(r===0){return-1}var n=0;if(arguments.length>1){n=$.ToInteger(arguments[1])}n=n>=0?n:g(0,r+n);for(;n<r;n++){if(n in t&&t[n]===e){return n}}return-1}},Y);var q=t.lastIndexOf&&[0,1].lastIndexOf(0,-3)!==-1;F(t,{lastIndexOf:function _e(e){var t=G&&D(this)?Z(this,""):$.ToObject(this);var r=t.length>>>0;if(r===0){return-1}var n=r-1;if(arguments.length>1){n=y(n,$.ToInteger(arguments[1]))}n=n>=0?n:r-Math.abs(n);for(;n>=0;n--){if(n in t&&e===t[n]){return n}}return-1}},q);var K=function(){var e=[1,2];var t=e.splice();return e.length===2&&J(t)&&t.length===0}();F(t,{splice:function et(e,t){if(arguments.length===0){return[]}else{return s.apply(this,arguments)}}},!K);var Q=function(){var e={};t.splice.call(e,0,0,1);return e.length===1}();F(t,{splice:function tt(e,t){if(arguments.length===0){return[]}var r=arguments;this.length=g($.ToInteger(this.length),0);if(arguments.length>0&&typeof t!=="number"){r=f.call(arguments);if(r.length<2){c.call(r,this.length-e)}else{r[1]=$.ToInteger(t)}}return s.apply(this,r)}},!Q);var V=function(){var t=new e(1e5);t[8]="x";t.splice(1,1);return t.indexOf("x")===7}();var W=function(){var e=256;var t=[];t[e]="a";t.splice(e+1,0,"b");return t[e]==="a"}();F(t,{splice:function rt(e,t){var r=$.ToObject(this);var n=[];var a=$.ToUint32(r.length);var o=$.ToInteger(e);var l=o<0?g(a+o,0):y(o,a);var u=y(g($.ToInteger(t),0),a-l);var s=0;var c;while(s<u){c=i(l+s);if(U(r,c)){n[s]=r[c]}s+=1}var v=f.call(arguments,2);var p=v.length;var h;if(p<u){s=l;while(s<a-u){c=i(s+u);h=i(s+p);if(U(r,c)){r[h]=r[c]}else{delete r[h]}s+=1}s=a;while(s>a-u+p){delete r[s-1];s-=1}}else if(p>u){s=a-u;while(s>l){c=i(s+u-1);h=i(s+p-1);if(U(r,c)){r[h]=r[c]}else{delete r[h]}s-=1}}s=l;for(var d=0;d<v.length;++d){r[s]=v[d];s+=1}r.length=a-u+p;return n}},!V||!W);var _=!{toString:null}.propertyIsEnumerable("toString");var ee=function(){}.propertyIsEnumerable("prototype");var te=!U("x","0");var re=function(e){var t=e.constructor;return t&&t.prototype===e};var ne={$window:true,$console:true,$parent:true,$self:true,$frames:true,$frameElement:true,$webkitIndexedDB:true,$webkitStorageInfo:true};var ae=function(){if(typeof window==="undefined"){return false}for(var e in window){if(!ne["$"+e]&&U(window,e)&&window[e]!==null&&typeof window[e]==="object"){try{re(window[e])}catch(t){return true}}}return false}();var ie=function(e){if(typeof window==="undefined"||!ae){return re(e)}try{return re(e)}catch(t){return false}};var oe=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];var le=oe.length;var ue=function nt(e){var t=C(e);var r=t==="[object Arguments]";if(!r){r=!J(e)&&e!==null&&typeof e==="object"&&typeof e.length==="number"&&e.length>=0&&m(e.callee)}return r};F(r,{keys:function at(e){var t=m(e);var r=ue(e);var n=e!==null&&typeof e==="object";var a=n&&D(e);if(!n&&!t&&!r){throw new TypeError("Object.keys called on a non-object")}var o=[];var l=ee&&t;if(a&&te||r){for(var u=0;u<e.length;++u){c.call(o,i(u))}}if(!r){for(var f in e){if(!(l&&f==="prototype")&&U(e,f)){c.call(o,i(f))}}}if(_){var s=ie(e);for(var v=0;v<le;v++){var p=oe[v];if(!(s&&p==="constructor")&&U(e,p)){c.call(o,p)}}}return o}});var fe=r.keys&&function(){return r.keys(arguments).length===2}(1,2);var se=r.keys;F(r,{keys:function it(e){if(ue(e)){return se(f.call(e))}else{return se(e)}}},!fe);var ce=-621987552e5;var ve="-000001";var pe=Date.prototype.toISOString&&new Date(ce).toISOString().indexOf(ve)===-1;var he=Date.prototype.toISOString&&new Date(-1).toISOString()!=="1969-12-31T23:59:59.999Z";F(Date.prototype,{toISOString:function ot(){var e,t,r,n,a;if(!isFinite(this)){throw new RangeError("Date.prototype.toISOString called on non-finite value.")}n=this.getUTCFullYear();a=this.getUTCMonth();n+=Math.floor(a/12);a=(a%12+12)%12;e=[a+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()];n=(n<0?"-":n>9999?"+":"")+P("00000"+Math.abs(n),0<=n&&n<=9999?-4:-6);t=e.length;while(t--){r=e[t];if(r<10){e[t]="0"+r}}return n+"-"+f.call(e,0,2).join("-")+"T"+f.call(e,2).join(":")+"."+P("000"+this.getUTCMilliseconds(),-3)+"Z"}},pe||he);var ge=function(){try{return Date.prototype.toJSON&&new Date(NaN).toJSON()===null&&new Date(ce).toJSON().indexOf(ve)!==-1&&Date.prototype.toJSON.call({toISOString:function(){return true}})}catch(e){return false}}();if(!ge){Date.prototype.toJSON=function lt(e){var t=r(this);var n=$.ToPrimitive(t);if(typeof n==="number"&&!isFinite(n)){return null}var a=t.toISOString;if(!m(a)){throw new TypeError("toISOString property is not callable")}return a.call(t)}}var ye=Date.parse("+033658-09-27T01:46:40.000Z")===1e15;var de=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z"));var we=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(!Date.parse||we||de||!ye){Date=function(e){var t=function s(r,n,a,o,l,u,f){var s=arguments.length;var c;if(this instanceof e){c=s===1&&i(r)===r?new e(t.parse(r)):s>=7?new e(r,n,a,o,l,u,f):s>=6?new e(r,n,a,o,l,u):s>=5?new e(r,n,a,o,l):s>=4?new e(r,n,a,o):s>=3?new e(r,n,a):s>=2?new e(r,n):s>=1?new e(r):new e}else{c=e.apply(this,arguments)}F(c,{constructor:t},true);return c};var r=new RegExp("^"+"(\\d{4}|[+-]\\d{6})"+"(?:-(\\d{2})"+"(?:-(\\d{2})"+"(?:"+"T(\\d{2})"+":(\\d{2})"+"(?:"+":(\\d{2})"+"(?:(\\.\\d{1,}))?"+")?"+"("+"Z|"+"(?:"+"([-+])"+"(\\d{2})"+":(\\d{2})"+")"+")?)?)?)?"+"$");var n=[0,31,59,90,120,151,181,212,243,273,304,334,365];var a=function c(e,t){var r=t>1?1:0;return n[t]+Math.floor((e-1969+r)/4)-Math.floor((e-1901+r)/100)+Math.floor((e-1601+r)/400)+365*(e-1970)};var o=function v(t){return l(new e(1970,0,1,0,0,0,t))};for(var u in e){if(U(e,u)){t[u]=e[u]}}F(t,{now:e.now,UTC:e.UTC},true);t.prototype=e.prototype;F(t.prototype,{constructor:t},true);var f=function p(t){var n=r.exec(t);if(n){var i=l(n[1]),u=l(n[2]||1)-1,f=l(n[3]||1)-1,s=l(n[4]||0),c=l(n[5]||0),v=l(n[6]||0),p=Math.floor(l(n[7]||0)*1e3),h=Boolean(n[4]&&!n[8]),g=n[9]==="-"?1:-1,y=l(n[10]||0),d=l(n[11]||0),w;if(s<(c>0||v>0||p>0?24:25)&&c<60&&v<60&&p<1e3&&u>-1&&u<12&&y<24&&d<60&&f>-1&&f<a(i,u+1)-a(i,u)){w=((a(i,u)+f)*24+s+y*g)*60;w=((w+c+d*g)*60+v)*1e3+p;if(h){w=o(w)}if(-864e13<=w&&w<=864e13){return w}}return NaN}return e.parse.apply(this,arguments)};F(t,{parse:f});return t}(Date)}if(!Date.now){Date.now=function ut(){return(new Date).getTime()}}var me=u.toFixed&&(8e-5.toFixed(3)!=="0.000"||.9.toFixed(0)!=="1"||1.255.toFixed(2)!=="1.25"||0xde0b6b3a7640080.toFixed(0)!=="1000000000000000128");var be={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function ft(e,t){var r=-1;var n=t;while(++r<be.size){n+=e*be.data[r];be.data[r]=n%be.base;n=Math.floor(n/be.base)}},divide:function st(e){var t=be.size,r=0;while(--t>=0){r+=be.data[t];be.data[t]=Math.floor(r/e);r=r%e*be.base}},numToString:function ct(){var e=be.size;var t="";while(--e>=0){if(t!==""||e===0||be.data[e]!==0){var r=i(be.data[e]);if(t===""){t=r}else{t+=P("0000000",0,7-r.length)+r}}}return t},pow:function vt(e,t,r){return t===0?r:t%2===1?vt(e,t-1,r*e):vt(e*e,t/2,r)},log:function pt(e){var t=0;var r=e;while(r>=4096){t+=12;r/=4096}while(r>=2){t+=1;r/=2}return t}};F(u,{toFixed:function ht(e){var t,r,n,a,o,u,f,s;t=l(e);t=t!==t?0:Math.floor(t);if(t<0||t>20){throw new RangeError("Number.toFixed called with invalid number of decimals")}r=l(this);if(r!==r){return"NaN"}if(r<=-1e21||r>=1e21){return i(r)}n="";if(r<0){n="-";r=-r}a="0";if(r>1e-21){o=be.log(r*be.pow(2,69,1))-69;u=o<0?r*be.pow(2,-o,1):r/be.pow(2,o,1);u*=4503599627370496;o=52-o;if(o>0){be.multiply(0,u);f=t;while(f>=7){be.multiply(1e7,0);f-=7}be.multiply(be.pow(10,f,1),0);f=o-1;while(f>=23){be.divide(1<<23);f-=23}be.divide(1<<f);be.multiply(1,1);be.divide(2);a=be.numToString()}else{be.multiply(0,u);be.multiply(1<<-o,0);a=be.numToString()+P("0.00000000000000000000",2,2+t)}}if(t>0){s=a.length;if(s<=t){a=n+P("0.0000000000000000000",0,t-s+2)+a}else{a=n+P(a,0,s-t)+"."+P(a,s-t)}}else{a=n+a}return a}},me);if("ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"test".split(/(?:)/,-1).length!==4||"".split(/.?/).length||".".split(/()()/).length>1){(function(){var e=typeof/()??/.exec("")[1]==="undefined";o.split=function(t,r){var n=this;if(typeof t==="undefined"&&r===0){return[]}if(!S(t)){return Z(this,t,r)}var a=[];var i=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),o=0,l,u,s,v;var p=new RegExp(t.source,i+"g");n+="";if(!e){l=new RegExp("^"+p.source+"$(?!\\s)",i)}var h=typeof r==="undefined"?-1>>>0:$.ToUint32(r);u=p.exec(n);while(u){s=u.index+u[0].length;if(s>o){c.call(a,P(n,o,u.index));if(!e&&u.length>1){u[0].replace(l,function(){for(var e=1;e<arguments.length-2;e++){if(typeof arguments[e]==="undefined"){u[e]=void 0}}})}if(u.length>1&&u.index<n.length){c.apply(a,f.call(u,1))}v=u[0].length;o=s;if(a.length>=h){break}}if(p.lastIndex===u.index){p.lastIndex++}u=p.exec(n)}if(o===n.length){if(v||!p.test("")){c.call(a,"")}}else{c.call(a,P(n,o))}return a.length>h?P(a,0,h):a}})()}else if("0".split(void 0,0).length){o.split=function gt(e,t){if(typeof e==="undefined"&&t===0){return[]}return Z(this,e,t)}}var Te=o.replace;var xe=function(){var e=[];"x".replace(/x(.)?/g,function(t,r){c.call(e,r)});return e.length===1&&typeof e[0]==="undefined"}();if(!xe){o.replace=function yt(e,t){var r=m(t);var n=S(e)&&/\)[*?]/.test(e.source);if(!r||!n){return Te.call(this,e,t)}else{var a=function(r){var n=arguments.length;var a=e.lastIndex;e.lastIndex=0;var i=e.exec(r)||[];e.lastIndex=a;c.call(i,arguments[n-2],arguments[n-1]);return t.apply(this,i)};return Te.call(this,e,a)}}}var Oe=o.substr;var Se="".substr&&"0b".substr(-1)!=="b";F(o,{substr:function dt(e,t){var r=e;if(e<0){r=g(this.length+e,0)}return Oe.call(this,r,t)}},Se);var je=" \n\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003"+"\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028"+"\u2029\ufeff";var Ee="\u200b";var Ie="["+je+"]";var De=new RegExp("^"+Ie+Ie+"*");var Ne=new RegExp(Ie+Ie+"*$");var ke=o.trim&&(je.trim()||!Ee.trim());F(o,{trim:function wt(){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}return i(this).replace(De,"").replace(Ne,"")}},ke);if(parseInt(je+"08")!==8||parseInt(je+"0x16")!==22){parseInt=function(e){var t=/^0[xX]/;return function r(n,a){var o=i(n).trim();var u=l(a)||(t.test(o)?16:10);return e(o,u)}}(parseInt)}});
+//# sourceMappingURL=es5-shim.map
diff --git a/ui/libs/jquery-1.10.0.min.js b/ui/libs/jquery-1.10.0.min.js
deleted file mode 100644
index 01c6881..0000000
--- a/ui/libs/jquery-1.10.0.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v1.10.0 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery-1.10.0.min.map
-*/
-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.0",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=lt(),k=lt(),E=lt(),S=!1,A=function(){return 0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=bt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+xt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return At(e.replace(z,"$1"),t,n,i)}function st(e){return K.test(e+"")}function lt(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function ut(e){return e[b]=!0,e}function ct(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pt(e,t,n){e=e.split("|");var r,i=e.length,a=n?null:t;while(i--)(r=o.attrHandle[e[i]])&&r!==t||(o.attrHandle[e[i]]=a)}function ft(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:e[t]===!0?t.toLowerCase():null}function dt(e,t){return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function ht(e){return"input"===e.nodeName.toLowerCase()?e.defaultValue:t}function gt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function mt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function yt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function vt(e){return ut(function(t){return t=+t,ut(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),r.attributes=ct(function(e){return e.innerHTML="<a href='#'></a>",pt("type|href|height|width",dt,"#"===e.firstChild.getAttribute("href")),pt(B,ft,null==e.getAttribute("disabled")),e.className="i",!e.getAttribute("className")}),r.input=ct(function(e){return e.innerHTML="<input>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}),pt("value",ht,r.attributes&&r.input),r.getElementsByTagName=ct(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ct(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ct(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=st(n.querySelectorAll))&&(ct(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ct(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=st(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=st(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},r.sortDetached=ct(function(e){return 1&e.compareDocumentPosition(n.createElement("div"))}),A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return gt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?gt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:ut,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=bt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?ut(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ut(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?ut(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ut(function(e){return function(t){return at(e,t).length>0}}),contains:ut(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:ut(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:vt(function(){return[0]}),last:vt(function(e,t){return[t-1]}),eq:vt(function(e,t,n){return[0>n?n+t:n]}),even:vt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:vt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:vt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:vt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=mt(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=yt(n);function bt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function xt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function wt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function Tt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ct(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function Nt(e,t,n,r,i,o){return r&&!r[b]&&(r=Nt(r)),i&&!i[b]&&(i=Nt(i,o)),ut(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||St(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:Ct(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=Ct(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=Ct(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function kt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=wt(function(e){return e===t},s,!0),p=wt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[wt(Tt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return Nt(l>1&&Tt(f),l>1&&xt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&kt(e.slice(l,r)),i>r&&kt(e=e.slice(r)),i>r&&xt(e))}f.push(n)}return Tt(f)}function Et(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=Ct(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?ut(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=bt(e)),n=t.length;while(n--)o=kt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Et(i,r))}return o};function St(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function At(e,t,n,i){var a,s,u,c,p,f=bt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&xt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}o.pseudos.nth=o.pseudos.eq;function jt(){}jt.prototype=o.filters=o.pseudos,o.setFilters=new jt,r.sortStable=b.split("").sort(A).join("")===b,p(),[0,0].sort(A),r.detectDuplicates=S,x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!u||(n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;
-if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=x(this),l=t,u=e.match(T)||[];while(o=u[a++])l=r?l:!s.hasClass(o),s[l?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})
-}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(n.unit=o,n.start=+a||+r||0,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);a.finish=function(){t.stop(!0)},(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/ui/libs/jquery-i18n/LICENSE b/ui/libs/jquery-i18n/LICENSE
new file mode 100644
index 0000000..978ee2a
--- /dev/null
+++ b/ui/libs/jquery-i18n/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Dave Perrett, http://recursive-design.com/
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/ui/libs/jquery-i18n/Makefile.am b/ui/libs/jquery-i18n/Makefile.am
new file mode 100644
index 0000000..56872b0
--- /dev/null
+++ b/ui/libs/jquery-i18n/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+jqueryi18ndir = $(datadir)/wok/ui/libs/jquery-i18n
+
+dist_jqueryi18n_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/jquery-i18n/jquery.i18n.min.js b/ui/libs/jquery-i18n/jquery.i18n.min.js
new file mode 100644
index 0000000..fead704
--- /dev/null
+++ b/ui/libs/jquery-i18n/jquery.i18n.min.js
@@ -0,0 +1 @@
+!function(a){var b=Array.prototype.slice,c={dict:null,load:function(b){null!==this.dict?a.extend(this.dict,b):this.dict=b},_:function(a){return dict=this.dict,dict&&dict.hasOwnProperty(a)&&(a=dict[a]),args=b.call(arguments),args[0]=a,this.printf.apply(this,args)},printf:function(c,d){return arguments.length<2?c:(d=a.isArray(d)?d:b.call(arguments,1),c.replace(/([^%]|^)%(?:(\d+)\$)?s/g,function(a,b,c){return c?b+d[parseInt(c)-1]:b+d.shift()}).replace(/%%s/g,"%s"))}};a.fn._t=function(){return a(this).html(c._.apply(c,arguments))},a.i18n=c}(jQuery);
\ No newline at end of file
diff --git a/ui/libs/jquery-ui-i18n.min.js b/ui/libs/jquery-ui-i18n.min.js
deleted file mode 100644
index 3ba8a92..0000000
--- a/ui/libs/jquery-ui-i18n.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.11.2 - 2014-10-16
-* http://jqueryui.com
-* Includes: datepicker-af.js, datepicker-ar-DZ.js, datepicker-ar.js, datepicker-az.js, datepicker-be.js, datepicker-bg.js, datepicker-bs.js, datepicker-ca.js, datepicker-cs.js, datepicker-cy-GB.js, datepicker-da.js, datepicker-de.js, datepicker-el.js, datepicker-en-AU.js, datepicker-en-GB.js, datepicker-en-NZ.js, datepicker-eo.js, datepicker-es.js, datepicker-et.js, datepicker-eu.js, datepicker-fa.js, datepicker-fi.js, datepicker-fo.js, datepicker-fr-CA.js, datepicker-fr-CH.js, datepicker-fr.js, datepicker-gl.js, datepicker-he.js, datepicker-hi.js, datepicker-hr.js, datepicker-hu.js, datepicker-hy.js, datepicker-id.js, datepicker-is.js, datepicker-it-CH.js, datepicker-it.js, datepicker-ja.js, datepicker-ka.js, datepicker-kk.js, datepicker-km.js, datepicker-ko.js, datepicker-ky.js, datepicker-lb.js, datepicker-lt.js, datepicker-lv.js, datepicker-mk.js, datepicker-ml.js, datepicker-ms.js, datepicker-nb.js, datepicker-nl-BE.js, datepicker-nl.js, datepicker-nn.js, datepicker-no.js, datepicker-pl.js, datepicker-pt-BR.js, datepicker-pt.js, datepicker-rm.js, datepicker-ro.js, datepicker-ru.js, datepicker-sk.js, datepicker-sl.js, datepicker-sq.js, datepicker-sr-SR.js, datepicker-sr.js, datepicker-sv.js, datepicker-ta.js, datepicker-th.js, datepicker-tj.js, datepicker-tr.js, datepicker-uk.js, datepicker-vi.js, datepicker-zh-CN.js, datepicker-zh-HK.js, datepicker-zh-TW.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t=e.datepicker;t.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.af),t.regional.af,t.regional["ar-DZ"]={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["ar-DZ"]),t.regional["ar-DZ"],t.regional.ar={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ar),t.regional.ar,t.regional.az={closeText:"Bağla",prevText:"<Geri",nextText:"İrəli>",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.az),t.regional.az,t.regional.be={closeText:"Зачыніць",prevText:"←Папяр.",nextText:"Наст.→",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.be),t.regional.be,t.regional.bg={closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.bg),t.regional.bg,t.regional.bs={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.bs),t.regional.bs,t.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ca),t.regional.ca,t.regional.cs={closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.cs),t.regional.cs,t.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["cy-GB"]),t.regional["cy-GB"],t.regional.da={closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.da),t.regional.da,t.regional.de={closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.de),t.regional.de,t.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.el),t.regional.el,t.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-AU"]),t.regional["en-AU"],t.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-GB"]),t.regional["en-GB"],t.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-NZ"]),t.regional["en-NZ"],t.regional.eo={closeText:"Fermi",prevText:"<Anta",nextText:"Sekv>",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.eo),t.regional.eo,t.regional.es={closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.es),t.regional.es,t.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.et),t.regional.et,t.regional.eu={closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.eu),t.regional.eu,t.regional.fa={closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fa),t.regional.fa,t.regional.fi={closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fi),t.regional.fi,t.regional.fo={closeText:"Lat aftur",prevText:"<Fyrra",nextText:"Næsta>",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fo),t.regional.fo,t.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["fr-CA"]),t.regional["fr-CA"],t.regional["fr-CH"]={closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["fr-CH"]),t.regional["fr-CH"],t.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fr),t.regional.fr,t.regional.gl={closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.gl),t.regional.gl,t.regional.he={closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.he),t.regional.he,t.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hi),t.regional.hi,t.regional.hr={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hr),t.regional.hr,t.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},t.setDefaults(t.regional.hu),t.regional.hu,t.regional.hy={closeText:"Փակել",prevText:"<Նախ.",nextText:"Հաջ.>",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hy),t.regional.hy,t.regional.id={closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.id),t.regional.id,t.regional.is={closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.is),t.regional.is,t.regional["it-CH"]={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["it-CH"]),t.regional["it-CH"],t.regional.it={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.it),t.regional.it,t.regional.ja={closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional.ja),t.regional.ja,t.regional.ka={closeText:"დახურვა",prevText:"< წინა",nextText:"შემდეგი >",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ka),t.regional.ka,t.regional.kk={closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.kk),t.regional.kk,t.regional.km={closeText:"ធ្វើរួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃនេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.km),t.regional.km,t.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},t.setDefaults(t.regional.ko),t.regional.ko,t.regional.ky={closeText:"Жабуу",prevText:"<Мур",nextText:"Кий>",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ky),t.regional.ky,t.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.lb),t.regional.lb,t.regional.lt={closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},t.setDefaults(t.regional.lt),t.regional.lt,t.regional.lv={closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.lv),t.regional.lv,t.regional.mk={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.mk),t.regional.mk,t.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്ച്ച്","ഏപ്രില്","മേയ്","ജൂണ്","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്","ഒക്ടോബര്","നവംബര്","ഡിസംബര്"],monthNamesShort:["ജനു","ഫെബ്","മാര്","ഏപ്രി","മേയ്","ജൂണ്","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്","തിങ്കള്","ചൊവ്വ","ബുധന്","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ml),t.regional.ml,t.regional.ms={closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ms),t.regional.ms,t.regional.nb={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nb),t.regional.nb,t.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["nl-BE"]),t.regional["nl-BE"],t.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nl),t.regional.nl,t.regional.nn={closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nn),t.regional.nn,t.regional.no={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.no),t.regional.no,t.regional.pl={closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.pl),t.regional.pl,t.regional["pt-BR"]={closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["pt-BR"]),t.regional["pt-BR"],t.regional.pt={closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.pt),t.regional.pt,t.regional.rm={closeText:"Serrar",prevText:"<Suandant",nextText:"Precedent>",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.rm),t.regional.rm,t.regional.ro={closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ro),t.regional.ro,t.regional.ru={closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ru),t.regional.ru,t.regional.sk={closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sk),t.regional.sk,t.regional.sl={closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sl),t.regional.sl,t.regional.sq={closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sq),t.regional.sq,t.regional["sr-SR"]={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["sr-SR"]),t.regional["sr-SR"],t.regional.sr={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sr),t.regional.sr,t.regional.sv={closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sv),t.regional.sv,t.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ta),t.regional.ta,t.regional.th={closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.th),t.regional.th,t.regional.tj={closeText:"Идома",prevText:"<Қафо",nextText:"Пеш>",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.tj),t.regional.tj,t.regional.tr={closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.tr),t.regional.tr,t.regional.uk={closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.uk),t.regional.uk,t.regional.vi={closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.vi),t.regional.vi,t.regional["zh-CN"]={closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-CN"]),t.regional["zh-CN"],t.regional["zh-HK"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-HK"]),t.regional["zh-HK"],t.regional["zh-TW"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-TW"]),t.regional["zh-TW"]
-});
diff --git a/ui/libs/jquery-ui.min.js b/ui/libs/jquery-ui.min.js
deleted file mode 100644
index 17eab79..0000000
--- a/ui/libs/jquery-ui.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! jQuery UI - v1.11.2 - 2014-10-16
-* http://jqueryui.com
-* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=h&&l.down||l,d=function(){o._toggleComplete(i)};return"number"==typeof u&&(a=u),"string"==typeof u&&(n=u),n=n||u.easing||l.easing,a=a||u.duration||l.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:d,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?r+=i.now:"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,d):e.animate(this.showProps,a,n,d)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.2",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)
-}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.2",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.2",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.2",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.2"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0
-},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,z,H,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),z=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;z>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],j=H.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>H||$&&H>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(H.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===H.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"'")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(j&&!v?" ":W?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.2",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
-},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=u-t.height,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.2",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;
-if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.2",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.2",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
-f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.2",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.2",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(" ")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=(this.options.max-this._valueMin())%this.options.step;this.max=this.options.max-e},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
-return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td> </td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.2",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>▲</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>▼</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.2",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]
-}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.2",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){u.of=e,o.is(":hidden")||o.position(u)}var a,o,r,h,l,u=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(l=s.clone(),l.removeAttr("id").find("[id]").removeAttr("id")):l=s,e("<div>").html(l).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(u.of),clearInterval(h))},e.fx.interval)),this._trigger("open",t,{tooltip:o}),r={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(r.remove=function(){this._removeTooltip(o)}),t&&"mouseover"!==t.type||(r.mouseleave="close"),t&&"focusin"!==t.type||(r.focusout="close"),this._on(!0,i,r)}},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);a&&(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)))},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
\ No newline at end of file
diff --git a/ui/libs/jquery-ui/LICENSE b/ui/libs/jquery-ui/LICENSE
new file mode 100644
index 0000000..c36fa56
--- /dev/null
+++ b/ui/libs/jquery-ui/LICENSE
@@ -0,0 +1,44 @@
+Copyright 2007, 2014 jQuery Foundation and other contributors,
+https://jquery.org/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/jquery-ui
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code contained within the demos directory.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.
\ No newline at end of file
diff --git a/ui/libs/jquery-ui/Makefile.am b/ui/libs/jquery-ui/Makefile.am
new file mode 100644
index 0000000..9d9f646
--- /dev/null
+++ b/ui/libs/jquery-ui/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = themes
+
+jqueryuidir = $(datadir)/wok/ui/libs/jquery-ui
+
+dist_jqueryui_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/jquery-ui/jquery-ui-i18n.min.js b/ui/libs/jquery-ui/jquery-ui-i18n.min.js
new file mode 100644
index 0000000..3ba8a92
--- /dev/null
+++ b/ui/libs/jquery-ui/jquery-ui-i18n.min.js
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.11.2 - 2014-10-16
+* http://jqueryui.com
+* Includes: datepicker-af.js, datepicker-ar-DZ.js, datepicker-ar.js, datepicker-az.js, datepicker-be.js, datepicker-bg.js, datepicker-bs.js, datepicker-ca.js, datepicker-cs.js, datepicker-cy-GB.js, datepicker-da.js, datepicker-de.js, datepicker-el.js, datepicker-en-AU.js, datepicker-en-GB.js, datepicker-en-NZ.js, datepicker-eo.js, datepicker-es.js, datepicker-et.js, datepicker-eu.js, datepicker-fa.js, datepicker-fi.js, datepicker-fo.js, datepicker-fr-CA.js, datepicker-fr-CH.js, datepicker-fr.js, datepicker-gl.js, datepicker-he.js, datepicker-hi.js, datepicker-hr.js, datepicker-hu.js, datepicker-hy.js, datepicker-id.js, datepicker-is.js, datepicker-it-CH.js, datepicker-it.js, datepicker-ja.js, datepicker-ka.js, datepicker-kk.js, datepicker-km.js, datepicker-ko.js, datepicker-ky.js, datepicker-lb.js, datepicker-lt.js, datepicker-lv.js, datepicker-mk.js, datepicker-ml.js, datepicker-ms.js, datepicker-nb.js, datepicker-nl-BE.js, datepicker-nl.js, datepicker-nn.js, datepicker-no.js, datepicker-pl.js, datepicker-pt-BR.js, datepicker-pt.js, datepicker-rm.js, datepicker-ro.js, datepicker-ru.js, datepicker-sk.js, datepicker-sl.js, datepicker-sq.js, datepicker-sr-SR.js, datepicker-sr.js, datepicker-sv.js, datepicker-ta.js, datepicker-th.js, datepicker-tj.js, datepicker-tr.js, datepicker-uk.js, datepicker-vi.js, datepicker-zh-CN.js, datepicker-zh-HK.js, datepicker-zh-TW.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t=e.datepicker;t.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.af),t.regional.af,t.regional["ar-DZ"]={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["ar-DZ"]),t.regional["ar-DZ"],t.regional.ar={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ar),t.regional.ar,t.regional.az={closeText:"Bağla",prevText:"<Geri",nextText:"İrəli>",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.az),t.regional.az,t.regional.be={closeText:"Зачыніць",prevText:"←Папяр.",nextText:"Наст.→",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.be),t.regional.be,t.regional.bg={closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.bg),t.regional.bg,t.regional.bs={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.bs),t.regional.bs,t.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ca),t.regional.ca,t.regional.cs={closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.cs),t.regional.cs,t.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["cy-GB"]),t.regional["cy-GB"],t.regional.da={closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.da),t.regional.da,t.regional.de={closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.de),t.regional.de,t.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.el),t.regional.el,t.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-AU"]),t.regional["en-AU"],t.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-GB"]),t.regional["en-GB"],t.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-NZ"]),t.regional["en-NZ"],t.regional.eo={closeText:"Fermi",prevText:"<Anta",nextText:"Sekv>",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.eo),t.regional.eo,t.regional.es={closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.es),t.regional.es,t.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.et),t.regional.et,t.regional.eu={closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.eu),t.regional.eu,t.regional.fa={closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fa),t.regional.fa,t.regional.fi={closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fi),t.regional.fi,t.regional.fo={closeText:"Lat aftur",prevText:"<Fyrra",nextText:"Næsta>",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fo),t.regional.fo,t.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["fr-CA"]),t.regional["fr-CA"],t.regional["fr-CH"]={closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["fr-CH"]),t.regional["fr-CH"],t.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fr),t.regional.fr,t.regional.gl={closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.gl),t.regional.gl,t.regional.he={closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.he),t.regional.he,t.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hi),t.regional.hi,t.regional.hr={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hr),t.regional.hr,t.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},t.setDefaults(t.regional.hu),t.regional.hu,t.regional.hy={closeText:"Փակել",prevText:"<Նախ.",nextText:"Հաջ.>",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hy),t.regional.hy,t.regional.id={closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.id),t.regional.id,t.regional.is={closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.is),t.regional.is,t.regional["it-CH"]={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["it-CH"]),t.regional["it-CH"],t.regional.it={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.it),t.regional.it,t.regional.ja={closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional.ja),t.regional.ja,t.regional.ka={closeText:"დახურვა",prevText:"< წინა",nextText:"შემდეგი >",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ka),t.regional.ka,t.regional.kk={closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.kk),t.regional.kk,t.regional.km={closeText:"ធ្វើរួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃនេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.km),t.regional.km,t.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},t.setDefaults(t.regional.ko),t.regional.ko,t.regional.ky={closeText:"Жабуу",prevText:"<Мур",nextText:"Кий>",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ky),t.regional.ky,t.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.lb),t.regional.lb,t.regional.lt={closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},t.setDefaults(t.regional.lt),t.regional.lt,t.regional.lv={closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.lv),t.regional.lv,t.regional.mk={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.mk),t.regional.mk,t.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്ച്ച്","ഏപ്രില്","മേയ്","ജൂണ്","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്","ഒക്ടോബര്","നവംബര്","ഡിസംബര്"],monthNamesShort:["ജനു","ഫെബ്","മാര്","ഏപ്രി","മേയ്","ജൂണ്","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്","തിങ്കള്","ചൊവ്വ","ബുധന്","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ml),t.regional.ml,t.regional.ms={closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ms),t.regional.ms,t.regional.nb={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nb),t.regional.nb,t.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["nl-BE"]),t.regional["nl-BE"],t.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nl),t.regional.nl,t.regional.nn={closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nn),t.regional.nn,t.regional.no={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.no),t.regional.no,t.regional.pl={closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.pl),t.regional.pl,t.regional["pt-BR"]={closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["pt-BR"]),t.regional["pt-BR"],t.regional.pt={closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.pt),t.regional.pt,t.regional.rm={closeText:"Serrar",prevText:"<Suandant",nextText:"Precedent>",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.rm),t.regional.rm,t.regional.ro={closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ro),t.regional.ro,t.regional.ru={closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ru),t.regional.ru,t.regional.sk={closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sk),t.regional.sk,t.regional.sl={closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sl),t.regional.sl,t.regional.sq={closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sq),t.regional.sq,t.regional["sr-SR"]={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["sr-SR"]),t.regional["sr-SR"],t.regional.sr={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sr),t.regional.sr,t.regional.sv={closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sv),t.regional.sv,t.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ta),t.regional.ta,t.regional.th={closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.th),t.regional.th,t.regional.tj={closeText:"Идома",prevText:"<Қафо",nextText:"Пеш>",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.tj),t.regional.tj,t.regional.tr={closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.tr),t.regional.tr,t.regional.uk={closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.uk),t.regional.uk,t.regional.vi={closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.vi),t.regional.vi,t.regional["zh-CN"]={closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-CN"]),t.regional["zh-CN"],t.regional["zh-HK"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-HK"]),t.regional["zh-HK"],t.regional["zh-TW"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-TW"]),t.regional["zh-TW"]
+});
diff --git a/ui/libs/jquery-ui/jquery-ui.min.js b/ui/libs/jquery-ui/jquery-ui.min.js
new file mode 100644
index 0000000..5824d12
--- /dev/null
+++ b/ui/libs/jquery-ui/jquery-ui.min.js
@@ -0,0 +1,13 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):(o.length&&(n=e.widget.extend.apply(null,[n].concat(o))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css("box-sizing"),l=e.length&&(!t.length||e.index()<t.index()),u=this.options.animate||{},d=l&&u.down||u,c=function(){o._toggleComplete(i)};return"number"==typeof d&&(a=d),"string"==typeof d&&(n=d),n=n||d.easing||u.easing,a=a||d.duration||u.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:c,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,c):e.animate(this.showProps,a,n,c)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.4",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);
+i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.4",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.4",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.4",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.4"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);
+return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(z)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,""],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(z.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(z.getTime()===G.getTime()?" "+this._currentClass:"")+(z.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"'")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+z.getMonth()+"' data-year='"+z.getFullYear()+"'")+">"+(j&&!v?" ":W?"<span class='ui-state-default'>"+z.getDate()+"</span>":"<a class='ui-state-default"+(z.getTime()===R.getTime()?" ui-state-highlight":"")+(z.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+z.getDate()+"</a>")+"</td>",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.4",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
+},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=e(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data("ui-resizable-alsoresize"),n={},a=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;
+if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.4",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
+f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this;this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(" ")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.val(),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=this.options.max,t=this._valueMin(),i=this.options.step,s=Math.floor(+(e-t).toFixed(this._precision())/i)*i;e=s+t,this.max=parseFloat(e.toFixed(this._precision()))},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
+return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()<o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<o.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()<o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<o.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===s?t._createTrPlaceholder(t.currentItem.find("tr").eq(0),e("<tr>",t.document[0]).appendTo(n)):"tr"===s?t._createTrPlaceholder(t.currentItem,n):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e("<td> </td>",s.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.4",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>▲</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>▼</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;
+this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data("ui-tooltip-open")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(":hidden")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&"mouseover"!==t.type||(s.mouseleave="close"),t&&"focusin"!==t.type||(s.focusout="close"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
\ No newline at end of file
diff --git a/ui/libs/jquery-ui/themes/Makefile.am b/ui/libs/jquery-ui/themes/Makefile.am
new file mode 100644
index 0000000..1ce56d9
--- /dev/null
+++ b/ui/libs/jquery-ui/themes/Makefile.am
@@ -0,0 +1,18 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = base
diff --git a/ui/libs/jquery-ui/themes/base/Makefile.am b/ui/libs/jquery-ui/themes/base/Makefile.am
new file mode 100644
index 0000000..8a5bbd2
--- /dev/null
+++ b/ui/libs/jquery-ui/themes/base/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = images
+
+basedir = $(datadir)/wok/ui/libs/jquery-ui/themes/base
+
+dist_base_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/libs/jquery-ui/themes/base/images/Makefile.am b/ui/libs/jquery-ui/themes/base/images/Makefile.am
new file mode 100644
index 0000000..38e6f18
--- /dev/null
+++ b/ui/libs/jquery-ui/themes/base/images/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+imagesdir = $(datadir)/wok/ui/libs/jquery-ui/themes/base/images
+
+dist_images_DATA = *.png
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e4af1db3ac79771f85b26e10e3ae8710059765e
GIT binary patch
literal 457
zcmeAS@N?(olHy`uVBq!ia0vp^8Xzpd1SErbK34)MmUKs7M+SzC{oH>NS%G|oWRD<U
z28Jp%28M<f28Lfip@tU>45bDP46hOx7_4S6Fo+k-*%fF5lweEpc6a#?2AmP!?*K&}
zc)B=-WZZju!;p)~P{8fsS+h8Y3A#s59Xebow0`qkb;0a|Q5!b@SnY5ug{8al<myW)
z?dxy*?2_|ef49!4Dt=!3@!FzomihVL%%gwZzq3<*73Z=b?gTSa=I;)nnX%K4*6S*T
zp1sFixN_EO2KVK!?y#f<%s!x!#d>D(tOTvC3~9l}1^gjX_wAqN5%Tok#}4nScjONW
zuC&^HuyAEwLCGrSGYiZbJ+E-ha5p^|lErvtS=s}+6<Ke#?6|V=@}gi&lT6E^VqV?I
zya?00ihoo6y^Jjd{qul+RV{IiC`m~yNwrEYN(E93Mh1o^x`qb2hGrp#hE_(FR>r2f
n1}0Vp2H&16zJa14H$NpatrE9}_MOrxKn)C@u6{1-oD!M<f0eCi
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 0000000000000000000000000000000000000000..efd1ff3e7bbb28391e02788cff94f93bdb085679
GIT binary patch
literal 351
zcmeAS@N?(olHy`uVBq!ia0vp^8XznHBp80OT7LpkEa{HEjtmSN`?>!lvI6-E$sR$z
z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e6mbzsPFCvp`;z
zr;B5V$MLsUPYX6E@VEx9@?|&6ay8;f`myuF-MNb1M(HzW_kEU|eed)0=e7D9W0*D9
zHOYiKOggP_TGyf1*jvZE!RmS=%X5deY=xtt6CQJU6iKG+<oz+X_<8q3u?5F`7o6f<
zaIRG0plfi6-mFE%7e(fFFMDxEe|8b$t>uffPdu6X1Lz9X64!{5l*E!$tK_0oAjM#0
zU}&OiXrOCo7Gh{<Wn^h(Y^rNuVr5|P?aAUBC>nC}Q!>*kacgMbDV+k;z~JfX=d#Wz
Gp$P!pes!Aw
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_flat_10_000000_40x100.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a5aa914b236c0b1552513ab4d5fdda1aa4eef51
GIT binary patch
literal 244
zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F2qYNp$opRhQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=aiY77hwEes65fI<x~7#K<o7#Ln9FfdrnU|<k0n6oR;1}MRl<n8Xlz<9SycnOfl
z@9E+gqH#VsL4tL015h7R1OsEKSz9?!O0~o_q9i4;B-JXpC>2OC7#SFv=o%X68k&U|
w8d@1yS{a+_8kkra7<_xO_y&rG-29Zxv`X9>+ILE)05vdpy85}Sb4q9e0Ooo;w*UYD
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..068406ca901c5d06855a86906b2e36d0d3f79980
GIT binary patch
literal 301
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq*&4&eH|GXHuiJ>Nn{1`6_P!I
zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&61
z4^J1z5R22vKTKyPiu5Y2TAY7hVxPBR&H2P1b#orJiyiJ~<*`31QRkQXL-o*y)!h%x
znGe5@X}d2j`A@^}PiM-H$tGQHf`%LnpC-BAQ(ov705nsz#5JNMC9x#cD!C{XNHG{0
z7@FuB8t59Dg%}!I8ChBxo9Y^vSQ!|6d$RZjiiX_$l+3hB+#1?<N~ZudFnGH9xvX<a
GXaWF(5L_bw
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..979591a8a9e0232ca073fe0689418fe58a16da90
GIT binary patch
literal 387
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fC<Rju*&f~kYY)9^mSxl*x1kgCy^D%S4j2<
z@?~JCQe$9fXklRZ1r%y{!N5>zz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^
zWR|CkV~EG`x99D-85t$mAKd@F*+VUM$~ukHXUpObgeREBN9LXpoBz~pv(Vg&OI9xy
zIa;#Q{_g4J0*9?_KQrG=jkHl_U}#H}IJVs}Qq5B$Xw{>WZ5atiOdlp3V!tRfU-re1
zQVTbiXtAl5B~#th+Y3@pGVD4#@1sD~x#iPsx14w%KK+u&{MbF!t_9wmR%~B57PbA0
zU&4FXpzZ{_)IXz8*O(oRKv$}kxJHzuB$lLFB^RXvDF!10Lla#?16@P25JN*NBTFk|
pQ(XfSD+7aXPZr-m(U6;;l9^VCTSNO!=@g&_22WQ%mvv4FO#o0qho}Gm
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1dc6be0aed5c308955956e5cb2c8dfcb1128ea3
GIT binary patch
literal 246
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADVB6cUq=Rpjs4tz5?O(Kg=CK)
zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&V7%KUyadP-
z^mK6y(Kw%+ks#5!xIpAl1H;se6O5NlHf91PRZCnWN>UO_QmvAUQh^kMk%6I!uAzah
zp;?Hbp_P%Pm9eR=fr*uY!M7)iZ=h(%%}>cptHiCLeW!E^Py>UftDnm{r-UW|!TUb#
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..8dc23e251b0505078f3a0912ddf41db6a89bf72e
GIT binary patch
literal 5854
zcmcgwX&{?f+fLt^PN!PcQMB4(W;&_8lwzuu>4GW65E>O?4R7sgO(N3iLQzbuRYfbs
zSdt)(w2?$B#h|3tL=dB>C1OcPG!ecqGvD&#{rjCC&$-Y2JSRENeeU}@*Y%|R;$$Z;
zcU%qt0LWkc`HCw5uxCwX2Oj>H?20!@yD96w48G`i5ddh&KCtPxS2q4O;AdAy0040s
z0Jwb*01(Sux90$WI70wn!5089e+&Q|je1IUv5?*P%HP56%Jy#C?;#ok0F>9SUb*O&
z$mW&!{2t77?-0Fi(Rg&t?W-I&z0NV;=ZDkekK11zvT(cq;Wd`{*g}5edM?Q`>Cu%{
z*u6WxZwh}9E1pmaE>DXRR4K`wR#*r2Zzv{pQ;kiJX+Hm@WTMBg1)21t@yysr0{$~j
zIxCWtbj}KX8+%F+u|rWzwq&vMDIqdpr9VMKOg*wkwm<;D^f5N>!mb4{OU>N1-hAmh
zb!f+BxQF%Xiyh+{z;tP+2OPQm|Mke9K_^5o7B?aCmQ71(NI*8!e}q=r_*=SpL@xiA
zhO#PK&Kx`)9#^lQ7dTNoq1clT6;tY`_?`pC+)Qw1UHM~0OsQi<KR*a`9!_`@dOnT`
z`Hb*syJJ?M662#<;iZc&1;$+T3D2V>G7sDM8E|9~B25>0;C@Ogg)1+ihNnlEry6-k
zQNT=%PD5UuHOG|yVEnChvIvJqSsT0UhQnijDHv8DO=eMr4990UP3=&j7T2B5ExrY$
zHSdS}IO4+hexyNRc?I!V*K;#&Nq9k-;LFP%wRHl|I1m5uBWu+#V}oTlrtrN~u}3hx
zLN=eqx>O%OBbsOenYD=Xb5x($HOIL#+&BX@f$@o_8p}RG55P+k_3fC=cU#a?d?wBP
zqAU|-?cePddUQ_8rbg`U@aH$xM!UxUY}w<~T0cD6<UKt;LHtL_q&V8Lsd>N-kqOD-
zy<oqKkN7mTikSoFl?f>JH}m@k)V-NEz^<K-s-SMDygp?OS5CWlZaB}}C27UgH4>=8
z?s+zR<NBg*%)6zE?Bc2rIm>L0JE<VT-u*?LcIY!#{h6Ws!e)w)qpBuax6K19aEMN5
z&WxocmFtl)I~CHn2#oA7v7OjkF<eWbBw_?jdL!NWfu;uSc{%oH%Aw<LCupmi%UkY`
z?}Pki*+dvip}A9+&Nw?I3~1+dsH}YxUaZ{>JrJ#=%>YfY%~@0I7v&%e{E#iUz4v~3
zetC{!MtNX}SH+f~5wCSqQjq?K&;n-H`N*g^woU0kx|O~jcYO+*n+HZ@DG{kA7%+yH
zf7E8rvhmM-UBh-|+TywR6R<i@7bG)$lumA#{ft?>$`8uzhr-({%7?KduLlyWfD&_{
zxoigGRbzn;oJ3t;5>b#g)B;y><||tCzMUPoEuR8{?QX?sfJW60viz@l@>MVJ!_T^_
z?s#u!29?5l_wSg1y2H@?-2#0KC<VcS{4OlMa(=FgkY}L;i%cS@JJmhQs3`~%5uNaK
z;#Z2?)f?CAM&#;fI3*2NFy(lA1GDFnK9=nsl%@%+1sxz#O~Hhm!LF<b!n>G?3S86y
z=i&9dk$akT%sY)u3U#-5{RFRWQoISM5f7Qkig>mJN;WYrPf9(~r?xqBVzM?t`Mmt@
zx-yG2KI366%;l6Dq;Z~?<a~C+UOe%YGzzxpSE`9XBK0nqkKa*uf!k8jGga-5OTr`t
z{Z$qP78ei(HmM%+!1(4uURBP07TpcmmP@9Muq*xhh>cuqn}yDe34W4pS~;#MF3w@7
zz7a7e_<qRDB!WX`{tE`x)zOXtRm&~U>031DGoNU43gB{yao6iA7H)v87<a;Nr2Wxb
znZSI`S}T`Sa=#57RZEhrQ}LU{qdOoD0C;?t^mGU3WuW$Q>RV9R-8mkQDeRysNurVC
zmuCi4BzL=Wz5(SW)nR@QMyCgl_F10>SxE#nh5d&4m^_8_5(@j5SYeRk=ih8Z?|PrP
z^5SDT$Lk>o0)EyTf6hA`HvU1PGgLkcG)QRL7I*l;%kc97+H-Q;hUuQ>JTRQ5Jv7sH
z;j+MrC`#6Y(hljyEoD0RsOG`Lg9jiDK-r5|Ve`$(`RR?uTz9>uN@mVhbV%Cu?)szg
z&3CQQ(#763!vh^H)}nz*=@QX&sw`i~X(lNGAGM>*E|OHNUWDl|J6f#tDuzza4PVk|
zhC!u+A%vTWp<(M=b?tP=KgM-Xtd|th16XeL`j=iaF;xXU6!yTf4&$w30F_Z_(G6!z
zv`2eS`~~@Mz9J~&Ql$0B=`z!3hqg;Kg`(NPaf*wpitE<s6x#)<d}j5cDpPpHrN21T
zG69;egpLhs<Lh`ao|Q@!C0!>QmJ#kl;lnl8@M_EJo&pEaaIGu!1$3JS<>cFoE~a^l
zUMIntwu{oe8!!*c6LFI2;J2YS&`$8sAMpjT^1NtjvQEgfH~3@MfMYg!DdIcWK=DOO
zPL4E<6gey&P_vMVHI^)p(?X-g`(V0WSn9y@dvAMhhdV}&w9?-?g&EJd*HkPy*Pzl4
zMf*g?Hi5-)Qk)S29z;F9K>c`4TlHF|2NX;;(q;%kJmw*~WPVMkWg$dYRiw7EfcMgX
z^g^856PaZ>Vz8|UchjCm(GABg>YDtSX|r7M5ZXvyAU>~)golFbVy-R<^F3d$ENQVP
zy`8%{x{BN2=k?3ldRelKgG>8L@NS0>?4%yx$=m4Pc8w#x>bQF(v1Y5@(}nm}qecA3
zgqRc%hM*L2vSBP&rQt<b7M?p*sq_F}I663$-q8he?W;KhB#)>s5It*axFHd>ZVqrD
zG|~&MVjnw97`dc@@5zhgq<i-~iPXj5ac2>hFRrJtvRqGK<8*IieB|0c6vm<Ia?axd
zdqU4MYF8gXHC!<rCSJAWu?k$Py?mi2ViB0Y^=EYCl>&`hUrwkc35X6=WfTr}^w0&r
z5xZdbcns)=BMBYM4jvC$-JEV+4Mh|eKhVm?%>~s?5}z*A)?(+%ssiCbQ#3LO=)wx;
zCpB^HIy0CwMeh(LNiam-d-AN1>}Q9qGmg)qc+O*3eHF1n&JeXfm`W{0DmP8_6Q2E<
zIT%VPQNV%&mi2U*HJhIy<?h(o2RV)~;2N%=D~Tk_*b+}&+ZuebWtI(E5nkIWxiZXq
zvDqM)$vk&2YN}mrH^inna6ZZMEw-m)61$bQl8pYivOK)lxld}Kk$fy!u~&U7YP|eP
z63d!xeez7|Q3(=!?jv>F8!|hrCVU_vrv_zAXULgrHqSO!wRWzI4THFcWYFwe6T8ou
zCgc}R+#sFk*_eoGLTk!?1F=y*xMe3zqaSVkJ`^LwY-Q1pW^EoaF505fNrjq5+lPtF
z7Al4MYdoO%UA*W+SahzbCfRuW{?gIrZU{Omx4`;nDH~z<bg`6MO1s*PBsT}mwleP7
zwGui_6XGMoq~C6aCDtIL#*Ov>-e9jKtYk7vKl4YXr3zw+g0)=6ia*-9F>`A>A{EQa
z-|E>)bIVO;om0>cKO@{GB<Xp{OU#}&$N}p2zo%D6nU4*OTV6oFAI}|+83&D*OlD#=
zPQFfth<+A@ZN!SuW}B-48+YG&k7x3%hp5eQ!LKZz&Y!8f;45Pp4x|kxIC-1tj2)Go
z2)}o&u!r=*G*CU&&0FGu%ohF>4eN73xO}duIW?#-+e>w8%WtFkYXIQbE0&L^mAciT
z$P~;r5`jk};U6Chm({i;@{!l{=+HzW+5nO3pIAI~2|d5E8nG$`TWz;(dnDA!AUitZ
zKz1x61&NWDhEJN&3FB4G-2@CeH42$<+Ux5wx#iv^i(ArnQB-6Cw|Ck@lO6+c_Ca3V
z53nktOiVN+edpywQEr^`IVeimURt)^{7@g||M}7@MUGs@$$@^KIRkx-3!h9r9gtSc
zOikJwax`w*kv2HGEh}v;9@00mbdpzvUN#@GWL8+Gsc$7leJ=|~<&#+Yg#P>1RXd7&
zQV^F*FgTxd!fJy?YDRJ?n4>@Kr+*d8dbqIpYTFh)yo&wvjYO)JYOn@wEk=pQTKybK
z5UR)@RX(C7+vc5*jr)scwv#q6(^5EVDZbTRaMz)t2ca!8Y%-+fkS`q0hB!2kyYNQY
z1M5k-(!LJ;n?(!7Prk92C|ZMJ!Ut+D+4WIua02nCk!(Wc;I*{U0MCc64oAFsj4%{x
z3sR(h8j8u;;Zd4;^yK;1%LOG%w7I?d_jj{r!Jyb@hUohM_HD&`XE7ml`JMtDBaI%N
zfU^!&(TD11#X-yd=$oHCHeR6#Xn&jaI>vw};n{c?`&?jIb6X2#lbYH>h(Pc1l{a@{
z#&(U<fD;Kjg?M|vp+a}P_49<=J0pPAqZRbu54^ERI>|9Q#8s6oY<#}{phQ}0hdX$X
zIc1uzc0W;%T9}}R|ChF8syWV5JIy=0^+e=_8G)_#YKvFx#?nt|)>vY=3xik_x^Aqc
zj(Rry5Z7!qjs1<+-iR5Xj=wa~6rxYsVD$#mD~PAl4?#^9dg}(`V77&Ugd`J!od~Di
zl@vw-Ys2}&sHM7ofeJYj7n{-Yc{al*v9eXB=49=|!T)Aqg8HX}d)9ZoWj}vXPTt<7
zY=Cn?>NtMQ!5#mbN@E4^y}zlRFLotbXV?4X<5U>qFHG{K7p1~jvu=N}y`Ge8&|i`I
zNvtN*Itmyc;&CU<(HBcPiTV$zji>=0OT|@Pr?ij@${?4ro*W#+7DeN89=^Qpiq~C!
z0CiVxv;Q6odmcAzAB4yVL!h$kn9Mh1aUo+##n@~nAG$pQ&3|tK8M*}vE9Ug&=cBKs
zArR~AQ;0G(dmFf5ZoNv4GsnN)W`Si_PkQh1v~aE!kLlCaowF_1Jn56Wi+gs==^r9W
z`9~Fg@*9cy`<+whwSUWuzfUy0l(}=JjhUw8{wWY6u-XChTZ8MAGsPNhiDQEd?vM_R
zcAkdqFY~l|h@QP`wNHSU2ivbbL}%Q0rE|SkV=b-s=LOchFrunw*;PxFbo=zP#%a(c
zf)$3!4BrkNxpqUi@Zk={9u$U9)^!QWO@JX{c|!H>`ibTE3}XZ72tGM@{F`0bdVB9b
zeET-sBL(%hhAr-q2_^NauHC&1Go@D>;R{ae((>E!@9B;Ika780ajg+uvqn&_mZk1)
zycHYwsyL*mb(FKDjJ7Z4ha>^x%$hJF#~TFqbjX5>ZirUboZO4BPw)y+&wwKX<C+Uc
zg}di_gsCmqmVi&l0SQ*heH&zy&8o%q(@mAZW6kOd0rRQ*Uih!pcprdF-U@{;3?XjK
z6SOPf>6EyuU~S=*z8~^?^7f+ci*Nx5yqkk1fm8KUr_~kaa0V&J)pNecb+8xteMeW~
zDL(r>WLsHnE!b{4n6yzM*k1Y5n7I|Y@k^YF)BTcD8rUrSJL_yo)@XLxsBQue8r^+t
zRPd_MsKAnpO;dD9BQ+fYve_!J6aJ`0Ev50WZjQZh;aTmAS<knl&}CTd?2xrWg=rXm
zZEo#&MrU^z++E8>>-9jsbLNF6AKIb0^`hfIgAnhcA32mb)~Ib60a`{i2^tlBa>%w3
zHT`h6E5=du_Cg_5)n#ok?gMrR5sy^<x7}-nxUxSgi4m(6f{El6Qsi9yj;>&pzT2}g
zl^q&hHpPgV5^`7qwl1e~5vf1N$y#2}&u@tBZbHqFjS9;B(#jC(pyc5vcjJ4I>w|Xh
zxe)*F44B04*P#Ywq53-SaPn>26mycDvs&4oCB-wuK!`eWM$I8jYv!)&WD_dV1QGMd
ztbm8c##t$NSE%St>M*DI>tnUWjn`ki#JcYXe(pNacHW<~ktwLM7P$r;-_03c;CsAO
zGHeA2QfZ>kLoC`=>TJy#37um#BdhJoq%xe545bH->E3V{;&+9q&7aP8Wio~sdDYo}
zup1T0ZL^H+&DkX<PFbo9kG(QEYxdqE#nGZ{&b%tFiY+VufcfZ|5$AC=jHK*n<kd5=
z_>Ug0ecIwYw<kHxtjo(<T@OqVdhwFHCZf)8EuA&W(txB=%&%tVkRlR8t@71?3AOJt
zz?~M|@n@7QL$NmzLDcnMath;PdemzRT4!`$=bW-UgO7yAv@GS40yQysp^yzpuqs%l
z*_TSX1f(C*hnu~YA7JKikz<8YXv>Kp@3n{zbK(`jn+^LUvo;ougc|D>nwrQ4SwNG5
zaVwje!f>DY;^UUEk?Y?YET{KsPbh`+9*z<NgF$KF1`G-OLBbyCQ?9Rd%Dz;T-IUT*
zQ;y$HW+1ZGZq&^MNUA-$YtNw8wU#T!);&*<R;|)v-5r7&u(zqL+*P)H0seO}xe9*|
zL8H9>pj-29-||9W?Gyels~~(iU(@q7JN*#cc`|R7;}K$swHM~5gS(UQ6Fe1#QpqHK
z^DhB-TRy1NBCqRooQG>Dza2ZnBbVcBE^M2DRA(NL<E^+)5{E!pI-zzMF81HEpRz~4
zj5NEL>A9Z7ZQ#r@E8BiQ2_K7i2T9|<>Y7~)DLqij@YUB?J7u@mncOCw-4g%0EuNQO
zk205dXi2`Va>JhmcKkY{=3c-zRDOi|wor8VrG@j$K#d6pX4B@}*_q!?kD?)Fcm`rH
zJ>@JAqkDD%oHr7T%po0O4d-3{Vst(XB5a?-l5;M9H6?^^v2;eb#r<Y8EmR}jyt?0r
zhm_sj`m;gri=S7!P;@V2i48xTf+skzXR*gP^h)I((D6?_k30$Qvpmtmb5_&tjg|#D
z+RNX(L^$z;s}B%*-LguH&tQ~FruLO4R2|t(>+63|<}&7UpkL_Iro*F`?8ouFJc468
zvpaktddS@7`MMd~eo@~k&7~3l@;wMoVTL%Z)aTd5MO=N2Aoki+S7bATy38WmnjU9E
zVQWJs?MQXztHR{=!G-^zK!CwmtzgO^TcD*rjFOw?Is5aSv^;0z3KH%(c0M%ZC1m)R
zi#ERSk>An4GKJUOGB(7dz55h}@=Y>}^KP(MDh~c`$hP4V&qUoaqAdMP9C-E0svT4R
z^bFQ2T@7r%2hy1b!>0iAD?9#O>t=Pi8xt{`orALBQ5F+}?Xe3(?tEJ}+;cNqYEQ`T
z#B`k}teQ_fh&D*1E&uv$<iL`8KDk$#D}QHp~c>LW_O*G+yc60DkFfqU<vsFK4z*
zCOyX^8c<6I6vAL#yB~W1x_+D%<c1yCx;esZH>__yZtporwD9Zj4e*gUfU!0nv4MWE
zF!O+0Fj)sMGCX@u|E!_@SyQ*OXU&byn;V<x8=f;aG!#x_SpR22cx2$sAozctkox*W
R;LcxOwQ;(FyX1T4zX0?Pvm^ij
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9b25ef80d30a7a6f6fa40e7c77dcd78aba85ea5
GIT binary patch
literal 317
zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q*&4&eH|GXHuiJ>Nn{1`6_P!I
zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&7i
z2u~Ns5Q)o25AEf3aA0V-*e_{PA|fT+A^2utsBza39wB9crJ?W6{k5E{TTy8vDu0%P
zeWCi2JKE*V_dn|99lm;lH99HHr%CRj;q?Qe3)MmzZ6?YZxp&C#57L`*<)qw^(?B~^
zOI#yLQW8s2t&)pUffR$0fuV`6p@FWUS%{&bm64^Dv8k?siIsuDw<n8lplHa=PsvQH
W#I2!yr*sNX1B0ilpUXO@geCxOC}8*i
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a479d12cc304f7c5259a9db8a4827c13d693543
GIT binary patch
literal 367
zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=aiY77hwEes65fI<x~7#K<o7#Ln9FfdrnU|<k0n6oR;1}MRn<n8YA9}GAnzTW|g
zw0XKXhG?9BI>C_ZP=J7od~g)E*+$=Uk7Um%7IiGy@^6Xv0k022VsdT*YtE+W*g57e
zNcdV|y;(=+TXOLhh6nuxi$!<LpWI+~sl7BX;r{we)de%z8fQzeUJ2IxP`8TZ+%}%q
zD~iInZrJ+2-@EkY5rqQj+c}F5{IrS{VLJCY>OnXE{r{KzAG1DtYTsG7sYVLuBGnSt
zh?11Vl2ohYqEsNoU}RuuqHAcNYiJf?XlP|*X=QAxYhYq!VDRn9;u|O$a`RI%(<*Um
UXx}NF0@T3Z>FVdQ&MBb@02WezsQ>@~
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_222222_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed5adeabaf07b8784f55c2487e1cc70ee648c7fb
GIT binary patch
literal 7006
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
Gzx@w(&o~JH
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_228ef1_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_228ef1_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e787bb98f072e1080b4557a20a86cd79b814040
GIT binary patch
literal 4599
zcmeHL_cxqfw0_?iy_ZC<kxUR}^dK0$6D>qAqqiuZ-i;C^MGHdsWKwiOL?2~{E+NrH
zCj_H+3FAt>U+(=M?z7H1d!Mt`bIw}N-fN$dc-KIanu3i2003%jEj42R054r&hYWhz
zPiX6$UK%22WqoA;_>fF_W=niI=CRi@)(3zP7yzJS0pQo=6nYf^{NVtwjsgI=EC68k
z&TTZhbGaD(T|HCvYe~ER-~P7(ww`4cm#SI%85@`Y7Mfw##IqKf`vaYFs}f7{Ee%3`
zA{-x?Jkdx^x3|^DxOn9Fwua-Hmdcmcencf%&&|v?j7<%7jE;=kefK6%4`jQZ+!kcw
z=nVc=*z^4BM8(dRl!Qubcj?lTzRU0cpq;L!8jwKDsRaPE?%Ha~ra|8~ttsuNYUxRO
zwMy2q(%2hxb8dS!!+fPhdu^=8{XIqs+?V8vvG4F97Z>qV^OW)OcRGv<T-aYd?A1gA
zTT5UQ6mdV{67)P#4paIQRRp*XNr;Rn*h(OGLO60|(%D5}Pz;DE`*)=yMBE_iD!LHj
z6LI<z15*}GVNCgY#IklkAr4txYl39TvZjDz5m<^mzX1$S!+HLc_{~{8cH)nyS+$U;
zhDSja@H)T{8dnF%3zQ`)LMA40dL1TmVr>iEXsMI>5iGE&@@bB^HYsO|OkM3Sp0d2y
zBKMr6)v>5183{IAWtGIz&)+PA%!L6tbZPmtI*Iw<Qy??SN#;{$tQmrQN9{$)0dEZN
zSVZU(h2Bioj1J#MGCfd58;2SOr=uTzaeC(B@$3}cA@pVZZLJ4*?|L57@hjSS1&305
z1k3oj2p#=@_@Hp$dlvKFweoB>N^=l`7A;hXpKhM&u7g&R5bHoM=-+c`ljL>Y;k0r+
zqG+P7eD@1qmod+mkpHngi=;`8CvjfuA&cX3DkCnVUgP|ZRU91{1|d6Ri#0rU5W8CD
z`&{;xguL+A{#R1*<FQSgS`$LCa8KD8uQv;9jYZ5GOPLC4^M<tPS|X%GqFNXT-I&}=
z@l*??)!ymCl*518bm*&JcoZwlJng7rpRs=Tg_c^xjJRZb3|%9*)4l)DV{`~e7ui`H
zVYB(SZ-d4F*Vr`3-uu{Z+$+(m7}8SJ7GgxN1Q9jd8?%(g-n4;0LO(qk{TxOWbgC;f
ztPr(E%9rcWzOVv3kiW^)(Qd0NIlwhZ=PrrMb92l}HyEs&K>zmB0Ng>ZylexkMHUbW
z&3)lr?!W}cl2^Vj-@h92lNe=<_De-ES03+mWXFhY%y8iLEvWReh{<YIxOvc2(bqGm
zbzie`Shg;+oj%_z_ok~i*x{-K@`9)L!KnyE*tI{f8>yeh-VQYFd0Uk!A&s|)eG=n2
zDZfs8MwUb<b4HDgS&H6d8~!|hWwI|Ra-mcny~!jK-tFcwwC@*$8?AEy3M%1m3`KcS
zq8~-Ut)JNb>x0M8i4}>@hi+pwNbj$?l<$XS3=oW-jbvIv3vjQ-n|X_CwWF>)#q)zy
z?C*F!RHr<`qV=ydg-;l>{Y$sIb^ikc0^8B`NnW9-xR;3O-|WHT2SbS{{81KNmmxZZ
zZsFW^V6}2J{f-zzf{khpT4kS>aQfCg0skKPCvY8y8X=ut4or2>uzs@<c7oKeWLE)P
z<7c}Nq^q|Sow0F|`4v0UC%g~wRfyfk#!`>25UV<cy-;xk<ytF6q9h>QLmp^NQNPgU
zk-3BcDhTFUTY__O!l6FOipU~!PF7hURRBCOv9Ocz6LQ5)STy3;m~eYJ^3sCQ988Gg
zTatds8j%Hj>`*NlJe7V)d2AAxNiF_XEOG{>+RmNC%e`#4NfEUy`Uq^j^$`lqP4Z+;
zoP~yKX=ovke&3Y-gk;f)*CaxvHiGbgG4X+Fji(^HOwKQ#CdQp<RH09Xm7tTP?Ed~g
zx<7!1dUXnf^M=kp=C>VQ@_UZ++>{h-voX?3{b)|`pfhe%_ig#zK+jwgN2xkj+iB`_
z>jBn3WO!Yh<~jKf#<yTJF{58axmgj-XAh}bWlN(guEZ)mpLqZ=pik{)V;5%(aQ~o1
z4X>kW557O#D!FYvPXya;2_=Pt{mVlaL~%Hx1OUX6L}5%dNw4#g!```Jv`?a<`ynWb
zRaG;qWDw2fQhkECbB<u#*$TzBijmca9*azIZD;m^I_RN`a6PoEG0&ll2bH4MD5Y7D
zd7CTvTgN|Z3m=RwtG>tt%oJbRl|CLO?i2Ce=Gubj@`^@<c^UTfjaOVptVRAN{Pu(}
z_#n8n)6R(=!M%fmR=J=kq&UxEH&MEhFu2T<Ko*1<h}gl%dYe*5YpQYjL2jZI-tdxv
z+>57)r;D{=qE<v-DHh%`6tyoc*?)!g3Gqz5GFZ;pg5+<&=Id3$d3qO`@3cZ?BQ(hT
zd4uQcmMQV_uZi@?K$Hc}3ct;Z5#Cy2==cE>21g)O=L}zN*oha31yE?b`n-Q6k|J~X
z(|~fGD7FzWsOZAI`7+Irl6_dyX%+!A@p14l(KS-v+sw}Kg=e?;L(Ol)SB1R~&wv{k
z2Mk?~YNoJ`-_9XRd;y+efTp=1BS5Ak@^5<g?C!i)QXt-Ll16*r`IHMj&1f!rtQ+x-
zwFR)-54s1><~?YDVcq*x&XTGNcV@>Os{Ii(y;IU-O8t^hiDmV?A0}5edSHWrmYM@P
z>IKP4CDyxfU~m=WzN@%Gj#Wdnd;jR6ixhvl#EaVFBh!E6yT=d2aQ1InebQ-a2z@eM
zZ;_4ixw1}>2vKBcy>fQb0BfID8THVF%9(QRW2MCt=@%-VJ?-hVFjB31n@Axm>e%m-
z70X@oDV@DtBF39?_avA+{5r{toJi?FL#{jF0T<v)>ArX2&h-j55CTzTW<@KCI0J9!
zz!BCn5tL>!SC`@LtXMOCTuJ}!Haw>J(GLtmz)RK~PG<0sA1#EUB~Z}%$GjuB^ocwK
zBN<;MwBiNw?d`zs4oFfWvCz{A)g!c9irdly<GI3&1J@~>cvklZXptBK&kURIjiFUa
z6U7p03X{mSUg!F|{fNXl?;RRe+qbVS<%h-h@HcO?GH}b1xxB%SxX^vzj<QYKgJ(Zh
z<+Hg?<PdB7CKAinejVt273mWgaEwHb>_wPNZ-wl&H-$v|M_G0)E_GYptDPGNv?Qk^
za!bA|IQ={g0c+qMr5+0eYdW>+8)MhE-ra5$N+8@p8-5@xuD$R%$%#CzzJWNp81Yp!
z@f#p9@=eRo-(yrl8-y}W9#O*;gOv{p>y(W=)`xnRALBOPC~#Ylllc5YY~)9_L(R?q
zx2jWSEhf4y_qB=j?^|62_dcLBTLova+y}186t_-W+Ur&r5${)i?~IxwBdL*?l?{P&
z-5#Z_>G+$5^Mrq4|8CT|6tKTMjk{Ms`hEV{FMZk11;flFP=Y8kr7drNpHVe=TGZ9U
zF4~%(htJwuYi>2Z?1L}~)w>Qqn@Cr1uqLgLOZMZGVBJ{lY!g%_HSZI%X`}4-oJ4A)
zeQLh4>KyNlO9J}1x;ceN!c1MGf(h6Oso1y+c`D3z*FfVnHEnTGfuQlGyR(}j3H^><
z`RD?L`D1@(P_pUAdfGviF7Fe|jH)puseM&fJa%(U)NzQap%l)`F8+DH-~VnpXgV*j
zBpW4+QtbXcy8lt)s*M}u9RZ>rWz^+biDFJntlRW@2&^Hk+nlIQr~+=xJLbIRf4aYb
zGsLBy?Q5M&_V(clyc2}bY88Wdn@aLA&uekaCH^13&?AKBe;a!`ExVo9M4y&)ybf-J
zQ4P`3(9lpp)^9xs=g<igiR_7s&+w(XEpNgJ&_;_E3{R4fDvOhZA(KHVsLn+@ndWxU
z5!d>#d8l_Z%Uxp5*R~beO|A#OPnLegvn2RZWjQ%JJA22mV(QxT=ZLvV6YtM(u{D;j
z_$t`m&_tX*cO$`_xDcj2XueLNT<LFc*aLc3;b5)%L_82(-E@@9u7s=7{K{dQU(=*D
zs&(3=tq_@(g~VU$GkTi|%YHf3|B{-0<{Z7bv^rYKcU|P@iuu}prr38>t*`iH=DcAp
z2nsyFbC1yNf5LmnxFM_ntLpaTFGatXYICGmwgmjQN89o1NpELssD*434NsCgv*~lD
zf@_6Nkw>B~)>cKp`WvQM7szb2Y{C?3pN~SH{6PqYw1`UA-w+wn->NoUdZi^^u<$*p
zyP*#4mGArzcA1Q`fW0xRe;r4uwb2})DOtF!sb{Ti5_6Z}`Qe_O?Yh@gBUX#qqP1>s
zvpm(dK^^jVC4|`%LNT-q8kpq99oEsOu)$0`C10^DR4XG$`j>rf8=BwRfT3T-9K2{`
zkFoQjWC@@XqQ-={6pSonz~-;^nVwMM)|$J~wr{26Rux7UO>z@+)mY#sYvIgvb~s+|
z;;Zj1y=N1CT4>6Vpo%BXw)V?O@Jhw5_k&J{rKjKplaK%0>Jt)lH9*DPDo|pvr|d9R
zjeBF`?s*%ZjUtHPhm-LS8|S{x%3uG|gHc)0$TQELUhq&3`x$*hwLwLi2ZRyBKr_p!
zmAyT!Ll=@5Aa{Tq({}9@6<lVCMg^Fq(j(_DR9e@_<d&FTk%PiePTvH|KJa?(U67Wk
z<Iqf%Od#|DuF@Xp9P36$Z9~FZ?E3?w=uy}R#NUJBOWcKQ6+Y>p6%s+<*qlkX>FcHb
zm1lLxA#i4e`N_Jsn7<4@?vi;u7x~qUi}T)&k~SKFeSY<pL>CZVWx74S4NImL$felz
z<u%wH9xGL4{q}Nj+)W)u%6K~LITr`@Rl=sVrQckaVl58M8U4LtcyP6k851zIElbAV
z$|gMN)q<pD&|>h%q#lpzMqcFUywFTLPi44kiS7_+S#-0qV8uSC2a%>O`b}@|$bIe$
zori1&r?#zLp(&(+yr1F8g68JsF50%fO!~?z@bE;*DvA2^QIjIG`CjqqU+HHtgQT$z
zjfo|t(={zEK4b@{=oG!WZ~htBv2k-6n@E@45YBARcN>C%<rNhiMB$3_&qOe(gBe~y
zHvOabzKfrm-GXL3k~n{65V=%_M9Wxju3le@u0_uO<O~C>!D=6qgd+2p!NJ{iZ+<01
z=hH)m24T*Myh)`tm*kV>7s%L2F5ZDLD<t$luR`@+^Kq^ui%h~YvmS3`gbJck;mxUk
zk8=hghYuCi5;LHJ-u(DPrR|q6)8a?8gwa~7G`JvwX$dcVk{I7e7E5*zAfUWwa$nqg
zY=t&jksHN2@>2OOt({*AL=a1AhUd}77sixj&+aUxnQ^-;^Tf40J8XUyknxG-d+Hiq
z%m0s)v5D6S%;5V|{;yrTQ^Xms`&^TD?*jU1PwF~wMwBjEhS_1{SyfWtkSVFSPL!-i
z7QOQ2#`DNXnE*A)`dxdRek<jl%(=uvw%*ZQqG&7+FTUlQ6z>JM%V#Y$Ou0K9qT<+W
zD3Xy0aoBA9D~IW>r<W*_2J*c|#snFo>VH(j39TY2Ae=ll|ApjaUv&q~2&JWwNXq)X
zU&qaqw+~ut?Gb?GMX5bhnQ|49AGps>FXnT`o%Ez2oM|TB@bV3Q!%yA9&%xHuQO@4S
z@zMa|a4|_?F}Sdpw5gbwoS3AXn5-~dQVtI14(CJtAA*OMgR4{Ue+0Ocu=rnsq>P+|
z*nfm)=lmC!1lB)0n0Pt)1={*J0?H0vc8)yS9=6Vo#*VfQ!T<C+UjD`afVR4U+ItmL
G^#1@bXoG10
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_ef8c08_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_ef8c08_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..5dcbe012df24899416caee1a55d1bdf6c22fd837
GIT binary patch
literal 4599
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
GV*UpY-FO86
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_ffd27a_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd39c1b25bbb7734571820d7890a0401c2b70d53
GIT binary patch
literal 4599
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
Hp`-r?FR{ND
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..39e64723fe6a862f00d5e2578110ce781288070e
GIT binary patch
literal 6468
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
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/jquery-ui.min.css b/ui/libs/jquery-ui/themes/base/jquery-ui.min.css
new file mode 100644
index 0000000..91f16a3
--- /dev/null
+++ b/ui/libs/jquery-ui/themes/base/jquery-ui.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.11.2 - 2014-10-16
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdan…
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
\ No newline at end of file
diff --git a/ui/libs/jquery/LICENSE b/ui/libs/jquery/LICENSE
new file mode 100644
index 0000000..788a7c5
--- /dev/null
+++ b/ui/libs/jquery/LICENSE
@@ -0,0 +1,21 @@
+Copyright 2015 jQuery Foundation and other contributors
+http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/ui/libs/jquery/Makefile.am b/ui/libs/jquery/Makefile.am
new file mode 100644
index 0000000..1aef505
--- /dev/null
+++ b/ui/libs/jquery/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+jquerydir = $(datadir)/wok/ui/libs/jquery
+
+dist_jquery_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/jquery/jquery.min.js b/ui/libs/jquery/jquery.min.js
new file mode 100644
index 0000000..f364443
--- /dev/null
+++ b/ui/libs/jquery/jquery.min.js
@@ -0,0 +1,6 @@
+/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
+
+return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
+return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
+//# sourceMappingURL=jquery.min.map
\ No newline at end of file
diff --git a/ui/libs/themes/Makefile.am b/ui/libs/themes/Makefile.am
deleted file mode 100644
index 1ce56d9..0000000
--- a/ui/libs/themes/Makefile.am
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SUBDIRS = base
diff --git a/ui/libs/themes/base/Makefile.am b/ui/libs/themes/base/Makefile.am
deleted file mode 100644
index 1bbaa50..0000000
--- a/ui/libs/themes/base/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SUBDIRS = images
-
-basedir = $(datadir)/wok/ui/libs/themes/base
-
-dist_base_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/libs/themes/base/images/Makefile.am b/ui/libs/themes/base/images/Makefile.am
deleted file mode 100644
index dd619c8..0000000
--- a/ui/libs/themes/base/images/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-imagesdir = $(datadir)/wok/ui/libs/themes/base/images
-
-dist_images_DATA = *.png
diff --git a/ui/libs/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/ui/libs/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
deleted file mode 100644
index 7e4af1db3ac79771f85b26e10e3ae8710059765e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 457
zcmeAS@N?(olHy`uVBq!ia0vp^8Xzpd1SErbK34)MmUKs7M+SzC{oH>NS%G|oWRD<U
z28Jp%28M<f28Lfip@tU>45bDP46hOx7_4S6Fo+k-*%fF5lweEpc6a#?2AmP!?*K&}
zc)B=-WZZju!;p)~P{8fsS+h8Y3A#s59Xebow0`qkb;0a|Q5!b@SnY5ug{8al<myW)
z?dxy*?2_|ef49!4Dt=!3@!FzomihVL%%gwZzq3<*73Z=b?gTSa=I;)nnX%K4*6S*T
zp1sFixN_EO2KVK!?y#f<%s!x!#d>D(tOTvC3~9l}1^gjX_wAqN5%Tok#}4nScjONW
zuC&^HuyAEwLCGrSGYiZbJ+E-ha5p^|lErvtS=s}+6<Ke#?6|V=@}gi&lT6E^VqV?I
zya?00ihoo6y^Jjd{qul+RV{IiC`m~yNwrEYN(E93Mh1o^x`qb2hGrp#hE_(FR>r2f
n1}0Vp2H&16zJa14H$NpatrE9}_MOrxKn)C@u6{1-oD!M<f0eCi
diff --git a/ui/libs/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png b/ui/libs/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
deleted file mode 100644
index efd1ff3e7bbb28391e02788cff94f93bdb085679..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 351
zcmeAS@N?(olHy`uVBq!ia0vp^8XznHBp80OT7LpkEa{HEjtmSN`?>!lvI6-E$sR$z
z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e6mbzsPFCvp`;z
zr;B5V$MLsUPYX6E@VEx9@?|&6ay8;f`myuF-MNb1M(HzW_kEU|eed)0=e7D9W0*D9
zHOYiKOggP_TGyf1*jvZE!RmS=%X5deY=xtt6CQJU6iKG+<oz+X_<8q3u?5F`7o6f<
zaIRG0plfi6-mFE%7e(fFFMDxEe|8b$t>uffPdu6X1Lz9X64!{5l*E!$tK_0oAjM#0
zU}&OiXrOCo7Gh{<Wn^h(Y^rNuVr5|P?aAUBC>nC}Q!>*kacgMbDV+k;z~JfX=d#Wz
Gp$P!pes!Aw
diff --git a/ui/libs/themes/base/images/ui-bg_flat_10_000000_40x100.png b/ui/libs/themes/base/images/ui-bg_flat_10_000000_40x100.png
deleted file mode 100644
index 0a5aa914b236c0b1552513ab4d5fdda1aa4eef51..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 244
zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F2qYNp$opRhQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=aiY77hwEes65fI<x~7#K<o7#Ln9FfdrnU|<k0n6oR;1}MRl<n8Xlz<9SycnOfl
z@9E+gqH#VsL4tL015h7R1OsEKSz9?!O0~o_q9i4;B-JXpC>2OC7#SFv=o%X68k&U|
w8d@1yS{a+_8kkra7<_xO_y&rG-29Zxv`X9>+ILE)05vdpy85}Sb4q9e0Ooo;w*UYD
diff --git a/ui/libs/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png b/ui/libs/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
deleted file mode 100644
index 068406ca901c5d06855a86906b2e36d0d3f79980..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 301
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq*&4&eH|GXHuiJ>Nn{1`6_P!I
zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&61
z4^J1z5R22vKTKyPiu5Y2TAY7hVxPBR&H2P1b#orJiyiJ~<*`31QRkQXL-o*y)!h%x
znGe5@X}d2j`A@^}PiM-H$tGQHf`%LnpC-BAQ(ov705nsz#5JNMC9x#cD!C{XNHG{0
z7@FuB8t59Dg%}!I8ChBxo9Y^vSQ!|6d$RZjiiX_$l+3hB+#1?<N~ZudFnGH9xvX<a
GXaWF(5L_bw
diff --git a/ui/libs/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png b/ui/libs/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
deleted file mode 100644
index 979591a8a9e0232ca073fe0689418fe58a16da90..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 387
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fC<Rju*&f~kYY)9^mSxl*x1kgCy^D%S4j2<
z@?~JCQe$9fXklRZ1r%y{!N5>zz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^
zWR|CkV~EG`x99D-85t$mAKd@F*+VUM$~ukHXUpObgeREBN9LXpoBz~pv(Vg&OI9xy
zIa;#Q{_g4J0*9?_KQrG=jkHl_U}#H}IJVs}Qq5B$Xw{>WZ5atiOdlp3V!tRfU-re1
zQVTbiXtAl5B~#th+Y3@pGVD4#@1sD~x#iPsx14w%KK+u&{MbF!t_9wmR%~B57PbA0
zU&4FXpzZ{_)IXz8*O(oRKv$}kxJHzuB$lLFB^RXvDF!10Lla#?16@P25JN*NBTFk|
pQ(XfSD+7aXPZr-m(U6;;l9^VCTSNO!=@g&_22WQ%mvv4FO#o0qho}Gm
diff --git a/ui/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/ui/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644
index b1dc6be0aed5c308955956e5cb2c8dfcb1128ea3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 246
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADVB6cUq=Rpjs4tz5?O(Kg=CK)
zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&V7%KUyadP-
z^mK6y(Kw%+ks#5!xIpAl1H;se6O5NlHf91PRZCnWN>UO_QmvAUQh^kMk%6I!uAzah
zp;?Hbp_P%Pm9eR=fr*uY!M7)iZ=h(%%}>cptHiCLeW!E^Py>UftDnm{r-UW|!TUb#
diff --git a/ui/libs/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/ui/libs/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
deleted file mode 100644
index 8dc23e251b0505078f3a0912ddf41db6a89bf72e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5854
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
R;LcxOwQ;(FyX1T4zX0?Pvm^ij
diff --git a/ui/libs/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/ui/libs/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
deleted file mode 100644
index f9b25ef80d30a7a6f6fa40e7c77dcd78aba85ea5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 317
zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q*&4&eH|GXHuiJ>Nn{1`6_P!I
zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&7i
z2u~Ns5Q)o25AEf3aA0V-*e_{PA|fT+A^2utsBza39wB9crJ?W6{k5E{TTy8vDu0%P
zeWCi2JKE*V_dn|99lm;lH99HHr%CRj;q?Qe3)MmzZ6?YZxp&C#57L`*<)qw^(?B~^
zOI#yLQW8s2t&)pUffR$0fuV`6p@FWUS%{&bm64^Dv8k?siIsuDw<n8lplHa=PsvQH
W#I2!yr*sNX1B0ilpUXO@geCxOC}8*i
diff --git a/ui/libs/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/ui/libs/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
deleted file mode 100644
index 6a479d12cc304f7c5259a9db8a4827c13d693543..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 367
zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=aiY77hwEes65fI<x~7#K<o7#Ln9FfdrnU|<k0n6oR;1}MRn<n8YA9}GAnzTW|g
zw0XKXhG?9BI>C_ZP=J7od~g)E*+$=Uk7Um%7IiGy@^6Xv0k022VsdT*YtE+W*g57e
zNcdV|y;(=+TXOLhh6nuxi$!<LpWI+~sl7BX;r{we)de%z8fQzeUJ2IxP`8TZ+%}%q
zD~iInZrJ+2-@EkY5rqQj+c}F5{IrS{VLJCY>OnXE{r{KzAG1DtYTsG7sYVLuBGnSt
zh?11Vl2ohYqEsNoU}RuuqHAcNYiJf?XlP|*X=QAxYhYq!VDRn9;u|O$a`RI%(<*Um
UXx}NF0@T3Z>FVdQ&MBb@02WezsQ>@~
diff --git a/ui/libs/themes/base/images/ui-icons_222222_256x240.png b/ui/libs/themes/base/images/ui-icons_222222_256x240.png
deleted file mode 100644
index ed5adeabaf07b8784f55c2487e1cc70ee648c7fb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 7006
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
Gzx@w(&o~JH
diff --git a/ui/libs/themes/base/images/ui-icons_228ef1_256x240.png b/ui/libs/themes/base/images/ui-icons_228ef1_256x240.png
deleted file mode 100644
index 1e787bb98f072e1080b4557a20a86cd79b814040..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4599
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
G^#1@bXoG10
diff --git a/ui/libs/themes/base/images/ui-icons_ef8c08_256x240.png b/ui/libs/themes/base/images/ui-icons_ef8c08_256x240.png
deleted file mode 100644
index 5dcbe012df24899416caee1a55d1bdf6c22fd837..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4599
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
GV*UpY-FO86
diff --git a/ui/libs/themes/base/images/ui-icons_ffd27a_256x240.png b/ui/libs/themes/base/images/ui-icons_ffd27a_256x240.png
deleted file mode 100644
index dd39c1b25bbb7734571820d7890a0401c2b70d53..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4599
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
Hp`-r?FR{ND
diff --git a/ui/libs/themes/base/images/ui-icons_ffffff_256x240.png b/ui/libs/themes/base/images/ui-icons_ffffff_256x240.png
deleted file mode 100644
index 39e64723fe6a862f00d5e2578110ce781288070e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6468
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
diff --git a/ui/libs/themes/base/jquery-ui.min.css b/ui/libs/themes/base/jquery-ui.min.css
deleted file mode 100644
index 91f16a3..0000000
--- a/ui/libs/themes/base/jquery-ui.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.11.2 - 2014-10-16
-* http://jqueryui.com
-* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdan…
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
\ No newline at end of file
diff --git a/ui/pages/error.html.tmpl b/ui/pages/error.html.tmpl
index eea1179..c767ffb 100644
--- a/ui/pages/error.html.tmpl
+++ b/ui/pages/error.html.tmpl
@@ -27,7 +27,9 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
<title>Wok</title>
+ <link rel="shortcut icon" href="images/favicon.ico">
<link rel="stylesheet" href="$href("css/theme-default.min.css")">
</head>
diff --git a/ui/pages/login.html.tmpl b/ui/pages/login.html.tmpl
index 12ca69f..5aa10bb 100644
--- a/ui/pages/login.html.tmpl
+++ b/ui/pages/login.html.tmpl
@@ -30,11 +30,13 @@
<title>Kimchi</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
-<link rel="shortcut icon" href="images/logo.ico">
+<link rel="shortcut icon" href="images/favicon.ico">
+<link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')">
+<link rel="stylesheet" href="$href('css/jquery-ui.custom.css')">
<link rel="stylesheet" href="$href('css/theme-default.min.css')">
-<script src="$href('libs/jquery-1.10.0.min.js')"></script>
-<script src="$href('libs/jquery-ui.min.js')"></script>
-<script src="$href('libs/jquery-ui-i18n.min.js')"></script>
+<script src="$href('libs/jquery/jquery.min.js')"></script>
+<script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script>
+<script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script>
<script src="$href('js/wok.min.js')"></script>
<style type="text/css">
.topbar select {
diff --git a/ui/pages/wok-ui.html.tmpl b/ui/pages/wok-ui.html.tmpl
index 2dc4d7a..9ac0e89 100644
--- a/ui/pages/wok-ui.html.tmpl
+++ b/ui/pages/wok-ui.html.tmpl
@@ -29,14 +29,13 @@
<title>Kimchi</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
-<link rel="shortcut icon" href="images/logo.ico">
-<link rel="stylesheet" href="$href('libs/themes/base/jquery-ui.min.css')">
+<link rel="shortcut icon" href="images/favicon.ico">
+<link rel="stylesheet" href="$href('libs/jquery-ui/themes/base/jquery-ui.min.css')">
+<link rel="stylesheet" href="$href('css/jquery-ui.custom.css')">
<link rel="stylesheet" href="$href('css/theme-default.min.css')">
-<link rel="stylesheet" href="$href('css/fontawesome/fontawesome.css')">
-<link rel="stylesheet" href="$href('css/opensans/opensans.css')">
-<script src="$href('libs/jquery-1.10.0.min.js')"></script>
-<script src="$href('libs/jquery-ui.min.js')"></script>
-<script src="$href('libs/jquery-ui-i18n.min.js')"></script>
+<script src="$href('libs/jquery/jquery.min.js')"></script>
+<script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script>
+<script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script>
<script src="$href('js/wok.min.js')"></script>
<!-- This is used for detecting if the UI needs to be built -->
--
1.9.3
3
2
Hi All,
Kimchi latest master code is not working. Its failing to import magic
module. Can someone please look into the issue on priority? For now i have
commented this code and working on same.
[root@abhiram src]# ./kimchid
Traceback (most recent call last):
File "./kimchid", line 28, in <module>
import kimchi.server
File "/root/PycharmProjects/master/kimchi/src/kimchi/server.py", line 29,
in <module>
from kimchi import mockmodel
File "/root/PycharmProjects/master/kimchi/src/kimchi/mockmodel.py", line
41, in <module>
from kimchi.model.storagevolumes import StorageVolumeModel,
StorageVolumesModel
File
"/root/PycharmProjects/master/kimchi/src/kimchi/model/storagevolumes.py",
line 22, in <module>
import magic
ImportError: No module named magic
[root@abhiram src]#
vi /root/PycharmProjects/master/kimchi/src/kimchi/model/storagevolumes.py
[root@abhiram src]# pip install magic
Downloading/unpacking magic
Could not find any downloads that satisfy the requirement magic
Some externally hosted files were ignored (use --allow-external magic to
allow).
Cleaning up...
No distributions at all found for magic
Storing debug log for failure in /root/.pip/pip.log
[root@abhiram kimchi]# pwd
/root/PycharmProjects/master/kimchi
[root@abhiram kimchi]# git pull
Already up-to-date.
[root@abhiram kimchi]#
=======================================================
Thanks,
Abhiram Kulkarni,
Staff Software Engineer, Z Firmware Development,
IBM India Systems & Technology Lab, Bangalore, India.
Phone: +91 80 28063288
“Be who you are and say what you feel, because those who mind don't matter,
and those who matter don't mind.”
=======================================================
2
2
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Changed the error and warning messages in Wok from the format KCHXXX0000{E,W}
to WOKXXX0000{E,W}.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
plugins/kimchi/tests/test_exception.py | 8 +++----
plugins/kimchi/tests/utils.py | 2 +-
plugins/kimchi/utils.py | 2 +-
src/wok/asynctask.py | 4 ++--
src/wok/auth.py | 10 ++++----
src/wok/control/base.py | 12 +++++-----
src/wok/control/utils.py | 6 ++---
src/wok/i18n.py | 44 +++++++++++++++++-----------------
src/wok/objectstore.py | 4 ++--
src/wok/root.py | 2 +-
src/wok/utils.py | 20 ++++++++--------
11 files changed, 57 insertions(+), 57 deletions(-)
diff --git a/plugins/kimchi/tests/test_exception.py b/plugins/kimchi/tests/test_exception.py
index 2b89adb..4459aa6 100644
--- a/plugins/kimchi/tests/test_exception.py
+++ b/plugins/kimchi/tests/test_exception.py
@@ -63,7 +63,7 @@ class ExceptionTests(unittest.TestCase):
# test 405 wrong method
resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
- msg = u'KCHAPI0002E: Delete is not allowed for wokroot'
+ msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
self.assertEquals('405 Method Not Allowed', resp.get('code'))
self.assertEquals(msg, resp.get('reason'))
@@ -71,7 +71,7 @@ class ExceptionTests(unittest.TestCase):
resp = json.loads(
request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
)
- msg = u'KCHAPI0006E: Unable to parse JSON request'
+ msg = u'WOKAPI0006E: Unable to parse JSON request'
self.assertEquals('400 Bad Request', resp.get('code'))
self.assertEquals(msg, resp.get('reason'))
self.assertNotIn('call_stack', resp)
@@ -99,7 +99,7 @@ class ExceptionTests(unittest.TestCase):
# test 405 wrong method
resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read())
- msg = u'KCHAPI0002E: Delete is not allowed for wokroot'
+ msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
self.assertEquals('405 Method Not Allowed', resp.get('code'))
self.assertEquals(msg, resp.get('reason'))
@@ -107,7 +107,7 @@ class ExceptionTests(unittest.TestCase):
resp = json.loads(
request(host, ssl_port, '/plugins/kimchi/vms', '{', 'POST').read()
)
- msg = u'KCHAPI0006E: Unable to parse JSON request'
+ msg = u'WOKAPI0006E: Unable to parse JSON request'
self.assertEquals('400 Bad Request', resp.get('code'))
self.assertEquals(msg, resp.get('reason'))
self.assertIn('call_stack', resp)
diff --git a/plugins/kimchi/tests/utils.py b/plugins/kimchi/tests/utils.py
index f80b14f..ecaa87f 100644
--- a/plugins/kimchi/tests/utils.py
+++ b/plugins/kimchi/tests/utils.py
@@ -205,7 +205,7 @@ class FakeUser(User):
try:
return mockmodel.fake_user[username] == password
except KeyError, e:
- raise OperationFailed("KCHAUTH0001E", {'username': 'username',
+ raise OperationFailed("WOKAUTH0001E", {'username': 'username',
'code': e.message})
diff --git a/plugins/kimchi/utils.py b/plugins/kimchi/utils.py
index 92ca83a..2480362 100644
--- a/plugins/kimchi/utils.py
+++ b/plugins/kimchi/utils.py
@@ -27,7 +27,7 @@ def _uri_to_name(collection, uri):
expr = '/plugins/kimchi/%s/(.*?)$' % collection
m = re.match(expr, uri)
if not m:
- raise InvalidParameter("KCHUTILS0001E", {'uri': uri})
+ raise InvalidParameter("WOKUTILS0001E", {'uri': uri})
return m.group(1)
diff --git a/src/wok/asynctask.py b/src/wok/asynctask.py
index 1e0ec4b..e3e10d5 100644
--- a/src/wok/asynctask.py
+++ b/src/wok/asynctask.py
@@ -28,7 +28,7 @@ from wok.exception import OperationFailed
class AsyncTask(object):
def __init__(self, id, target_uri, fn, objstore, opaque=None):
if objstore is None:
- raise OperationFailed("KCHASYNC0001E")
+ raise OperationFailed("WOKASYNC0001E")
self.id = str(id)
self.target_uri = target_uri
@@ -62,7 +62,7 @@ class AsyncTask(object):
with self.objstore as session:
session.store('task', self.id, obj)
except Exception as e:
- raise OperationFailed('KCHASYNC0002E', {'err': e.message})
+ raise OperationFailed('WOKASYNC0002E', {'err': e.message})
def _run_helper(self, opaque, cb):
cherrypy.serving.request = self._cp_request
diff --git a/src/wok/auth.py b/src/wok/auth.py
index cc470b6..6ae8bfc 100644
--- a/src/wok/auth.py
+++ b/src/wok/auth.py
@@ -179,7 +179,7 @@ class PAMUser(User):
if result.value != 0:
msg_args = {'username': username, 'code': result.value}
- raise OperationFailed("KCHAUTH0001E", msg_args)
+ raise OperationFailed("WOKAUTH0001E", msg_args)
return True
@@ -217,14 +217,14 @@ class LDAPUser(User):
return True
except ldap.INVALID_CREDENTIALS:
# invalid user password
- raise OperationFailed("KCHAUTH0002E")
+ raise OperationFailed("WOKAUTH0002E")
except ldap.NO_SUCH_OBJECT:
# ldap search base specified wrongly.
- raise OperationFailed("KCHAUTH0005E", {"item": 'ldap_search_base',
+ raise OperationFailed("WOKAUTH0005E", {"item": 'ldap_search_base',
"value": ldap_search_base})
except ldap.LDAPError, e:
arg = {"username": username, "code": e.message}
- raise OperationFailed("KCHAUTH0001E", arg)
+ raise OperationFailed("WOKAUTH0001E", arg)
def get_groups(self):
return self.user[USER_GROUPS]
@@ -348,5 +348,5 @@ def wokauth():
if not from_browser():
cherrypy.response.headers['WWW-Authenticate'] = 'Basic realm=wok'
- e = InvalidOperation('KCHAUTH0002E')
+ e = InvalidOperation('WOKAUTH0002E')
raise cherrypy.HTTPError(401, e.message.encode('utf-8'))
diff --git a/src/wok/control/base.py b/src/wok/control/base.py
index 5242f51..f2ad552 100644
--- a/src/wok/control/base.py
+++ b/src/wok/control/base.py
@@ -102,7 +102,7 @@ class Resource(object):
try:
self.lookup()
if not self.is_authorized():
- raise UnauthorizedError('KCHAPI0009E')
+ raise UnauthorizedError('WOKAPI0009E')
model_args = list(self.model_args)
if action_args is not None:
@@ -147,7 +147,7 @@ class Resource(object):
fn(*self.model_args)
cherrypy.response.status = 204
except AttributeError:
- e = InvalidOperation('KCHAPI0002E', {'resource':
+ e = InvalidOperation('WOKAPI0002E', {'resource':
get_class_name(self)})
raise cherrypy.HTTPError(405, e.message)
except OperationFailed, e:
@@ -163,7 +163,7 @@ class Resource(object):
try:
self.lookup()
if not self.is_authorized():
- raise UnauthorizedError('KCHAPI0009E')
+ raise UnauthorizedError('WOKAPI0009E')
return {'GET': self.get,
'DELETE': self.delete,
@@ -198,7 +198,7 @@ class Resource(object):
try:
update = getattr(self.model, model_fn(self, 'update'))
except AttributeError:
- e = InvalidOperation('KCHAPI0003E', {'resource':
+ e = InvalidOperation('WOKAPI0003E', {'resource':
get_class_name(self)})
raise cherrypy.HTTPError(405, e.message)
@@ -253,7 +253,7 @@ class Collection(object):
try:
create = getattr(self.model, model_fn(self, 'create'))
except AttributeError:
- e = InvalidOperation('KCHAPI0005E', {'resource':
+ e = InvalidOperation('WOKAPI0005E', {'resource':
get_class_name(self)})
raise cherrypy.HTTPError(405, e.message)
@@ -353,7 +353,7 @@ class AsyncCollection(Collection):
try:
create = getattr(self.model, model_fn(self, 'create'))
except AttributeError:
- e = InvalidOperation('KCHAPI0005E', {'resource':
+ e = InvalidOperation('WOKAPI0005E', {'resource':
get_class_name(self)})
raise cherrypy.HTTPError(405, e.message)
diff --git a/src/wok/control/utils.py b/src/wok/control/utils.py
index 496320c..56f9e7f 100644
--- a/src/wok/control/utils.py
+++ b/src/wok/control/utils.py
@@ -79,12 +79,12 @@ def parse_request():
try:
return json.loads(rawbody)
except ValueError:
- e = OperationFailed('KCHAPI0006E')
+ e = OperationFailed('WOKAPI0006E')
raise cherrypy.HTTPError(400, e.message)
elif mime_in_header('Content-Type', 'multipart/form-data'):
return cherrypy.request.params
else:
- e = OperationFailed('KCHAPI0007E')
+ e = OperationFailed('WOKAPI0007E')
raise cherrypy.HTTPError(415, e.message)
@@ -111,7 +111,7 @@ def validate_params(params, instance, action):
raise InvalidParameter(e.schema['error'], {'value':
str(e.instance)})
else:
- raise InvalidParameter("KCHAPI0008E", {"err": str(e.message)})
+ raise InvalidParameter("WOKAPI0008E", {"err": str(e.message)})
class UrlSubNode(object):
diff --git a/src/wok/i18n.py b/src/wok/i18n.py
index 1556e37..43a1edf 100644
--- a/src/wok/i18n.py
+++ b/src/wok/i18n.py
@@ -23,26 +23,26 @@ _ = gettext.gettext
messages = {
- "KCHAPI0002E": _("Delete is not allowed for %(resource)s"),
- "KCHAPI0003E": _("%(resource)s does not implement update method"),
- "KCHAPI0005E": _("Create is not allowed for %(resource)s"),
- "KCHAPI0006E": _("Unable to parse JSON request"),
- "KCHAPI0007E": _("This API only supports JSON"),
- "KCHAPI0008E": _("Parameters does not match requirement in schema: %(err)s"),
- "KCHAPI0009E": _("You don't have permission to perform this operation."),
-
- "KCHASYNC0001E": _("Datastore is not initiated in the model object."),
- "KCHASYNC0002E": _("Unable to start task due error: %(err)s"),
-
- "KCHAUTH0001E": _("Authentication failed for user '%(username)s'. [Error code: %(code)s]"),
- "KCHAUTH0002E": _("You are not authorized to access Kimchi"),
- "KCHAUTH0003E": _("Specify %(item)s to login into Kimchi"),
- "KCHAUTH0005E": _("Invalid LDAP configuration: %(item)s : %(value)s"),
-
- "KCHOBJST0001E": _("Unable to find %(item)s in datastore"),
-
- "KCHUTILS0001E": _("Invalid URI %(uri)s"),
- "KCHUTILS0002E": _("Timeout while running command '%(cmd)s' after %(seconds)s seconds"),
- "KCHUTILS0004E": _("Invalid data value '%(value)s'"),
- "KCHUTILS0005E": _("Invalid data unit '%(unit)s'"),
+ "WOKAPI0002E": _("Delete is not allowed for %(resource)s"),
+ "WOKAPI0003E": _("%(resource)s does not implement update method"),
+ "WOKAPI0005E": _("Create is not allowed for %(resource)s"),
+ "WOKAPI0006E": _("Unable to parse JSON request"),
+ "WOKAPI0007E": _("This API only supports JSON"),
+ "WOKAPI0008E": _("Parameters does not match requirement in schema: %(err)s"),
+ "WOKAPI0009E": _("You don't have permission to perform this operation."),
+
+ "WOKASYNC0001E": _("Datastore is not initiated in the model object."),
+ "WOKASYNC0002E": _("Unable to start task due error: %(err)s"),
+
+ "WOKAUTH0001E": _("Authentication failed for user '%(username)s'. [Error code: %(code)s]"),
+ "WOKAUTH0002E": _("You are not authorized to access Kimchi"),
+ "WOKAUTH0003E": _("Specify %(item)s to login into Kimchi"),
+ "WOKAUTH0005E": _("Invalid LDAP configuration: %(item)s : %(value)s"),
+
+ "WOKOBJST0001E": _("Unable to find %(item)s in datastore"),
+
+ "WOKUTILS0001E": _("Invalid URI %(uri)s"),
+ "WOKUTILS0002E": _("Timeout while running command '%(cmd)s' after %(seconds)s seconds"),
+ "WOKUTILS0004E": _("Invalid data value '%(value)s'"),
+ "WOKUTILS0005E": _("Invalid data unit '%(unit)s'"),
}
diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py
index 107b568..aa2a21c 100644
--- a/src/wok/objectstore.py
+++ b/src/wok/objectstore.py
@@ -58,7 +58,7 @@ class ObjectStoreSession(object):
jsonstr = res.fetchall()[0][0]
except IndexError:
self.conn.rollback()
- raise NotFoundError("KCHOBJST0001E", {'item': ident})
+ raise NotFoundError("WOKOBJST0001E", {'item': ident})
return json.loads(jsonstr)
def delete(self, obj_type, ident, ignore_missing=False):
@@ -67,7 +67,7 @@ class ObjectStoreSession(object):
(obj_type, ident))
if c.rowcount != 1 and not ignore_missing:
self.conn.rollback()
- raise NotFoundError("KCHOBJST0001E", {'item': ident})
+ raise NotFoundError("WOKOBJST0001E", {'item': ident})
self.conn.commit()
def store(self, obj_type, ident, data):
diff --git a/src/wok/root.py b/src/wok/root.py
index 3a86a74..4262bd0 100644
--- a/src/wok/root.py
+++ b/src/wok/root.py
@@ -132,7 +132,7 @@ class WokRoot(Root):
username = params['username']
password = params['password']
except KeyError, item:
- e = MissingParameter('KCHAUTH0003E', {'item': str(item)})
+ e = MissingParameter('WOKAUTH0003E', {'item': str(item)})
raise cherrypy.HTTPError(400, e.message)
try:
diff --git a/src/wok/utils.py b/src/wok/utils.py
index 8d51f22..1970e1f 100644
--- a/src/wok/utils.py
+++ b/src/wok/utils.py
@@ -202,7 +202,7 @@ def run_command(cmd, timeout=None):
wok_log.error(msg)
msg_args = {'cmd': " ".join(cmd), 'seconds': str(timeout)}
- raise TimeoutExpired("KCHUTILS0002E", msg_args)
+ raise TimeoutExpired("WOKUTILS0002E", msg_args)
return out, error, proc.returncode
except TimeoutExpired:
@@ -295,10 +295,10 @@ def validate_repo_url(url):
if url_parts[0] in ['http', 'https', 'ftp']:
if not check_url_path(url):
- raise InvalidParameter("KCHUTILS0001E", {'uri': url})
+ raise InvalidParameter("WOKUTILS0001E", {'uri': url})
elif url_parts[0] == 'file':
if not os.path.exists(url_parts[1]):
- raise InvalidParameter("KCHUTILS0001E", {'uri': url})
+ raise InvalidParameter("WOKUTILS0001E", {'uri': url})
else:
raise InvalidParameter("KCHREPOS0002E")
@@ -466,9 +466,9 @@ def convert_data_size(value, from_unit, to_unit='B'):
DEFAULT_SUFFIX = 'B'
if not from_unit:
- raise InvalidParameter('KCHUTILS0005E', {'unit': from_unit})
+ raise InvalidParameter('WOKUTILS0005E', {'unit': from_unit})
if not to_unit:
- raise InvalidParameter('KCHUTILS0005E', {'unit': to_unit})
+ raise InvalidParameter('WOKUTILS0005E', {'unit': to_unit})
# set the default suffix
if from_unit[-1] not in SUFFIXES_WITH_MULT:
@@ -486,15 +486,15 @@ def convert_data_size(value, from_unit, to_unit='B'):
try:
value = float(value)
except TypeError:
- raise InvalidParameter('KCHUTILS0004E', {'value': value})
+ raise InvalidParameter('WOKUTILS0004E', {'value': value})
if from_p != '' and from_p not in (SI_PREFIXES + IEC_PREFIXES):
- raise InvalidParameter('KCHUTILS0005E', {'unit': from_unit})
+ raise InvalidParameter('WOKUTILS0005E', {'unit': from_unit})
if from_s not in SUFFIXES_WITH_MULT:
- raise InvalidParameter('KCHUTILS0005E', {'unit': from_unit})
+ raise InvalidParameter('WOKUTILS0005E', {'unit': from_unit})
if to_p != '' and to_p not in (SI_PREFIXES + IEC_PREFIXES):
- raise InvalidParameter('KCHUTILS0005E', {'unit': to_unit})
+ raise InvalidParameter('WOKUTILS0005E', {'unit': to_unit})
if to_s not in SUFFIXES_WITH_MULT:
- raise InvalidParameter('KCHUTILS0005E', {'unit': to_unit})
+ raise InvalidParameter('WOKUTILS0005E', {'unit': to_unit})
# if the units are the same, return the input value
if from_unit == to_unit:
--
2.4.3
2
1
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Move the KCHUTILS0001E ("Invalid URI %(uri)s") message error from Kimchi to Wok
to be usable to any plugin.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
plugins/kimchi/i18n.py | 1 -
src/wok/i18n.py | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/kimchi/i18n.py b/plugins/kimchi/i18n.py
index 220bd24..253f00d 100644
--- a/plugins/kimchi/i18n.py
+++ b/plugins/kimchi/i18n.py
@@ -269,7 +269,6 @@ messages = {
"KCHPKGUPD0003E": _("Error while getting packages marked to be updated. Details: %(err)s"),
"KCHPKGUPD0004E": _("There is no compatible package manager for this system."),
- "KCHUTILS0001E": _("Invalid URI %(uri)s"),
"KCHUTILS0003E": _("Unable to choose a virtual machine name"),
"KCHVMSTOR0002E": _("Invalid storage type. Types supported: 'cdrom', 'disk'"),
diff --git a/src/wok/i18n.py b/src/wok/i18n.py
index 649283b..1556e37 100644
--- a/src/wok/i18n.py
+++ b/src/wok/i18n.py
@@ -41,6 +41,7 @@ messages = {
"KCHOBJST0001E": _("Unable to find %(item)s in datastore"),
+ "KCHUTILS0001E": _("Invalid URI %(uri)s"),
"KCHUTILS0002E": _("Timeout while running command '%(cmd)s' after %(seconds)s seconds"),
"KCHUTILS0004E": _("Invalid data value '%(value)s'"),
"KCHUTILS0005E": _("Invalid data unit '%(unit)s'"),
--
2.4.3
2
1
Wok is only a framework and does not know which configuratin is required
for each plugin. Based on that, the plugin is responsible for its API
configuration.
Update Kimchi configuration accordingly.
This patch also prevents the follwing error on server start up:
CherryPy Checker:
'/home/alinefm/wok/plugins/kimchi/ui/libs' (root + dir) is not an existing filesystem path.
section: [/libs]
root: None
dir: '/home/alinefm/wok/plugins/kimchi/ui/libs'
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
plugins/kimchi/config.py.in | 60 +++++++++++++++++++++++++--------------------
src/wok/config.py.in | 8 ++----
2 files changed, 35 insertions(+), 33 deletions(-)
diff --git a/plugins/kimchi/config.py.in b/plugins/kimchi/config.py.in
index 4b82e45..6ae0ccd 100644
--- a/plugins/kimchi/config.py.in
+++ b/plugins/kimchi/config.py.in
@@ -23,7 +23,7 @@ import os
import platform
import threading
-from wok.config import PluginConfig, PluginPaths
+from wok.config import CACHEEXPIRES, PluginConfig, PluginPaths
from wok.xmlutils.utils import xpath_get_text
kimchiLock = threading.Lock()
@@ -107,32 +107,38 @@ class KimchiConfig(PluginConfig):
def __init__(self):
super(KimchiConfig, self).__init__('kimchi')
- custom_config = {
- '/novnc': {
+ static_config = {
+ '/novnc': {'type': 'dir',
+ 'path': kimchiPaths.novnc_dir},
+ '/spice-html5': {'type': 'dir',
+ 'path': kimchiPaths.spice_dir},
+ '/spice_auto.html': {'type': 'file',
+ 'path': kimchiPaths.spice_file},
+ '/spice-html5/spice.css': {'type': 'file',
+ 'path': kimchiPaths.spice_css_file}}
+
+ custom_config = {}
+ for uri, data in static_config.iteritems():
+ custom_config[uri] = {'tools.nocache.on': True,
+ 'tools.wokauth.on': True}
+ path = data['path']
+ if data['type'] == 'dir':
+ custom_config[uri].update({'tools.staticdir.on': True,
+ 'tools.staticdir.dir': path})
+ elif data['type'] == 'file':
+ custom_config[uri].update({'tools.staticfile.on': True,
+ 'tools.staticfile.filename': path})
+
+ for dirname in ('css', 'js', 'images'):
+ custom_config['/' + dirname] = {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': kimchiPaths.novnc_dir,
- 'tools.nocache.on': True,
- 'tools.wokauth.on': True,
- },
-
- '/spice_auto.html': {
- 'tools.staticfile.on': True,
- 'tools.staticfile.filename': kimchiPaths.spice_file,
- 'tools.nocache.on': True,
- 'tools.wokauth.on': True,
- },
-
- '/spice-html5': {
- 'tools.staticdir.on': True,
- 'tools.staticdir.dir': kimchiPaths.spice_dir,
- 'tools.nocache.on': True,
- },
-
- '/spice-html5/spice.css': {
- 'tools.staticfile.on': True,
- 'tools.staticfile.filename': kimchiPaths.spice_css_file,
- 'tools.nocache.on': True,
- },
- }
+ 'tools.staticdir.dir': os.path.join(kimchiPaths.ui_dir,
+ dirname),
+ 'tools.wokauth.on': False,
+ 'tools.nocache.on': False}
+ if dirname != 'images':
+ custom_config['/' + dirname].update({
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES})
self.update(custom_config)
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index da17257..616c013 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -25,6 +25,7 @@ from ConfigParser import SafeConfigParser
__version__ = "@wokversion@"
__release__ = "@wokrelease@"
+CACHEEXPIRES = 31536000 # expires is one year.
DEFAULT_LOG_LEVEL = "debug"
FONT_FILES = {'fontawesome': ['fontawesome-webfont.ttf'],
@@ -126,10 +127,6 @@ class PluginPaths(Paths):
class UIConfig(dict):
-
- # expires is one year.
- CACHEEXPIRES = 31536000
-
def __init__(self, paths):
ui_configs = {}
for sub_dir in ('css', 'js', 'libs', 'images'):
@@ -141,7 +138,7 @@ class UIConfig(dict):
if sub_dir != 'images':
ui_configs['/' + sub_dir].update({
'tools.expires.on': True,
- 'tools.expires.secs': self.CACHEEXPIRES})
+ 'tools.expires.secs': CACHEEXPIRES})
for font, files in FONT_FILES.iteritems():
paths = FONTS_PATH[font]
@@ -207,7 +204,6 @@ class PluginConfig(dict):
'config/tab-ext.xml'),
'tools.nocache.on': True}}
self.update(plugin_config)
- self.update(UIConfig(PluginPaths(plugin_name)))
def _get_config():
--
2.1.0
2
2
[PATCH] [WOK] Moving JS libraries to new folders and added license files
by sguimaraes943@gmail.com 21 Sep '15
by sguimaraes943@gmail.com 21 Sep '15
21 Sep '15
From: samhenri <samuel.guimaraes(a)eldorado.org.br>
This commit updates jquery and jquery-ui to the latest compatible versions (v1.11.3 and v1.11.4) and adds all the JS libraries that are required in order to run and develop the new-ui.
Updated the old-ui login.html.tmpl and wok-ui.html.tmpl to point to correct Js path otherwise the CherryPy would throw a 404 error when loading the pages.
Moved all libs/themes files to libs/jquery-ui/themes/ and added a copy of jquery-ui license to this folder.
All the new libraries where added to ui/libs folder and configure.ac was properly updated to read the new Makefiles.
*New-ui related:
*Removed logo.ico and updated with favicon.ico in high resolution (name convention for IE9 compatibility). This change can be spotted in the browser tab bar with the old-ui.
*Updated opensans.css to point to local font family when the user already has it installed.
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
configure.ac | 12 +-
ui/css/Makefile.am | 2 +-
ui/css/jquery-ui.custom.css | 203 +++++++++++++++++++++
ui/css/opensans/opensans.css | 20 +-
ui/images/favicon.ico | Bin 0 -> 15086 bytes
ui/images/logo.ico | Bin 1214 -> 0 bytes
ui/images/theme-default/Makefile.am | 2 +-
ui/libs/Makefile.am | 6 +-
ui/libs/bootstrap-select/LICENSE | 21 +++
ui/libs/bootstrap-select/Makefile.am | 20 ++
ui/libs/bootstrap-select/bootstrap-select.min.js | 8 +
ui/libs/bootstrap/LICENSE | 21 +++
ui/libs/bootstrap/Makefile.am | 20 ++
ui/libs/bootstrap/bootstrap.min.js | 7 +
ui/libs/es5-shim/LICENSE | 22 +++
ui/libs/es5-shim/Makefile.am | 20 ++
ui/libs/es5-shim/es5-shim.min.js | 7 +
ui/libs/jquery-1.10.0.min.js | 6 -
ui/libs/jquery-i18n/LICENSE | 19 ++
ui/libs/jquery-i18n/Makefile.am | 20 ++
ui/libs/jquery-i18n/jquery.i18n.min.js | 1 +
ui/libs/jquery-ui-i18n.min.js | 7 -
ui/libs/jquery-ui.min.js | 13 --
ui/libs/jquery-ui/LICENSE | 44 +++++
ui/libs/jquery-ui/Makefile.am | 22 +++
ui/libs/jquery-ui/jquery-ui-i18n.min.js | 7 +
ui/libs/jquery-ui/jquery-ui.min.js | 13 ++
ui/libs/jquery-ui/themes/Makefile.am | 18 ++
ui/libs/jquery-ui/themes/base/Makefile.am | 22 +++
ui/libs/jquery-ui/themes/base/images/Makefile.am | 20 ++
.../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 457 bytes
.../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 351 bytes
.../base/images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 244 bytes
.../base/images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 301 bytes
.../base/images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 387 bytes
.../base/images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 246 bytes
.../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 5854 bytes
.../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 317 bytes
.../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 367 bytes
.../themes/base/images/ui-icons_222222_256x240.png | Bin 0 -> 7006 bytes
.../themes/base/images/ui-icons_228ef1_256x240.png | Bin 0 -> 4599 bytes
.../themes/base/images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4599 bytes
.../themes/base/images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4599 bytes
.../themes/base/images/ui-icons_ffffff_256x240.png | Bin 0 -> 6468 bytes
ui/libs/jquery-ui/themes/base/jquery-ui.min.css | 7 +
ui/libs/jquery/LICENSE | 21 +++
ui/libs/jquery/Makefile.am | 20 ++
ui/libs/jquery/jquery.min.js | 6 +
ui/libs/themes/Makefile.am | 18 --
ui/libs/themes/base/Makefile.am | 22 ---
ui/libs/themes/base/images/Makefile.am | 20 --
.../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 457 -> 0 bytes
.../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 351 -> 0 bytes
.../base/images/ui-bg_flat_10_000000_40x100.png | Bin 244 -> 0 bytes
.../base/images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 301 -> 0 bytes
.../base/images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 387 -> 0 bytes
.../base/images/ui-bg_glass_65_ffffff_1x400.png | Bin 246 -> 0 bytes
.../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 5854 -> 0 bytes
.../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 317 -> 0 bytes
.../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 367 -> 0 bytes
.../themes/base/images/ui-icons_222222_256x240.png | Bin 7006 -> 0 bytes
.../themes/base/images/ui-icons_228ef1_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ef8c08_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ffd27a_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ffffff_256x240.png | Bin 6468 -> 0 bytes
ui/libs/themes/base/jquery-ui.min.css | 7 -
ui/pages/error.html.tmpl | 2 +
ui/pages/login.html.tmpl | 10 +-
ui/pages/wok-ui.html.tmpl | 13 +-
69 files changed, 625 insertions(+), 124 deletions(-)
create mode 100644 ui/css/jquery-ui.custom.css
create mode 100644 ui/images/favicon.ico
delete mode 100644 ui/images/logo.ico
create mode 100644 ui/libs/bootstrap-select/LICENSE
create mode 100644 ui/libs/bootstrap-select/Makefile.am
create mode 100644 ui/libs/bootstrap-select/bootstrap-select.min.js
create mode 100644 ui/libs/bootstrap/LICENSE
create mode 100644 ui/libs/bootstrap/Makefile.am
create mode 100644 ui/libs/bootstrap/bootstrap.min.js
create mode 100644 ui/libs/es5-shim/LICENSE
create mode 100644 ui/libs/es5-shim/Makefile.am
create mode 100644 ui/libs/es5-shim/es5-shim.min.js
delete mode 100644 ui/libs/jquery-1.10.0.min.js
create mode 100644 ui/libs/jquery-i18n/LICENSE
create mode 100644 ui/libs/jquery-i18n/Makefile.am
create mode 100644 ui/libs/jquery-i18n/jquery.i18n.min.js
delete mode 100644 ui/libs/jquery-ui-i18n.min.js
delete mode 100644 ui/libs/jquery-ui.min.js
create mode 100644 ui/libs/jquery-ui/LICENSE
create mode 100644 ui/libs/jquery-ui/Makefile.am
create mode 100644 ui/libs/jquery-ui/jquery-ui-i18n.min.js
create mode 100644 ui/libs/jquery-ui/jquery-ui.min.js
create mode 100644 ui/libs/jquery-ui/themes/Makefile.am
create mode 100644 ui/libs/jquery-ui/themes/base/Makefile.am
create mode 100644 ui/libs/jquery-ui/themes/base/images/Makefile.am
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_flat_10_000000_40x100.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_222222_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_228ef1_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_ef8c08_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_ffd27a_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png
create mode 100644 ui/libs/jquery-ui/themes/base/jquery-ui.min.css
create mode 100644 ui/libs/jquery/LICENSE
create mode 100644 ui/libs/jquery/Makefile.am
create mode 100644 ui/libs/jquery/jquery.min.js
delete mode 100644 ui/libs/themes/Makefile.am
delete mode 100644 ui/libs/themes/base/Makefile.am
delete mode 100644 ui/libs/themes/base/images/Makefile.am
delete mode 100644 ui/libs/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_flat_10_000000_40x100.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
delete mode 100644 ui/libs/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_222222_256x240.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_228ef1_256x240.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_ef8c08_256x240.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_ffd27a_256x240.png
delete mode 100644 ui/libs/themes/base/images/ui-icons_ffffff_256x240.png
delete mode 100644 ui/libs/themes/base/jquery-ui.min.css
diff --git a/configure.ac b/configure.ac
index 2c76bad..e11a17d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -110,9 +110,15 @@ AC_CONFIG_FILES([
ui/images/theme-default/Makefile
ui/js/Makefile
ui/libs/Makefile
- ui/libs/themes/Makefile
- ui/libs/themes/base/Makefile
- ui/libs/themes/base/images/Makefile
+ ui/libs/bootstrap/Makefile
+ ui/libs/bootstrap-select/Makefile
+ ui/libs/es5-shim/Makefile
+ ui/libs/jquery/Makefile
+ ui/libs/jquery-i18n/Makefile
+ ui/libs/jquery-ui/Makefile
+ ui/libs/jquery-ui/themes/Makefile
+ ui/libs/jquery-ui/themes/base/Makefile
+ ui/libs/jquery-ui/themes/base/images/Makefile
ui/pages/Makefile
ui/pages/websockify/Makefile
contrib/Makefile
diff --git a/ui/css/Makefile.am b/ui/css/Makefile.am
index aeebe02..6f8fe05 100644
--- a/ui/css/Makefile.am
+++ b/ui/css/Makefile.am
@@ -20,7 +20,7 @@ SUBDIRS = fontawesome opensans
EXTRA_DIST = theme-default
cssdir = $(datadir)/wok/ui/css
-dist_css_DATA = theme-default.min.css
+dist_css_DATA = theme-default.min.css jquery-ui.custom.css
theme-default.min.css: theme-default/*.css
cat $^ > $@
diff --git a/ui/css/jquery-ui.custom.css b/ui/css/jquery-ui.custom.css
new file mode 100644
index 0000000..48b44ab
--- /dev/null
+++ b/ui/css/jquery-ui.custom.css
@@ -0,0 +1,203 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.ui-button-primary {
+ border-radius: 8px 8px 8px 8px;
+}
+
+.ui-button-primary.ui-state-default {
+ background: none repeat scroll 0 0 #0066FF;
+ border: 0 none;
+}
+
+.ui-button-primary.ui-state-disabled {
+ background-color: silver;
+ opacity: 1;
+}
+
+.ui-button-primary.ui-state-hover {
+ background: #0044DD;
+}
+
+.ui-button-primary .ui-button-text {
+ padding: 10px 23px;
+ font-size: 13px;
+ color: #EEEEEE;
+}
+
+.ui-button-secondary {
+ border: 1px solid #AAAAAA;
+ border-radius: 5px 5px 5px 5px;
+ cursor: pointer;
+}
+
+.ui-button-secondary.ui-state-default {
+ background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat
+ scroll 0 0 transparent;
+ box-shadow: -2px -2px 2px #EAEAEA, 2px 2px 2px #FFFFFF, 3px 3px 3px white
+ inset, -3px -3px 3px rgba(0, 0, 0, 0.25) inset;
+}
+
+.ui-button-secondary.ui-state-hover {
+ background: linear-gradient(to bottom, #d5d5d5 0%, #eeeeee 100%);
+ box-shadow: -2px -2px 2px #dadada, 2px 2px 2px #fff, 3px 3px 3px white
+ inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
+}
+
+.ui-button-secondary .ui-button-text {
+ font-size: 13px;
+ color: #333333;
+ text-overflow: ellipsis;
+ text-shadow: -1px -1px 1px #AAAAAA, 1px 1px 1px #FFFFFF;
+ white-space: nowrap;
+}
+
+.ui-button-secondary.ui-button-text-only .ui-button-text {
+ padding: 12px 23px 13px 20px;
+}
+
+.ui-button-secondary.ui-button-text-icon-secondary .ui-button-text {
+ padding: 12px 35px 13px 13px;
+}
+
+.ui-button-secondary .ui-button-icon-secondary {
+ padding-right: 5px;
+ width: 15px;
+ height: 15px;
+}
+
+.ui-menu {
+ background: linear-gradient(to bottom, #EEEEEE 0%, #CCCCCC 10px, #CCCCCC
+ 96%, #A5A5A5 100%) repeat scroll 0 0 transparent;
+ padding: 10px 10px 0;
+ width: 250px;
+}
+
+.ui-menu .ui-menu-item a {
+ background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat
+ scroll 0 0 transparent;
+ border: 1px solid #CCCCCC;
+ border-radius: 5px 5px 5px 5px;
+ box-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #EEEEEE;
+ display: block;
+ font-size: 13px;
+ line-height: 38px;
+ margin-bottom: 10px;
+ text-align: center;
+ text-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #FFFFFF;
+ width: 96%;
+}
+
+.ui-menu .ui-menu-item a.ui-state-focus {
+ background: linear-gradient(to bottom, #EEEEEE 0%, #D5D5D5 100%) repeat
+ scroll 0 0 transparent;
+ box-shadow: -1px -1px 1px #BBBBBB, 1px 1px 1px #DDDDDD;
+ margin: 0px 0px 10px 0px;
+}
+
+.ui-menu .ui-menu-item a.red:not([disabled]) {
+ background: linear-gradient(to bottom, #FF3019 0%, #CF0404 100%) repeat
+ scroll 0 0 transparent;
+ border: 1px solid #B10F14;
+ color: #FFFFFF;
+ text-shadow: -1px -1px 1px #9E0505, 1px 1px 1px #FC5D4C;
+}
+
+.ui-menu .ui-menu-item a.red:hover:not([disabled]) {
+ background: linear-gradient(to bottom, #EF2009 0%, #BF0404 100%) repeat
+ scroll 0 0 transparent;
+}
+
+.ui-menu .ui-state-disabled {
+ opacity: 1;
+}
+
+.ui-menu .ui-state-disabled a {
+ color: gray;
+}
+
+.ui-widget-overlay {
+ background: url("../images/theme-default/bg-mask.png") repeat scroll
+ 0 0 transparent;
+ opacity: 1;
+}
+
+.ui-dialog {
+ background: none;
+ background-color: #EEEEEE;
+ border: 2px solid #0F71B4;
+ border-radius: 8px;
+ padding: 0px;
+}
+
+.ui-dialog .ui-dialog-titlebar {
+ border: none;
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ background: none;
+ padding: 13px 0px 13px 10px;
+ box-shadow: 0 1px 3px rgba(0,0,0,0.15), 0 -1px 0 rgba(0,0,0,0.05) inset;
+}
+
+.ui-dialog .ui-dialog-title {
+ font-size: 18px;
+ color: #0066CC;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ margin: 4px 0 0;
+ background: none repeat scroll 0 0 #EEEEEE;
+ border: 2px solid #CCCCCC;
+ border-radius: 35px 35px 35px 35px;
+ color: #CCCCCC;
+ cursor: pointer;
+ height: 35px;
+ width: 35px;
+ position: absolute;
+ right: 7px;
+ text-align: center;
+ top: 5px;
+}
+
+.ui-dialog .ui-dialog-titlebar .ui-state-hover {
+ border: 2px solid #444444;
+ color: #444444;
+}
+
+.ui-dialog .ui-dialog-titlebar .ui-button-text {
+ font-size: 24px;
+ font-weight: bold;
+ padding: 0px;
+ text-indent: 0px;
+}
+
+.ui-dialog .ui-dialog-titlebar .ui-button-icon-primary {
+ display: none;
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+ padding: 0px;
+ background-color: transparent;
+ border-width: 0;
+ box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.15);
+}
+
+.ui-dialog .ui-dialog-buttonpane button {
+ cursor: pointer;
+ margin: 0.5em 13px 0.5em 0;
+}
diff --git a/ui/css/opensans/opensans.css b/ui/css/opensans/opensans.css
index 6ab53b4..57a6533 100644
--- a/ui/css/opensans/opensans.css
+++ b/ui/css/opensans/opensans.css
@@ -22,7 +22,7 @@
/* BEGIN Light */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Light.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Light.ttf") format("truetype");
font-weight: 300;
font-style: normal; }
/* END Light */
@@ -30,7 +30,7 @@
/* BEGIN Light Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-LightItalic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-LightItalic.ttf") format("truetype");
font-weight: 300;
font-style: italic; }
/* END Light Italic */
@@ -38,7 +38,7 @@
/* BEGIN Regular */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Regular.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Regular.ttf") format("truetype");
font-weight: normal;
font-style: normal; }
/* END Regular */
@@ -46,7 +46,7 @@
/* BEGIN Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Italic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Italic.ttf") format("truetype");
font-weight: normal;
font-style: italic; }
/* END Italic */
@@ -54,7 +54,7 @@
/* BEGIN Semibold */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Semibold.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Semibold.ttf") format("truetype");
font-weight: 600;
font-style: normal; }
/* END Semibold */
@@ -62,7 +62,7 @@
/* BEGIN Semibold Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-SemiboldItalic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-SemiboldItalic.ttf") format("truetype");
font-weight: 600;
font-style: italic; }
/* END Semibold Italic */
@@ -70,7 +70,7 @@
/* BEGIN Bold */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-Bold.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-Bold.ttf") format("truetype");
font-weight: bold;
font-style: normal; }
/* END Bold */
@@ -78,7 +78,7 @@
/* BEGIN Bold Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-BoldItalic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-BoldItalic.ttf") format("truetype");
font-weight: bold;
font-style: italic; }
/* END Bold Italic */
@@ -86,7 +86,7 @@
/* BEGIN Extrabold */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-ExtraBold.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-ExtraBold.ttf") format("truetype");
font-weight: 800;
font-style: normal; }
/* END Extrabold */
@@ -94,7 +94,7 @@
/* BEGIN Extrabold Italic */
@font-face {
font-family: 'Open Sans';
- src: url("/fonts/OpenSans-ExtraBoldItalic.ttf") format("truetype");
+ src: local('Open Sans'), local('OpenSans'), url("/fonts/OpenSans-ExtraBoldItalic.ttf") format("truetype");
font-weight: 800;
font-style: italic; }
/* END Extrabold Italic */
diff --git a/ui/images/favicon.ico b/ui/images/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..cb3a3dc2f9c9ce0e5d3e14f0adab89c28c729ce0
GIT binary patch
literal 15086
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¥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
literal 0
HcmV?d00001
diff --git a/ui/images/logo.ico b/ui/images/logo.ico
deleted file mode 100644
index 446143f066a60f479b2cb8f8d04ab3c97ff60e56..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1214
zcma)*3rLeu6vyu=X_;nPV)$&PPF)r(wTQ|dTGOUtnOdf0mZ=cR#99xbub1{BqnD9^
z^Z>PV6h)fUny6#CN{3di2P{*h2ek@Oq0a4o*=I}2Iv?krbAR`oKi_vQA0faVCr83o
zF{!X2#Dx$Nz}$(sm^sgR<Jj30yCMGpMl1z837jm3H1$<DU4IV>Tbdw<FM-;Hi<#et
z=I}n~iB^qh8{XzCNyvT<I;$&znmT~?eFXZgAE@Om?1h(6Iq+2e1-ca!zOAO7n3*};
zXq6n?2kF<!f%cez;-Fgx4$e+xo{WR;oqhc_OW;#nF!Zm|JK}m8gi6aC+##`QA5PmJ
zfeZ(o(}%&&1P5#*1vVbnssk~XhN5bNz=T)>5^+BS=V54SJ|^z)5I7%kU;>-skiq*{
z5B^=eF<T)pK9+)bV;9UCK>t-HOi+bkR-wK1xpfXL;S<?ho1pQ5gYzxiHR~=e+XHS(
zYe7QMZb3IjWV72H-JpD~6z(tbgwn1o$D2s!YteWNJS!i9l%iW?+34Lvr*KL(6{_X|
zobEjAb{lD|4qsmYvGF;~r0Aunc#>=c)0W4s|D{#(q9~vaX{rGms=((Wn*~LeWqIu}
zkGvlzwaxjL25hey2bVweu<xK*t+@Oa_)UKTK^x4IwmKMOjm@oL`l)}_NGPy}tdb}w
zHa>H`ji2N7m}Xsj#j7-`#=Dv}`)h&)9th^&^dR%>WH_MB8KcIXVf8p&s1xD|_k)R-
zrk$Z0-|Gf}&4Au$KhU$k?3YR5by~D9M&-q$=ocNz4!IY&p7%OxuJf&+Ei-G(23hU;
zHTLhMtjFR9ExVbPQVLzBFlROcIZ|#jmX6fm_hsVa3XP<aKAeAt8dqp&oBW=V^+d>Q
zkcNnm%Ds?ggd^Rv2~9_o82cv;p6LSBD_g_s-n1uZ8#<EeLwTm~LE9J!Zdo@M&*jFU
zoM+Z%F5)(8$8y`Wz~%Pd;Nlx@aH{<lk}}CcRMRXZMD&%Uhz3Ze$jpg#uec1IlFMPW
MDQ4iZEk#_;cNAJoqyPW_
diff --git a/ui/images/theme-default/Makefile.am b/ui/images/theme-default/Makefile.am
index 336729c..bf594d7 100644
--- a/ui/images/theme-default/Makefile.am
+++ b/ui/images/theme-default/Makefile.am
@@ -17,4 +17,4 @@
imagedir = $(datadir)/wok/ui/images/theme-default
-dist_image_DATA = *.png *.gif
+dist_image_DATA = *.png *.gif *.svg
diff --git a/ui/libs/Makefile.am b/ui/libs/Makefile.am
index 49ad3bb..38af60b 100644
--- a/ui/libs/Makefile.am
+++ b/ui/libs/Makefile.am
@@ -15,8 +15,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-SUBDIRS = themes
-
-jsdir = $(datadir)/wok/ui/libs
-
-dist_js_DATA = $(wildcard *.js) $(NULL)
+SUBDIRS = bootstrap jquery jquery-ui bootstrap-select es5-shim jquery-i18n
diff --git a/ui/libs/bootstrap-select/LICENSE b/ui/libs/bootstrap-select/LICENSE
new file mode 100644
index 0000000..4e7f552
--- /dev/null
+++ b/ui/libs/bootstrap-select/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2014 bootstrap-select
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/ui/libs/bootstrap-select/Makefile.am b/ui/libs/bootstrap-select/Makefile.am
new file mode 100644
index 0000000..df7964e
--- /dev/null
+++ b/ui/libs/bootstrap-select/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+bootstrapselectjsdir = $(datadir)/wok/ui/libs/bootstrap-select
+
+dist_bootstrapselectjs_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/bootstrap-select/bootstrap-select.min.js b/ui/libs/bootstrap-select/bootstrap-select.min.js
new file mode 100644
index 0000000..d770e9b
--- /dev/null
+++ b/ui/libs/bootstrap-select/bootstrap-select.min.js
@@ -0,0 +1,8 @@
+/*!
+ * Bootstrap-select v1.6.3 (http://silviomoreto.github.io/bootstrap-select/)
+ *
+ * Copyright 2013-2014 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a){"use strict";function b(a,b){return a.toUpperCase().indexOf(b.toUpperCase())>-1}function c(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b.replace(this.re,this.ch)}),b}function d(a){var b={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},c="(?:"+Object.keys(b).join("|")+")",d=new RegExp(c),e=new RegExp(c,"g"),f=null==a?"":""+a;return d.test(f)?f.replace(e,function(a){return b[a]}):f}function e(b,c){var d=arguments,e=b,b=d[0],c=d[1];[].shift.apply(d),"undefined"==typeof b&&(b=e);var g,h=this.each(function(){var e=a(this);if(e.is("select")){var h=e.data("selectpicker"),i="object"==typeof b&&b;if(h){if(i)for(var j in i)i.hasOwnProperty(j)&&(h.options[j]=i[j])}else{var k=a.extend({},f.DEFAULTS,a.fn.selectpicker.defaults||{},e.data(),i);e.data("selectpicker",h=new f(this,k,c))}"string"==typeof b&&(g=h[b]instanceof Function?h[b].apply(h,d):h.options[b])}});return"undefined"!=typeof g?g:h}a.expr[":"].icontains=function(c,d,e){return b(a(c).text(),e[3])},a.expr[":"].aicontains=function(c,d,e){return b(a(c).data("normalizedText")||a(c).text(),e[3])};var f=function(b,c,d){d&&(d.stopPropagation(),d.preventDefault()),this.$element=a(b),this.$newElement=null,this.$button=null,this.$menu=null,this.$lis=null,this.options=c,null===this.options.title&&(this.options.title=this.$element.attr("title")),this.val=f.prototype.val,this.render=f.prototype.render,this.refresh=f.prototype.refresh,this.setStyle=f.prototype.setStyle,this.selectAll=f.prototype.selectAll,this.deselectAll=f.prototype.deselectAll,this.destroy=f.prototype.remove,this.remove=f.prototype.remove,this.show=f.prototype.show,this.hide=f.prototype.hide,this.init()};f.VERSION="1.6.3",f.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results match",countSelectedText:function(a){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){var c=[];return c[0]=1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",c[1]=1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)",c},selectAllText:"Select All",deselectAllText:"Deselect All",multipleSeparator:", ",style:"btn-default",size:"auto",title:null,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,liveSearchPlaceholder:null,actionsBox:!1,iconBase:"glyphicon",tickIcon:"glyphicon-ok",maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1,searchAccentInsensitive:!1},f.prototype={constructor:f,init:function(){var b=this,c=this.$element.attr("id");this.$element.hide(),this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement),this.$menu=this.$newElement.find("> .dropdown-menu"),this.$button=this.$newElement.find("> button"),this.$searchbox=this.$newElement.find("input"),this.options.dropdownAlignRight&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.liHeight(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile()},createDropdown:function(){var b=this.multiple?" show-tick":"",c=this.$element.parent().hasClass("input-group")?" input-group-btn":"",e=this.autofocus?" autofocus":"",f=this.$element.parents().hasClass("form-group-lg")?" btn-lg":this.$element.parents().hasClass("form-group-sm")?" btn-sm":"",g=this.options.header?'<div class="popover-title"><button type="button" class="close" aria-hidden="true">×</button>'+this.options.header+"</div>":"",h=this.options.liveSearch?'<div class="bs-searchbox"><input type="text" class="form-control" autocomplete="off"'+(null===this.options.liveSearchPlaceholder?"":' placeholder="'+d(this.options.liveSearchPlaceholder)+'"')+"></div>":"",i=this.options.actionsBox?'<div class="bs-actionsbox"><div class="btn-group btn-block"><button class="actions-btn bs-select-all btn btn-sm btn-default">'+this.options.selectAllText+'</button><button class="actions-btn bs-deselect-all btn btn-sm btn-default">'+this.options.deselectAllText+"</button></div></div>":"",j='<div class="btn-group bootstrap-select'+b+c+'"><button type="button" class="btn dropdown-toggle form-control selectpicker'+f+'" data-toggle="dropdown"'+e+'><span class="filter-option pull-left"></span> <span class="caret"></span></button><div class="dropdown-menu open">'+g+h+i+'<ul class="dropdown-menu inner selectpicker" role="menu"></ul></div></div>';return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul").append(b),a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menu.find("ul").append(a)},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var b=this,e=[],f=0,g=function(a,b,c){return"<li"+("undefined"!=typeof c?' class="'+c+'"':"")+("undefined"!=typeof b|null===b?' data-original-index="'+b+'"':"")+">"+a+"</li>"},h=function(a,e,f,g){var h=c(d(a));return'<a tabindex="0"'+("undefined"!=typeof e?' class="'+e+'"':"")+("undefined"!=typeof f?' style="'+f+'"':"")+("undefined"!=typeof g?'data-optgroup="'+g+'"':"")+' data-normalized-text="'+h+'">'+a+'<span class="'+b.options.iconBase+" "+b.options.tickIcon+' check-mark"></span></a>'};return this.$element.find("option").each(function(){var c=a(this),d=c.attr("class")||"",i=c.attr("style"),j=c.data("content")?c.data("content"):c.html(),k="undefined"!=typeof c.data("subtext")?'<small class="muted text-muted">'+c.data("subtext")+"</small>":"",l="undefined"!=typeof c.data("icon")?'<span class="'+b.options.iconBase+" "+c.data("icon")+'"></span> ':"",m=c.is(":disabled")||c.parent().is(":disabled"),n=c.index();if(""!==l&&m&&(l="<span>"+l+"</span>"),c.data("content")||(j=l+'<span class="text">'+j+k+"</span>"),!b.options.hideDisabled||!m)if(c.parent().is("optgroup")&&c.data("divider")!==!0){if(0===c.index()){f+=1;var o=c.parent().attr("label"),p="undefined"!=typeof c.parent().data("subtext")?'<small class="muted text-muted">'+c.parent().data("subtext")+"</small>":"",q=c.parent().data("icon")?'<span class="'+b.options.iconBase+" "+c.parent().data("icon")+'"></span> ':"";o=q+'<span class="text">'+o+p+"</span>",0!==n&&e.length>0&&e.push(g("",null,"divider")),e.push(g(o,null,"dropdown-header"))}e.push(g(h(j,"opt "+d,i,f),n))}else e.push(c.data("divider")===!0?g("",n,"divider"):c.data("hidden")===!0?g(h(j,d,i),n,"hidden is-hidden"):g(h(j,d,i),n))}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),a(e.join(""))},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c=this;b!==!1&&this.$element.find("option").each(function(b){c.setDisabled(b,a(this).is(":disabled")||a(this).parent().is(":disabled")),c.setSelected(b,a(this).is(":selected"))}),this.tabIndex();var d=this.options.hideDisabled?":not([disabled])":"",e=this.$element.find("option:selected"+d).map(function(){var b,d=a(this),e=d.data("icon")&&c.options.showIcon?'<i class="'+c.options.iconBase+" "+d.data("icon")+'"></i> ':"";return b=c.options.showSubtext&&d.attr("data-subtext")&&!c.multiple?' <small class="muted text-muted">'+d.data("subtext")+"</small>":"",d.data("content")&&c.options.showContent?d.data("content"):"undefined"!=typeof d.attr("title")?d.attr("title"):e+d.html()+b}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){d=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+d).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}this.options.title=this.$element.attr("title"),"static"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(f.replace(/<[^>]*>?/g,""))),this.$newElement.find(".filter-option").html(f)},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(){if(this.options.size!==!1){var a=this.$menu.parent().clone().find("> .dropdown-toggle").prop("autofocus",!1).end().appendTo("body"),b=a.addClass("open").find("> .dropdown-menu"),c=b.find("li").not(".divider").not(".dropdown-header").filter(":visible").children("a").outerHeight(),d=this.options.header?b.find(".popover-title").outerHeight():0,e=this.options.liveSearch?b.find(".bs-searchbox").outerHeight():0,f=this.options.actionsBox?b.find(".bs-actionsbox").outerHeight():0;a.remove(),this.$newElement.data("liHeight",c).data("headerHeight",d).data("searchHeight",e).data("actionsHeight",f)}},setSize:function(){this.findLis();var b,c,d,e=this,f=this.$menu,g=f.find(".inner"),h=this.$newElement.outerHeight(),i=this.$newElement.data("liHeight"),j=this.$newElement.data("headerHeight"),k=this.$newElement.data("searchHeight"),l=this.$newElement.data("actionsHeight"),m=this.$lis.filter(".divider").outerHeight(!0),n=parseInt(f.css("padding-top"))+parseInt(f.css("padding-bottom"))+parseInt(f.css("border-top-width"))+parseInt(f.css("border-bottom-width")),o=this.options.hideDisabled?", .disabled":"",p=a(window),q=n+parseInt(f.css("margin-top"))+parseInt(f.css("margin-bottom"))+2,r=function(){c=e.$newElement.offset().top-p.scrollTop(),d=p.height()-c-h};if(r(),this.options.header&&f.css("padding-top",0),"auto"==this.options.size){var s=function(){var a,h=e.$lis.not(".hidden");r(),b=d-q,e.options.dropupAuto&&e.$newElement.toggleClass("dropup",c>d&&b-q<f.height()),e.$newElement.hasClass("dropup")&&(b=c-q),a=h.length+h.filter(".dropdown-header").length>3?3*i+q-2:0,f.css({"max-height":b+"px",overflow:"hidden","min-height":a+j+k+l+"px"}),g.css({"max-height":b-j-k-l-n+"px","overflow-y":"auto","min-height":Math.max(a-n,0)+"px"})};s(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",s),a(window).off("resize.getSize").on("resize.getSize",s),a(window).off("scroll.getSize").on("scroll.getSize",s)}else if(this.options.size&&"auto"!=this.options.size&&f.find("li"+o).length>this.options.size){var t=this.$lis.not(".divider"+o).find(" > *").slice(0,this.options.size).last().parent().index(),u=this.$lis.slice(0,t+1).filter(".divider").length;b=i*this.options.size+u*m+n,e.options.dropupAuto&&this.$newElement.toggleClass("dropup",c>d&&b<f.height()),f.css({"max-height":b+j+k+l+"px",overflow:"hidden"}),g.css({"max-height":b-n+"px","overflow-y":"auto"})}},setWidth:function(){if("auto"==this.options.width){this.$menu.css("min-width","0");var a=this.$newElement.clone().appendTo("body"),b=a.find("> .dropdown-menu").css("width"),c=a.css("width","auto").find("> button").css("width");a.remove(),this.$newElement.css("width",Math.max(parseInt(b),parseInt(c))+"px")}else"fit"==this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width",""));this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement.removeClass("fit-width")},selectPosition:function(){var b,c,d=this,e="<div />",f=a(e),g=function(a){f.addClass(a.attr("class").replace(/form-control/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),c=a.hasClass("dropup")?0:a[0].offsetHeight,f.css({top:b.top+c,left:b.left,width:a[0].offsetWidth,position:"absolute"})};this.$newElement.on("click",function(){d.isDisabled()||(g(a(this)),f.appendTo(d.options.container),f.toggleClass("open",!a(this).hasClass("open")),f.append(d.$menu))}),a(window).resize(function(){g(d.$newElement)}),a(window).on("scroll",function(){g(d.$newElement)}),a("html").on("click",function(b){a(b.target).closest(d.$newElement).length<1&&f.removeClass("open")})},setSelected:function(a,b){this.findLis(),this.$lis.filter('[data-original-index="'+a+'"]').toggleClass("selected",b)},setDisabled:function(a,b){this.findLis(),b?this.$lis.filter('[data-original-index="'+a+'"]').addClass("disabled").find("a").attr("href","#").attr("tabindex",-1):this.$lis.filter('[data-original-index="'+a+'"]').removeClass("disabled").find("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element.is(":disabled")},checkDisabled:function(){var a=this;this.isDisabled()?this.$button.addClass("disabled").attr("tabindex",-1):(this.$button.hasClass("disabled")&&this.$button.removeClass("disabled"),-1==this.$button.attr("tabindex")&&(this.$element.data("tabindex")||this.$button.removeAttr("tabindex"))),this.$button.click(function(){return!a.isDisabled()})},tabIndex:function(){this.$element.is("[tabindex]")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex")))},clickListener:function(){var b=this;this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),this.$newElement.on("click",function(){b.setSize(),b.options.liveSearch||b.multiple||setTimeout(function(){b.$menu.find(".selected a").focus()},10)}),this.$menu.on("click","li a",function(c){var d=a(this),e=d.parent().data("originalIndex"),f=b.$element.val(),g=b.$element.prop("selectedIndex");if(b.multiple&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var h=b.$element.find("option"),i=h.eq(e),j=i.prop("selected"),k=i.parent("optgroup"),l=b.options.maxOptions,m=k.data("maxOptions")||!1;if(b.multiple){if(i.prop("selected",!j),b.setSelected(e,!j),d.blur(),l!==!1||m!==!1){var n=l<h.filter(":selected").length,o=m<k.find("option:selected").length;if(l&&n||m&&o)if(l&&1==l)h.prop("selected",!1),i.prop("selected",!0),b.$menu.find(".selected").removeClass("selected"),b.setSelected(e,!0);else if(m&&1==m){k.find("option:selected").prop("selected",!1),i.prop("selected",!0);var p=d.data("optgroup");b.$menu.find(".selected").has('a[data-optgroup="'+p+'"]').removeClass("selected"),b.setSelected(e,!0)}else{var q="function"==typeof b.options.maxOptionsText?b.options.maxOptionsText(l,m):b.options.maxOptionsText,r=q[0].replace("{n}",l),s=q[1].replace("{n}",m),t=a('<div class="notify"></div>');q[2]&&(r=r.replace("{var}",q[2][l>1?0:1]),s=s.replace("{var}",q[2][m>1?0:1])),i.prop("selected",!1),b.$menu.append(t),l&&n&&(t.append(a("<div>"+r+"</div>")),b.$element.trigger("maxReached.bs.select")),m&&o&&(t.append(a("<div>"+s+"</div>")),b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(e,!1)},10),t.delay(750).fadeOut(300,function(){a(this).remove()})}}}else h.prop("selected",!1),i.prop("selected",!0),b.$menu.find(".selected").removeClass("selected"),b.setSelected(e,!0);b.multiple?b.options.liveSearch&&b.$searchbox.focus():b.$button.focus(),(f!=b.$element.val()&&b.multiple||g!=b.$element.prop("selectedIndex")&&!b.multiple)&&b.$element.change()}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(a){a.currentTarget==this&&(a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus())}),this.$menu.on("click","li.divider, li.dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.focus()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).is(".bs-select-all")?b.selectAll():b.deselectAll(),b.$element.change()}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var b=this,e=a('<li class="no-results"></li>');this.$newElement.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){b.$menu.find(".active").removeClass("active"),b.$searchbox.val()&&(b.$searchbox.val(""),b.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),b.multiple||b.$menu.find(".selected").addClass("active"),setTimeout(function(){b.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){b.$searchbox.val()?(b.options.searchAccentInsensitive?b.$lis.not(".is-hidden").removeClass("hidden").find("a").not(":aicontains("+c(b.$searchbox.val())+")").parent().addClass("hidden"):b.$lis.not(".is-hidden").removeClass("hidden").find("a").not(":icontains("+b.$searchbox.val()+")").parent().addClass("hidden"),b.$menu.find("li").filter(":visible:not(.no-results)").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(b.options.noneResultsText+' "'+d(b.$searchbox.val())+'"').show(),b.$menu.find("li").last().after(e))):(b.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),b.$menu.find("li.active").removeClass("active"),b.$menu.find("li").filter(":visible:not(.divider)").eq(0).addClass("active").find("a").focus(),a(this).focus()})},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},selectAll:function(){this.findLis(),this.$lis.not(".divider").not(".disabled").not(".selected").filter(":visible").find("a").click()},deselectAll:function(){this.findLis(),this.$lis.not(".divider").not(".disabled").filter(".selected").filter(":visible").find("a").click()},keydown:function(b){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a("[role=menu] li a",n),l=o.$menu.parent().hasClass("open"),!l&&/([0-9]|[A-z])/.test(String.fromCharCode(b.keyCode))&&(o.options.container?o.$newElement.trigger("click"):(o.setSize(),o.$menu.parent().addClass("open"),l=!0),o.$searchbox.focus()),o.options.liveSearch&&(/(^9$|27)/.test(b.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(b.preventDefault(),o.$menu.parent().removeClass("open"),o.$button.focus()),d=a("[role=menu] li:not(.divider):not(.dropdown-header):visible",n),m.val()||/(38|40)/.test(b.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$newElement.find("li").filter(o.options.searchAccentInsensitive?":aicontains("+c(p[b.keyCode])+")":":icontains("+p[b.keyCode]+")"))),d.length){if(/(38|40)/.test(b.keyCode.toString(10)))e=d.index(d.filter(":focus")),g=d.parent(":not(.disabled):visible").first().index(),h=d.parent(":not(.disabled):visible").last().index(),f=d.eq(e).parent().nextAll(":not(.disabled):visible").eq(0).index(),i=d.eq(e).parent().prevAll(":not(.disabled):visible").eq(0).index(),j=d.eq(f).parent().prevAll(":not(.disabled):visible").eq(0).index(),o.options.liveSearch&&(d.each(function(b){a(this).is(":not(.disabled)")&&a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.filter(":not(.disabled):visible").first().data("index"),h=d.filter(":not(.disabled):visible").last().data("index"),f=d.eq(e).nextAll(":not(.disabled):visible").eq(0).data("index"),i=d.eq(e).prevAll(":not(.disabled):visible").eq(0).data("index"),j=d.eq(f).prevAll(":not(.disabled):visible").eq(0).data("index")),k=m.data("prevIndex"),38==b.keyCode&&(o.options.liveSearch&&(e-=1),e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)),40==b.keyCode&&(o.options.liveSearch&&(e+=1),-1==e&&(e=0),e!=j&&f>e&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(b.preventDefault(),m.is(".dropdown-toggle")||(d.removeClass("active"),d.eq(e).addClass("active").find("a").focus(),m.focus())):d.eq(e).focus();else if(!m.is("input")){var q,r,s=[];d.each(function(){a(this).parent().is(":not(.disabled)")&&a.trim(a(this).text().toLowerCase()).substring(0,1)==p[b.keyCode]&&s.push(a(this).parent().index())}),q=a(document).data("keycount"),q++,a(document).data("keycount",q),r=a.trim(a(":focus").text().toLowerCase()).substring(0,1),r!=p[b.keyCode]?(q=1,a(document).data("keycount",q)):q>=s.length&&(a(document).data("keycount",0),q>s.length&&(q=1)),d.eq(s[q-1]).focus()}(/(13|32)/.test(b.keyCode.toString(10))||/(^9$)/.test(b.keyCode.toString(10))&&o.options.selectOnTab)&&l&&(/(32)/.test(b.keyCode.toString(10))||b.preventDefault(),o.options.liveSearch?/(32)/.test(b.keyCode.toString(10))||(o.$menu.find(".active a").click(),m.focus()):a(":focus").click(),a(document).data("keycount",0)),(/(^9$|27)/.test(b.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(b.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.addClass("mobile-device").appendTo(this.$newElement),this.options.container&&this.$menu.hide()},refresh:function(){this.$lis=null,this.reloadLi(),this.render(),this.setWidth(),this.setStyle(),this.checkDisabled(),this.liHeight()},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()}};var g=a.fn.selectpicker;a.fn.selectpicker=e,a.fn.selectpicker.Constructor=f,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=g,this},a(document).data("keycount",0).on("keydown",".bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bs-searchbox input",f.prototype.keydown).on("focusin.modal",".bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=menu], .bs-searchbox input",function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);e.call(b,b.data())})})}(jQuery);
+//# sourceMappingURL=bootstrap-select.js.map
\ No newline at end of file
diff --git a/ui/libs/bootstrap/LICENSE b/ui/libs/bootstrap/LICENSE
new file mode 100644
index 0000000..9a683e3
--- /dev/null
+++ b/ui/libs/bootstrap/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Twitter, Inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/ui/libs/bootstrap/Makefile.am b/ui/libs/bootstrap/Makefile.am
new file mode 100644
index 0000000..da746a1
--- /dev/null
+++ b/ui/libs/bootstrap/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+bootstrapjsdir = $(datadir)/wok/ui/libs/bootstrap
+
+dist_bootstrapjs_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/bootstrap/bootstrap.min.js b/ui/libs/bootstrap/bootstrap.min.js
new file mode 100644
index 0000000..133aeec
--- /dev/null
+++ b/ui/libs/bootstrap/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),
+d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/ui/libs/es5-shim/LICENSE b/ui/libs/es5-shim/LICENSE
new file mode 100644
index 0000000..3dbd7de
--- /dev/null
+++ b/ui/libs/es5-shim/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (C) 2009-2014 Kristopher Michael Kowal and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/ui/libs/es5-shim/Makefile.am b/ui/libs/es5-shim/Makefile.am
new file mode 100644
index 0000000..0d40e3d
--- /dev/null
+++ b/ui/libs/es5-shim/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+es5shimdir = $(datadir)/wok/ui/libs/es5-shim
+
+dist_es5shim_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/es5-shim/es5-shim.min.js b/ui/libs/es5-shim/es5-shim.min.js
new file mode 100644
index 0000000..f05f5c7
--- /dev/null
+++ b/ui/libs/es5-shim/es5-shim.min.js
@@ -0,0 +1,7 @@
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.1.10/LICENSE
+ */
+(function(e,t){"use strict";if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){var e=Array;var t=e.prototype;var r=Object;var n=r.prototype;var a=Function.prototype;var i=String;var o=i.prototype;var l=Number;var u=l.prototype;var f=t.slice;var s=t.splice;var c=t.push;var v=t.unshift;var p=t.concat;var h=a.call;var g=Math.max;var y=Math.min;var d=n.toString;var w=typeof Symbol==="function"&&typeof Symbol.toStringTag==="symbol";var m;var b=Function.prototype.toString,T=function Me(e){try{b.call(e);return true}catch(t){return false}},x="[object Function]",O="[object GeneratorFunction]";m=function Fe(e){if(typeof e!=="function"){return false}if(w){return T(e)}var t=d.call(e);return t===x||t===O};var S;var j=RegExp.prototype.exec,E=function Re(e){try{j.call(e);return true}catch(t){return false}},I="[object RegExp]";S=function $e(e){if(typeof e!=="object"){return false}return w?E(e):d.call(e)===I};var D;var N=String.prototype.valueOf,k=function Ae(e){try{N.call(e);return true}catch(t){return false}},M="[object String]";D=function Ue(e){if(typeof e==="string"){return true}if(typeof e!=="object"){return false}return w?k(e):d.call(e)===M};var F=function(e){var t=r.defineProperty&&function(){try{var e={};r.defineProperty(e,"x",{enumerable:false,value:e});for(var t in e){return false}return e.x===e}catch(n){return false}}();var n;if(t){n=function(e,t,n,a){if(!a&&t in e){return}r.defineProperty(e,t,{configurable:true,enumerable:false,writable:true,value:n})}}else{n=function(e,t,r,n){if(!n&&t in e){return}e[t]=r}}return function a(t,r,i){for(var o in r){if(e.call(r,o)){n(t,o,r[o],i)}}}}(n.hasOwnProperty);var R=function Ce(e){var t=typeof e;return e===null||t!=="object"&&t!=="function"};var $={ToInteger:function Pe(e){var t=+e;if(t!==t){t=0}else if(t!==0&&t!==1/0&&t!==-(1/0)){t=(t>0||-1)*Math.floor(Math.abs(t))}return t},ToPrimitive:function Ze(e){var t,r,n;if(R(e)){return e}r=e.valueOf;if(m(r)){t=r.call(e);if(R(t)){return t}}n=e.toString;if(m(n)){t=n.call(e);if(R(t)){return t}}throw new TypeError},ToObject:function(e){if(e==null){throw new TypeError("can't convert "+e+" to object")}return r(e)},ToUint32:function Je(e){return e>>>0}};var A=function ze(){};F(a,{bind:function Be(e){var t=this;if(!m(t)){throw new TypeError("Function.prototype.bind called on incompatible "+t)}var n=f.call(arguments,1);var a;var i=function(){if(this instanceof a){var i=t.apply(this,p.call(n,f.call(arguments)));if(r(i)===i){return i}return this}else{return t.apply(e,p.call(n,f.call(arguments)))}};var o=g(0,t.length-n.length);var l=[];for(var u=0;u<o;u++){c.call(l,"$"+u)}a=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this, arguments); }")(i);if(t.prototype){A.prototype=t.prototype;a.prototype=new A;A.prototype=null}return a}});var U=h.bind(n.hasOwnProperty);var C=h.bind(n.toString);var P=h.bind(o.slice);var Z=h.bind(o.split);var J=e.isArray||function Ge(e){return C(e)==="[object Array]"};var z=[].unshift(0)!==1;F(t,{unshift:function(){v.apply(this,arguments);return this.length}},z);F(e,{isArray:J});var B=r("a");var G=B[0]!=="a"||!(0 in B);var H=function He(e){var t=true;var r=true;if(e){e.call("foo",function(e,r,n){if(typeof n!=="object"){t=false}});e.call([1],function(){"use strict";r=typeof this==="string"},"x")}return!!e&&t&&r};F(t,{forEach:function Le(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=-1;var a=r.length>>>0;var i;if(arguments.length>1){i=arguments[1]}if(!m(e)){throw new TypeError("Array.prototype.forEach callback must be a function")}while(++n<a){if(n in r){if(typeof i!=="undefined"){e.call(i,r[n],n,t)}else{e(r[n],n,t)}}}}},!H(t.forEach));F(t,{map:function Xe(t){var r=$.ToObject(this);var n=G&&D(this)?Z(this,""):r;var a=n.length>>>0;var i=e(a);var o;if(arguments.length>1){o=arguments[1]}if(!m(t)){throw new TypeError("Array.prototype.map callback must be a function")}for(var l=0;l<a;l++){if(l in n){if(typeof o!=="undefined"){i[l]=t.call(o,n[l],l,r)}else{i[l]=t(n[l],l,r)}}}return i}},!H(t.map));F(t,{filter:function Ye(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;var a=[];var i;var o;if(arguments.length>1){o=arguments[1]}if(!m(e)){throw new TypeError("Array.prototype.filter callback must be a function")}for(var l=0;l<n;l++){if(l in r){i=r[l];if(typeof o==="undefined"?e(i,l,t):e.call(o,i,l,t)){c.call(a,i)}}}return a}},!H(t.filter));F(t,{every:function qe(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;var a;if(arguments.length>1){a=arguments[1]}if(!m(e)){throw new TypeError("Array.prototype.every callback must be a function")}for(var i=0;i<n;i++){if(i in r&&!(typeof a==="undefined"?e(r[i],i,t):e.call(a,r[i],i,t))){return false}}return true}},!H(t.every));F(t,{some:function Ke(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;var a;if(arguments.length>1){a=arguments[1]}if(!m(e)){throw new TypeError("Array.prototype.some callback must be a function")}for(var i=0;i<n;i++){if(i in r&&(typeof a==="undefined"?e(r[i],i,t):e.call(a,r[i],i,t))){return true}}return false}},!H(t.some));var L=false;if(t.reduce){L=typeof t.reduce.call("es5",function(e,t,r,n){return n})==="object"}F(t,{reduce:function Qe(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;if(!m(e)){throw new TypeError("Array.prototype.reduce callback must be a function")}if(n===0&&arguments.length===1){throw new TypeError("reduce of empty array with no initial value")}var a=0;var i;if(arguments.length>=2){i=arguments[1]}else{do{if(a in r){i=r[a++];break}if(++a>=n){throw new TypeError("reduce of empty array with no initial value")}}while(true)}for(;a<n;a++){if(a in r){i=e(i,r[a],a,t)}}return i}},!L);var X=false;if(t.reduceRight){X=typeof t.reduceRight.call("es5",function(e,t,r,n){return n})==="object"}F(t,{reduceRight:function Ve(e){var t=$.ToObject(this);var r=G&&D(this)?Z(this,""):t;var n=r.length>>>0;if(!m(e)){throw new TypeError("Array.prototype.reduceRight callback must be a function")}if(n===0&&arguments.length===1){throw new TypeError("reduceRight of empty array with no initial value")}var a;var i=n-1;if(arguments.length>=2){a=arguments[1]}else{do{if(i in r){a=r[i--];break}if(--i<0){throw new TypeError("reduceRight of empty array with no initial value")}}while(true)}if(i<0){return a}do{if(i in r){a=e(a,r[i],i,t)}}while(i--);return a}},!X);var Y=t.indexOf&&[0,1].indexOf(1,2)!==-1;F(t,{indexOf:function We(e){var t=G&&D(this)?Z(this,""):$.ToObject(this);var r=t.length>>>0;if(r===0){return-1}var n=0;if(arguments.length>1){n=$.ToInteger(arguments[1])}n=n>=0?n:g(0,r+n);for(;n<r;n++){if(n in t&&t[n]===e){return n}}return-1}},Y);var q=t.lastIndexOf&&[0,1].lastIndexOf(0,-3)!==-1;F(t,{lastIndexOf:function _e(e){var t=G&&D(this)?Z(this,""):$.ToObject(this);var r=t.length>>>0;if(r===0){return-1}var n=r-1;if(arguments.length>1){n=y(n,$.ToInteger(arguments[1]))}n=n>=0?n:r-Math.abs(n);for(;n>=0;n--){if(n in t&&e===t[n]){return n}}return-1}},q);var K=function(){var e=[1,2];var t=e.splice();return e.length===2&&J(t)&&t.length===0}();F(t,{splice:function et(e,t){if(arguments.length===0){return[]}else{return s.apply(this,arguments)}}},!K);var Q=function(){var e={};t.splice.call(e,0,0,1);return e.length===1}();F(t,{splice:function tt(e,t){if(arguments.length===0){return[]}var r=arguments;this.length=g($.ToInteger(this.length),0);if(arguments.length>0&&typeof t!=="number"){r=f.call(arguments);if(r.length<2){c.call(r,this.length-e)}else{r[1]=$.ToInteger(t)}}return s.apply(this,r)}},!Q);var V=function(){var t=new e(1e5);t[8]="x";t.splice(1,1);return t.indexOf("x")===7}();var W=function(){var e=256;var t=[];t[e]="a";t.splice(e+1,0,"b");return t[e]==="a"}();F(t,{splice:function rt(e,t){var r=$.ToObject(this);var n=[];var a=$.ToUint32(r.length);var o=$.ToInteger(e);var l=o<0?g(a+o,0):y(o,a);var u=y(g($.ToInteger(t),0),a-l);var s=0;var c;while(s<u){c=i(l+s);if(U(r,c)){n[s]=r[c]}s+=1}var v=f.call(arguments,2);var p=v.length;var h;if(p<u){s=l;while(s<a-u){c=i(s+u);h=i(s+p);if(U(r,c)){r[h]=r[c]}else{delete r[h]}s+=1}s=a;while(s>a-u+p){delete r[s-1];s-=1}}else if(p>u){s=a-u;while(s>l){c=i(s+u-1);h=i(s+p-1);if(U(r,c)){r[h]=r[c]}else{delete r[h]}s-=1}}s=l;for(var d=0;d<v.length;++d){r[s]=v[d];s+=1}r.length=a-u+p;return n}},!V||!W);var _=!{toString:null}.propertyIsEnumerable("toString");var ee=function(){}.propertyIsEnumerable("prototype");var te=!U("x","0");var re=function(e){var t=e.constructor;return t&&t.prototype===e};var ne={$window:true,$console:true,$parent:true,$self:true,$frames:true,$frameElement:true,$webkitIndexedDB:true,$webkitStorageInfo:true};var ae=function(){if(typeof window==="undefined"){return false}for(var e in window){if(!ne["$"+e]&&U(window,e)&&window[e]!==null&&typeof window[e]==="object"){try{re(window[e])}catch(t){return true}}}return false}();var ie=function(e){if(typeof window==="undefined"||!ae){return re(e)}try{return re(e)}catch(t){return false}};var oe=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"];var le=oe.length;var ue=function nt(e){var t=C(e);var r=t==="[object Arguments]";if(!r){r=!J(e)&&e!==null&&typeof e==="object"&&typeof e.length==="number"&&e.length>=0&&m(e.callee)}return r};F(r,{keys:function at(e){var t=m(e);var r=ue(e);var n=e!==null&&typeof e==="object";var a=n&&D(e);if(!n&&!t&&!r){throw new TypeError("Object.keys called on a non-object")}var o=[];var l=ee&&t;if(a&&te||r){for(var u=0;u<e.length;++u){c.call(o,i(u))}}if(!r){for(var f in e){if(!(l&&f==="prototype")&&U(e,f)){c.call(o,i(f))}}}if(_){var s=ie(e);for(var v=0;v<le;v++){var p=oe[v];if(!(s&&p==="constructor")&&U(e,p)){c.call(o,p)}}}return o}});var fe=r.keys&&function(){return r.keys(arguments).length===2}(1,2);var se=r.keys;F(r,{keys:function it(e){if(ue(e)){return se(f.call(e))}else{return se(e)}}},!fe);var ce=-621987552e5;var ve="-000001";var pe=Date.prototype.toISOString&&new Date(ce).toISOString().indexOf(ve)===-1;var he=Date.prototype.toISOString&&new Date(-1).toISOString()!=="1969-12-31T23:59:59.999Z";F(Date.prototype,{toISOString:function ot(){var e,t,r,n,a;if(!isFinite(this)){throw new RangeError("Date.prototype.toISOString called on non-finite value.")}n=this.getUTCFullYear();a=this.getUTCMonth();n+=Math.floor(a/12);a=(a%12+12)%12;e=[a+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()];n=(n<0?"-":n>9999?"+":"")+P("00000"+Math.abs(n),0<=n&&n<=9999?-4:-6);t=e.length;while(t--){r=e[t];if(r<10){e[t]="0"+r}}return n+"-"+f.call(e,0,2).join("-")+"T"+f.call(e,2).join(":")+"."+P("000"+this.getUTCMilliseconds(),-3)+"Z"}},pe||he);var ge=function(){try{return Date.prototype.toJSON&&new Date(NaN).toJSON()===null&&new Date(ce).toJSON().indexOf(ve)!==-1&&Date.prototype.toJSON.call({toISOString:function(){return true}})}catch(e){return false}}();if(!ge){Date.prototype.toJSON=function lt(e){var t=r(this);var n=$.ToPrimitive(t);if(typeof n==="number"&&!isFinite(n)){return null}var a=t.toISOString;if(!m(a)){throw new TypeError("toISOString property is not callable")}return a.call(t)}}var ye=Date.parse("+033658-09-27T01:46:40.000Z")===1e15;var de=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z"));var we=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(!Date.parse||we||de||!ye){Date=function(e){var t=function s(r,n,a,o,l,u,f){var s=arguments.length;var c;if(this instanceof e){c=s===1&&i(r)===r?new e(t.parse(r)):s>=7?new e(r,n,a,o,l,u,f):s>=6?new e(r,n,a,o,l,u):s>=5?new e(r,n,a,o,l):s>=4?new e(r,n,a,o):s>=3?new e(r,n,a):s>=2?new e(r,n):s>=1?new e(r):new e}else{c=e.apply(this,arguments)}F(c,{constructor:t},true);return c};var r=new RegExp("^"+"(\\d{4}|[+-]\\d{6})"+"(?:-(\\d{2})"+"(?:-(\\d{2})"+"(?:"+"T(\\d{2})"+":(\\d{2})"+"(?:"+":(\\d{2})"+"(?:(\\.\\d{1,}))?"+")?"+"("+"Z|"+"(?:"+"([-+])"+"(\\d{2})"+":(\\d{2})"+")"+")?)?)?)?"+"$");var n=[0,31,59,90,120,151,181,212,243,273,304,334,365];var a=function c(e,t){var r=t>1?1:0;return n[t]+Math.floor((e-1969+r)/4)-Math.floor((e-1901+r)/100)+Math.floor((e-1601+r)/400)+365*(e-1970)};var o=function v(t){return l(new e(1970,0,1,0,0,0,t))};for(var u in e){if(U(e,u)){t[u]=e[u]}}F(t,{now:e.now,UTC:e.UTC},true);t.prototype=e.prototype;F(t.prototype,{constructor:t},true);var f=function p(t){var n=r.exec(t);if(n){var i=l(n[1]),u=l(n[2]||1)-1,f=l(n[3]||1)-1,s=l(n[4]||0),c=l(n[5]||0),v=l(n[6]||0),p=Math.floor(l(n[7]||0)*1e3),h=Boolean(n[4]&&!n[8]),g=n[9]==="-"?1:-1,y=l(n[10]||0),d=l(n[11]||0),w;if(s<(c>0||v>0||p>0?24:25)&&c<60&&v<60&&p<1e3&&u>-1&&u<12&&y<24&&d<60&&f>-1&&f<a(i,u+1)-a(i,u)){w=((a(i,u)+f)*24+s+y*g)*60;w=((w+c+d*g)*60+v)*1e3+p;if(h){w=o(w)}if(-864e13<=w&&w<=864e13){return w}}return NaN}return e.parse.apply(this,arguments)};F(t,{parse:f});return t}(Date)}if(!Date.now){Date.now=function ut(){return(new Date).getTime()}}var me=u.toFixed&&(8e-5.toFixed(3)!=="0.000"||.9.toFixed(0)!=="1"||1.255.toFixed(2)!=="1.25"||0xde0b6b3a7640080.toFixed(0)!=="1000000000000000128");var be={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function ft(e,t){var r=-1;var n=t;while(++r<be.size){n+=e*be.data[r];be.data[r]=n%be.base;n=Math.floor(n/be.base)}},divide:function st(e){var t=be.size,r=0;while(--t>=0){r+=be.data[t];be.data[t]=Math.floor(r/e);r=r%e*be.base}},numToString:function ct(){var e=be.size;var t="";while(--e>=0){if(t!==""||e===0||be.data[e]!==0){var r=i(be.data[e]);if(t===""){t=r}else{t+=P("0000000",0,7-r.length)+r}}}return t},pow:function vt(e,t,r){return t===0?r:t%2===1?vt(e,t-1,r*e):vt(e*e,t/2,r)},log:function pt(e){var t=0;var r=e;while(r>=4096){t+=12;r/=4096}while(r>=2){t+=1;r/=2}return t}};F(u,{toFixed:function ht(e){var t,r,n,a,o,u,f,s;t=l(e);t=t!==t?0:Math.floor(t);if(t<0||t>20){throw new RangeError("Number.toFixed called with invalid number of decimals")}r=l(this);if(r!==r){return"NaN"}if(r<=-1e21||r>=1e21){return i(r)}n="";if(r<0){n="-";r=-r}a="0";if(r>1e-21){o=be.log(r*be.pow(2,69,1))-69;u=o<0?r*be.pow(2,-o,1):r/be.pow(2,o,1);u*=4503599627370496;o=52-o;if(o>0){be.multiply(0,u);f=t;while(f>=7){be.multiply(1e7,0);f-=7}be.multiply(be.pow(10,f,1),0);f=o-1;while(f>=23){be.divide(1<<23);f-=23}be.divide(1<<f);be.multiply(1,1);be.divide(2);a=be.numToString()}else{be.multiply(0,u);be.multiply(1<<-o,0);a=be.numToString()+P("0.00000000000000000000",2,2+t)}}if(t>0){s=a.length;if(s<=t){a=n+P("0.0000000000000000000",0,t-s+2)+a}else{a=n+P(a,0,s-t)+"."+P(a,s-t)}}else{a=n+a}return a}},me);if("ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"test".split(/(?:)/,-1).length!==4||"".split(/.?/).length||".".split(/()()/).length>1){(function(){var e=typeof/()??/.exec("")[1]==="undefined";o.split=function(t,r){var n=this;if(typeof t==="undefined"&&r===0){return[]}if(!S(t)){return Z(this,t,r)}var a=[];var i=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),o=0,l,u,s,v;var p=new RegExp(t.source,i+"g");n+="";if(!e){l=new RegExp("^"+p.source+"$(?!\\s)",i)}var h=typeof r==="undefined"?-1>>>0:$.ToUint32(r);u=p.exec(n);while(u){s=u.index+u[0].length;if(s>o){c.call(a,P(n,o,u.index));if(!e&&u.length>1){u[0].replace(l,function(){for(var e=1;e<arguments.length-2;e++){if(typeof arguments[e]==="undefined"){u[e]=void 0}}})}if(u.length>1&&u.index<n.length){c.apply(a,f.call(u,1))}v=u[0].length;o=s;if(a.length>=h){break}}if(p.lastIndex===u.index){p.lastIndex++}u=p.exec(n)}if(o===n.length){if(v||!p.test("")){c.call(a,"")}}else{c.call(a,P(n,o))}return a.length>h?P(a,0,h):a}})()}else if("0".split(void 0,0).length){o.split=function gt(e,t){if(typeof e==="undefined"&&t===0){return[]}return Z(this,e,t)}}var Te=o.replace;var xe=function(){var e=[];"x".replace(/x(.)?/g,function(t,r){c.call(e,r)});return e.length===1&&typeof e[0]==="undefined"}();if(!xe){o.replace=function yt(e,t){var r=m(t);var n=S(e)&&/\)[*?]/.test(e.source);if(!r||!n){return Te.call(this,e,t)}else{var a=function(r){var n=arguments.length;var a=e.lastIndex;e.lastIndex=0;var i=e.exec(r)||[];e.lastIndex=a;c.call(i,arguments[n-2],arguments[n-1]);return t.apply(this,i)};return Te.call(this,e,a)}}}var Oe=o.substr;var Se="".substr&&"0b".substr(-1)!=="b";F(o,{substr:function dt(e,t){var r=e;if(e<0){r=g(this.length+e,0)}return Oe.call(this,r,t)}},Se);var je=" \n\f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003"+"\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028"+"\u2029\ufeff";var Ee="\u200b";var Ie="["+je+"]";var De=new RegExp("^"+Ie+Ie+"*");var Ne=new RegExp(Ie+Ie+"*$");var ke=o.trim&&(je.trim()||!Ee.trim());F(o,{trim:function wt(){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}return i(this).replace(De,"").replace(Ne,"")}},ke);if(parseInt(je+"08")!==8||parseInt(je+"0x16")!==22){parseInt=function(e){var t=/^0[xX]/;return function r(n,a){var o=i(n).trim();var u=l(a)||(t.test(o)?16:10);return e(o,u)}}(parseInt)}});
+//# sourceMappingURL=es5-shim.map
diff --git a/ui/libs/jquery-1.10.0.min.js b/ui/libs/jquery-1.10.0.min.js
deleted file mode 100644
index 01c6881..0000000
--- a/ui/libs/jquery-1.10.0.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v1.10.0 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery-1.10.0.min.map
-*/
-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.0",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=lt(),k=lt(),E=lt(),S=!1,A=function(){return 0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=bt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+xt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return At(e.replace(z,"$1"),t,n,i)}function st(e){return K.test(e+"")}function lt(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function ut(e){return e[b]=!0,e}function ct(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pt(e,t,n){e=e.split("|");var r,i=e.length,a=n?null:t;while(i--)(r=o.attrHandle[e[i]])&&r!==t||(o.attrHandle[e[i]]=a)}function ft(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:e[t]===!0?t.toLowerCase():null}function dt(e,t){return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function ht(e){return"input"===e.nodeName.toLowerCase()?e.defaultValue:t}function gt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function mt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function yt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function vt(e){return ut(function(t){return t=+t,ut(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),r.attributes=ct(function(e){return e.innerHTML="<a href='#'></a>",pt("type|href|height|width",dt,"#"===e.firstChild.getAttribute("href")),pt(B,ft,null==e.getAttribute("disabled")),e.className="i",!e.getAttribute("className")}),r.input=ct(function(e){return e.innerHTML="<input>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}),pt("value",ht,r.attributes&&r.input),r.getElementsByTagName=ct(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ct(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ct(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=st(n.querySelectorAll))&&(ct(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ct(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=st(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=st(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},r.sortDetached=ct(function(e){return 1&e.compareDocumentPosition(n.createElement("div"))}),A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return gt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?gt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:ut,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=bt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?ut(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ut(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?ut(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ut(function(e){return function(t){return at(e,t).length>0}}),contains:ut(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:ut(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:vt(function(){return[0]}),last:vt(function(e,t){return[t-1]}),eq:vt(function(e,t,n){return[0>n?n+t:n]}),even:vt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:vt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:vt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:vt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=mt(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=yt(n);function bt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function xt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function wt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function Tt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ct(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function Nt(e,t,n,r,i,o){return r&&!r[b]&&(r=Nt(r)),i&&!i[b]&&(i=Nt(i,o)),ut(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||St(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:Ct(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=Ct(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=Ct(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function kt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=wt(function(e){return e===t},s,!0),p=wt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[wt(Tt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return Nt(l>1&&Tt(f),l>1&&xt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&kt(e.slice(l,r)),i>r&&kt(e=e.slice(r)),i>r&&xt(e))}f.push(n)}return Tt(f)}function Et(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=Ct(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?ut(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=bt(e)),n=t.length;while(n--)o=kt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Et(i,r))}return o};function St(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function At(e,t,n,i){var a,s,u,c,p,f=bt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&xt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}o.pseudos.nth=o.pseudos.eq;function jt(){}jt.prototype=o.filters=o.pseudos,o.setFilters=new jt,r.sortStable=b.split("").sort(A).join("")===b,p(),[0,0].sort(A),r.detectDuplicates=S,x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!u||(n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;
-if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=x(this),l=t,u=e.match(T)||[];while(o=u[a++])l=r?l:!s.hasClass(o),s[l?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})
-}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(n.unit=o,n.start=+a||+r||0,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);a.finish=function(){t.stop(!0)},(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/ui/libs/jquery-i18n/LICENSE b/ui/libs/jquery-i18n/LICENSE
new file mode 100644
index 0000000..978ee2a
--- /dev/null
+++ b/ui/libs/jquery-i18n/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Dave Perrett, http://recursive-design.com/
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/ui/libs/jquery-i18n/Makefile.am b/ui/libs/jquery-i18n/Makefile.am
new file mode 100644
index 0000000..56872b0
--- /dev/null
+++ b/ui/libs/jquery-i18n/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+jqueryi18ndir = $(datadir)/wok/ui/libs/jquery-i18n
+
+dist_jqueryi18n_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/jquery-i18n/jquery.i18n.min.js b/ui/libs/jquery-i18n/jquery.i18n.min.js
new file mode 100644
index 0000000..fead704
--- /dev/null
+++ b/ui/libs/jquery-i18n/jquery.i18n.min.js
@@ -0,0 +1 @@
+!function(a){var b=Array.prototype.slice,c={dict:null,load:function(b){null!==this.dict?a.extend(this.dict,b):this.dict=b},_:function(a){return dict=this.dict,dict&&dict.hasOwnProperty(a)&&(a=dict[a]),args=b.call(arguments),args[0]=a,this.printf.apply(this,args)},printf:function(c,d){return arguments.length<2?c:(d=a.isArray(d)?d:b.call(arguments,1),c.replace(/([^%]|^)%(?:(\d+)\$)?s/g,function(a,b,c){return c?b+d[parseInt(c)-1]:b+d.shift()}).replace(/%%s/g,"%s"))}};a.fn._t=function(){return a(this).html(c._.apply(c,arguments))},a.i18n=c}(jQuery);
\ No newline at end of file
diff --git a/ui/libs/jquery-ui-i18n.min.js b/ui/libs/jquery-ui-i18n.min.js
deleted file mode 100644
index 3ba8a92..0000000
--- a/ui/libs/jquery-ui-i18n.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.11.2 - 2014-10-16
-* http://jqueryui.com
-* Includes: datepicker-af.js, datepicker-ar-DZ.js, datepicker-ar.js, datepicker-az.js, datepicker-be.js, datepicker-bg.js, datepicker-bs.js, datepicker-ca.js, datepicker-cs.js, datepicker-cy-GB.js, datepicker-da.js, datepicker-de.js, datepicker-el.js, datepicker-en-AU.js, datepicker-en-GB.js, datepicker-en-NZ.js, datepicker-eo.js, datepicker-es.js, datepicker-et.js, datepicker-eu.js, datepicker-fa.js, datepicker-fi.js, datepicker-fo.js, datepicker-fr-CA.js, datepicker-fr-CH.js, datepicker-fr.js, datepicker-gl.js, datepicker-he.js, datepicker-hi.js, datepicker-hr.js, datepicker-hu.js, datepicker-hy.js, datepicker-id.js, datepicker-is.js, datepicker-it-CH.js, datepicker-it.js, datepicker-ja.js, datepicker-ka.js, datepicker-kk.js, datepicker-km.js, datepicker-ko.js, datepicker-ky.js, datepicker-lb.js, datepicker-lt.js, datepicker-lv.js, datepicker-mk.js, datepicker-ml.js, datepicker-ms.js, datepicker-nb.js, datepicker-nl-BE.js, datepicker-nl.js, datepicker-nn.js, datepicker-no.js, datepicker-pl.js, datepicker-pt-BR.js, datepicker-pt.js, datepicker-rm.js, datepicker-ro.js, datepicker-ru.js, datepicker-sk.js, datepicker-sl.js, datepicker-sq.js, datepicker-sr-SR.js, datepicker-sr.js, datepicker-sv.js, datepicker-ta.js, datepicker-th.js, datepicker-tj.js, datepicker-tr.js, datepicker-uk.js, datepicker-vi.js, datepicker-zh-CN.js, datepicker-zh-HK.js, datepicker-zh-TW.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t=e.datepicker;t.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.af),t.regional.af,t.regional["ar-DZ"]={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["ar-DZ"]),t.regional["ar-DZ"],t.regional.ar={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ar),t.regional.ar,t.regional.az={closeText:"Bağla",prevText:"<Geri",nextText:"İrəli>",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.az),t.regional.az,t.regional.be={closeText:"Зачыніць",prevText:"←Папяр.",nextText:"Наст.→",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.be),t.regional.be,t.regional.bg={closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.bg),t.regional.bg,t.regional.bs={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.bs),t.regional.bs,t.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ca),t.regional.ca,t.regional.cs={closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.cs),t.regional.cs,t.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["cy-GB"]),t.regional["cy-GB"],t.regional.da={closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.da),t.regional.da,t.regional.de={closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.de),t.regional.de,t.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.el),t.regional.el,t.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-AU"]),t.regional["en-AU"],t.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-GB"]),t.regional["en-GB"],t.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-NZ"]),t.regional["en-NZ"],t.regional.eo={closeText:"Fermi",prevText:"<Anta",nextText:"Sekv>",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.eo),t.regional.eo,t.regional.es={closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.es),t.regional.es,t.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.et),t.regional.et,t.regional.eu={closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.eu),t.regional.eu,t.regional.fa={closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fa),t.regional.fa,t.regional.fi={closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fi),t.regional.fi,t.regional.fo={closeText:"Lat aftur",prevText:"<Fyrra",nextText:"Næsta>",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fo),t.regional.fo,t.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["fr-CA"]),t.regional["fr-CA"],t.regional["fr-CH"]={closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["fr-CH"]),t.regional["fr-CH"],t.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fr),t.regional.fr,t.regional.gl={closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.gl),t.regional.gl,t.regional.he={closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.he),t.regional.he,t.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hi),t.regional.hi,t.regional.hr={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hr),t.regional.hr,t.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},t.setDefaults(t.regional.hu),t.regional.hu,t.regional.hy={closeText:"Փակել",prevText:"<Նախ.",nextText:"Հաջ.>",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hy),t.regional.hy,t.regional.id={closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.id),t.regional.id,t.regional.is={closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.is),t.regional.is,t.regional["it-CH"]={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["it-CH"]),t.regional["it-CH"],t.regional.it={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.it),t.regional.it,t.regional.ja={closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional.ja),t.regional.ja,t.regional.ka={closeText:"დახურვა",prevText:"< წინა",nextText:"შემდეგი >",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ka),t.regional.ka,t.regional.kk={closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.kk),t.regional.kk,t.regional.km={closeText:"ធ្វើរួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃនេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.km),t.regional.km,t.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},t.setDefaults(t.regional.ko),t.regional.ko,t.regional.ky={closeText:"Жабуу",prevText:"<Мур",nextText:"Кий>",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ky),t.regional.ky,t.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.lb),t.regional.lb,t.regional.lt={closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},t.setDefaults(t.regional.lt),t.regional.lt,t.regional.lv={closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.lv),t.regional.lv,t.regional.mk={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.mk),t.regional.mk,t.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്ച്ച്","ഏപ്രില്","മേയ്","ജൂണ്","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്","ഒക്ടോബര്","നവംബര്","ഡിസംബര്"],monthNamesShort:["ജനു","ഫെബ്","മാര്","ഏപ്രി","മേയ്","ജൂണ്","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്","തിങ്കള്","ചൊവ്വ","ബുധന്","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ml),t.regional.ml,t.regional.ms={closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ms),t.regional.ms,t.regional.nb={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nb),t.regional.nb,t.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["nl-BE"]),t.regional["nl-BE"],t.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nl),t.regional.nl,t.regional.nn={closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nn),t.regional.nn,t.regional.no={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.no),t.regional.no,t.regional.pl={closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.pl),t.regional.pl,t.regional["pt-BR"]={closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["pt-BR"]),t.regional["pt-BR"],t.regional.pt={closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.pt),t.regional.pt,t.regional.rm={closeText:"Serrar",prevText:"<Suandant",nextText:"Precedent>",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.rm),t.regional.rm,t.regional.ro={closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ro),t.regional.ro,t.regional.ru={closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ru),t.regional.ru,t.regional.sk={closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sk),t.regional.sk,t.regional.sl={closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sl),t.regional.sl,t.regional.sq={closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sq),t.regional.sq,t.regional["sr-SR"]={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["sr-SR"]),t.regional["sr-SR"],t.regional.sr={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sr),t.regional.sr,t.regional.sv={closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sv),t.regional.sv,t.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ta),t.regional.ta,t.regional.th={closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.th),t.regional.th,t.regional.tj={closeText:"Идома",prevText:"<Қафо",nextText:"Пеш>",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.tj),t.regional.tj,t.regional.tr={closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.tr),t.regional.tr,t.regional.uk={closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.uk),t.regional.uk,t.regional.vi={closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.vi),t.regional.vi,t.regional["zh-CN"]={closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-CN"]),t.regional["zh-CN"],t.regional["zh-HK"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-HK"]),t.regional["zh-HK"],t.regional["zh-TW"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-TW"]),t.regional["zh-TW"]
-});
diff --git a/ui/libs/jquery-ui.min.js b/ui/libs/jquery-ui.min.js
deleted file mode 100644
index 17eab79..0000000
--- a/ui/libs/jquery-ui.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! jQuery UI - v1.11.2 - 2014-10-16
-* http://jqueryui.com
-* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=h&&l.down||l,d=function(){o._toggleComplete(i)};return"number"==typeof u&&(a=u),"string"==typeof u&&(n=u),n=n||u.easing||l.easing,a=a||u.duration||l.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:d,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?r+=i.now:"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,d):e.animate(this.showProps,a,n,d)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.2",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)
-}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.2",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.2",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.2",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.2"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0
-},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,z,H,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),z=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;z>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],j=H.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>H||$&&H>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(H.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===H.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"'")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(j&&!v?" ":W?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.2",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
-},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=u-t.height,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.2",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;
-if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.2",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.2",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
-f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.2",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.2",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(" ")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=(this.options.max-this._valueMin())%this.options.step;this.max=this.options.max-e},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
-return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td> </td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.2",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>▲</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>▼</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.2",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]
-}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.2",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){u.of=e,o.is(":hidden")||o.position(u)}var a,o,r,h,l,u=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(l=s.clone(),l.removeAttr("id").find("[id]").removeAttr("id")):l=s,e("<div>").html(l).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(u.of),clearInterval(h))},e.fx.interval)),this._trigger("open",t,{tooltip:o}),r={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(r.remove=function(){this._removeTooltip(o)}),t&&"mouseover"!==t.type||(r.mouseleave="close"),t&&"focusin"!==t.type||(r.focusout="close"),this._on(!0,i,r)}},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);a&&(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)))},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
\ No newline at end of file
diff --git a/ui/libs/jquery-ui/LICENSE b/ui/libs/jquery-ui/LICENSE
new file mode 100644
index 0000000..c36fa56
--- /dev/null
+++ b/ui/libs/jquery-ui/LICENSE
@@ -0,0 +1,44 @@
+Copyright 2007, 2014 jQuery Foundation and other contributors,
+https://jquery.org/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/jquery-ui
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code contained within the demos directory.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.
\ No newline at end of file
diff --git a/ui/libs/jquery-ui/Makefile.am b/ui/libs/jquery-ui/Makefile.am
new file mode 100644
index 0000000..9d9f646
--- /dev/null
+++ b/ui/libs/jquery-ui/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = themes
+
+jqueryuidir = $(datadir)/wok/ui/libs/jquery-ui
+
+dist_jqueryui_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/jquery-ui/jquery-ui-i18n.min.js b/ui/libs/jquery-ui/jquery-ui-i18n.min.js
new file mode 100644
index 0000000..3ba8a92
--- /dev/null
+++ b/ui/libs/jquery-ui/jquery-ui-i18n.min.js
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.11.2 - 2014-10-16
+* http://jqueryui.com
+* Includes: datepicker-af.js, datepicker-ar-DZ.js, datepicker-ar.js, datepicker-az.js, datepicker-be.js, datepicker-bg.js, datepicker-bs.js, datepicker-ca.js, datepicker-cs.js, datepicker-cy-GB.js, datepicker-da.js, datepicker-de.js, datepicker-el.js, datepicker-en-AU.js, datepicker-en-GB.js, datepicker-en-NZ.js, datepicker-eo.js, datepicker-es.js, datepicker-et.js, datepicker-eu.js, datepicker-fa.js, datepicker-fi.js, datepicker-fo.js, datepicker-fr-CA.js, datepicker-fr-CH.js, datepicker-fr.js, datepicker-gl.js, datepicker-he.js, datepicker-hi.js, datepicker-hr.js, datepicker-hu.js, datepicker-hy.js, datepicker-id.js, datepicker-is.js, datepicker-it-CH.js, datepicker-it.js, datepicker-ja.js, datepicker-ka.js, datepicker-kk.js, datepicker-km.js, datepicker-ko.js, datepicker-ky.js, datepicker-lb.js, datepicker-lt.js, datepicker-lv.js, datepicker-mk.js, datepicker-ml.js, datepicker-ms.js, datepicker-nb.js, datepicker-nl-BE.js, datepicker-nl.js, datepicker-nn.js, datepicker-no.js, datepicker-pl.js, datepicker-pt-BR.js, datepicker-pt.js, datepicker-rm.js, datepicker-ro.js, datepicker-ru.js, datepicker-sk.js, datepicker-sl.js, datepicker-sq.js, datepicker-sr-SR.js, datepicker-sr.js, datepicker-sv.js, datepicker-ta.js, datepicker-th.js, datepicker-tj.js, datepicker-tr.js, datepicker-uk.js, datepicker-vi.js, datepicker-zh-CN.js, datepicker-zh-HK.js, datepicker-zh-TW.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){var t=e.datepicker;t.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.af),t.regional.af,t.regional["ar-DZ"]={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["ar-DZ"]),t.regional["ar-DZ"],t.regional.ar={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ar),t.regional.ar,t.regional.az={closeText:"Bağla",prevText:"<Geri",nextText:"İrəli>",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.az),t.regional.az,t.regional.be={closeText:"Зачыніць",prevText:"←Папяр.",nextText:"Наст.→",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.be),t.regional.be,t.regional.bg={closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.bg),t.regional.bg,t.regional.bs={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.bs),t.regional.bs,t.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ca),t.regional.ca,t.regional.cs={closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.cs),t.regional.cs,t.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["cy-GB"]),t.regional["cy-GB"],t.regional.da={closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.da),t.regional.da,t.regional.de={closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.de),t.regional.de,t.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.el),t.regional.el,t.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-AU"]),t.regional["en-AU"],t.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-GB"]),t.regional["en-GB"],t.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["en-NZ"]),t.regional["en-NZ"],t.regional.eo={closeText:"Fermi",prevText:"<Anta",nextText:"Sekv>",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.eo),t.regional.eo,t.regional.es={closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.es),t.regional.es,t.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.et),t.regional.et,t.regional.eu={closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.eu),t.regional.eu,t.regional.fa={closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سهشنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fa),t.regional.fa,t.regional.fi={closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fi),t.regional.fi,t.regional.fo={closeText:"Lat aftur",prevText:"<Fyrra",nextText:"Næsta>",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fo),t.regional.fo,t.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["fr-CA"]),t.regional["fr-CA"],t.regional["fr-CH"]={closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["fr-CH"]),t.regional["fr-CH"],t.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.fr),t.regional.fr,t.regional.gl={closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.gl),t.regional.gl,t.regional.he={closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.he),t.regional.he,t.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hi),t.regional.hi,t.regional.hr={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hr),t.regional.hr,t.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},t.setDefaults(t.regional.hu),t.regional.hu,t.regional.hy={closeText:"Փակել",prevText:"<Նախ.",nextText:"Հաջ.>",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.hy),t.regional.hy,t.regional.id={closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.id),t.regional.id,t.regional.is={closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.is),t.regional.is,t.regional["it-CH"]={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["it-CH"]),t.regional["it-CH"],t.regional.it={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.it),t.regional.it,t.regional.ja={closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional.ja),t.regional.ja,t.regional.ka={closeText:"დახურვა",prevText:"< წინა",nextText:"შემდეგი >",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ka),t.regional.ka,t.regional.kk={closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.kk),t.regional.kk,t.regional.km={closeText:"ធ្វើរួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃនេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.km),t.regional.km,t.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},t.setDefaults(t.regional.ko),t.regional.ko,t.regional.ky={closeText:"Жабуу",prevText:"<Мур",nextText:"Кий>",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ky),t.regional.ky,t.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.lb),t.regional.lb,t.regional.lt={closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},t.setDefaults(t.regional.lt),t.regional.lt,t.regional.lv={closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.lv),t.regional.lv,t.regional.mk={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.mk),t.regional.mk,t.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്ച്ച്","ഏപ്രില്","മേയ്","ജൂണ്","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്","ഒക്ടോബര്","നവംബര്","ഡിസംബര്"],monthNamesShort:["ജനു","ഫെബ്","മാര്","ഏപ്രി","മേയ്","ജൂണ്","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്","തിങ്കള്","ചൊവ്വ","ബുധന്","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ml),t.regional.ml,t.regional.ms={closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ms),t.regional.ms,t.regional.nb={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nb),t.regional.nb,t.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["nl-BE"]),t.regional["nl-BE"],t.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nl),t.regional.nl,t.regional.nn={closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.nn),t.regional.nn,t.regional.no={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.no),t.regional.no,t.regional.pl={closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.pl),t.regional.pl,t.regional["pt-BR"]={closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["pt-BR"]),t.regional["pt-BR"],t.regional.pt={closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.pt),t.regional.pt,t.regional.rm={closeText:"Serrar",prevText:"<Suandant",nextText:"Precedent>",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.rm),t.regional.rm,t.regional.ro={closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ro),t.regional.ro,t.regional.ru={closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ru),t.regional.ru,t.regional.sk={closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sk),t.regional.sk,t.regional.sl={closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sl),t.regional.sl,t.regional.sq={closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sq),t.regional.sq,t.regional["sr-SR"]={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional["sr-SR"]),t.regional["sr-SR"],t.regional.sr={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sr),t.regional.sr,t.regional.sv={closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.sv),t.regional.sv,t.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.ta),t.regional.ta,t.regional.th={closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.th),t.regional.th,t.regional.tj={closeText:"Идома",prevText:"<Қафо",nextText:"Пеш>",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.tj),t.regional.tj,t.regional.tr={closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.tr),t.regional.tr,t.regional.uk={closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.uk),t.regional.uk,t.regional.vi={closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.setDefaults(t.regional.vi),t.regional.vi,t.regional["zh-CN"]={closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-CN"]),t.regional["zh-CN"],t.regional["zh-HK"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-HK"]),t.regional["zh-HK"],t.regional["zh-TW"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},t.setDefaults(t.regional["zh-TW"]),t.regional["zh-TW"]
+});
diff --git a/ui/libs/jquery-ui/jquery-ui.min.js b/ui/libs/jquery-ui/jquery-ui.min.js
new file mode 100644
index 0000000..5824d12
--- /dev/null
+++ b/ui/libs/jquery-ui/jquery-ui.min.js
@@ -0,0 +1,13 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):(o.length&&(n=e.widget.extend.apply(null,[n].concat(o))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css("box-sizing"),l=e.length&&(!t.length||e.index()<t.index()),u=this.options.animate||{},d=l&&u.down||u,c=function(){o._toggleComplete(i)};return"number"==typeof d&&(a=d),"string"==typeof d&&(n=d),n=n||d.easing||u.easing,a=a||d.duration||u.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:c,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,c):e.animate(this.showProps,a,n,c)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.4",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);
+i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.4",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.4",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.4",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.4"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);
+return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(z)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,""],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(z.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===z.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(z.getTime()===G.getTime()?" "+this._currentClass:"")+(z.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"'")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+z.getMonth()+"' data-year='"+z.getFullYear()+"'")+">"+(j&&!v?" ":W?"<span class='ui-state-default'>"+z.getDate()+"</span>":"<a class='ui-state-default"+(z.getTime()===R.getTime()?" ui-state-highlight":"")+(z.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+z.getDate()+"</a>")+"</td>",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.4",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
+},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=e(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data("ui-resizable-alsoresize"),n={},a=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;
+if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.4",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
+f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this;this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(" ")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.val(),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=this.options.max,t=this._valueMin(),i=this.options.step,s=Math.floor(+(e-t).toFixed(this._precision())/i)*i;e=s+t,this.max=parseFloat(e.toFixed(this._precision()))},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
+return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()<o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<o.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()<o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<o.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===s?t._createTrPlaceholder(t.currentItem.find("tr").eq(0),e("<tr>",t.document[0]).appendTo(n)):"tr"===s?t._createTrPlaceholder(t.currentItem,n):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e("<td> </td>",s.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.4",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>▲</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>▼</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;
+this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data("ui-tooltip-open")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(":hidden")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("<div>").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&"mouseover"!==t.type||(s.mouseleave="close"),t&&"focusin"!==t.type||(s.focusout="close"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
\ No newline at end of file
diff --git a/ui/libs/jquery-ui/themes/Makefile.am b/ui/libs/jquery-ui/themes/Makefile.am
new file mode 100644
index 0000000..1ce56d9
--- /dev/null
+++ b/ui/libs/jquery-ui/themes/Makefile.am
@@ -0,0 +1,18 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = base
diff --git a/ui/libs/jquery-ui/themes/base/Makefile.am b/ui/libs/jquery-ui/themes/base/Makefile.am
new file mode 100644
index 0000000..8a5bbd2
--- /dev/null
+++ b/ui/libs/jquery-ui/themes/base/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = images
+
+basedir = $(datadir)/wok/ui/libs/jquery-ui/themes/base
+
+dist_base_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/libs/jquery-ui/themes/base/images/Makefile.am b/ui/libs/jquery-ui/themes/base/images/Makefile.am
new file mode 100644
index 0000000..38e6f18
--- /dev/null
+++ b/ui/libs/jquery-ui/themes/base/images/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+imagesdir = $(datadir)/wok/ui/libs/jquery-ui/themes/base/images
+
+dist_images_DATA = *.png
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e4af1db3ac79771f85b26e10e3ae8710059765e
GIT binary patch
literal 457
zcmeAS@N?(olHy`uVBq!ia0vp^8Xzpd1SErbK34)MmUKs7M+SzC{oH>NS%G|oWRD<U
z28Jp%28M<f28Lfip@tU>45bDP46hOx7_4S6Fo+k-*%fF5lweEpc6a#?2AmP!?*K&}
zc)B=-WZZju!;p)~P{8fsS+h8Y3A#s59Xebow0`qkb;0a|Q5!b@SnY5ug{8al<myW)
z?dxy*?2_|ef49!4Dt=!3@!FzomihVL%%gwZzq3<*73Z=b?gTSa=I;)nnX%K4*6S*T
zp1sFixN_EO2KVK!?y#f<%s!x!#d>D(tOTvC3~9l}1^gjX_wAqN5%Tok#}4nScjONW
zuC&^HuyAEwLCGrSGYiZbJ+E-ha5p^|lErvtS=s}+6<Ke#?6|V=@}gi&lT6E^VqV?I
zya?00ihoo6y^Jjd{qul+RV{IiC`m~yNwrEYN(E93Mh1o^x`qb2hGrp#hE_(FR>r2f
n1}0Vp2H&16zJa14H$NpatrE9}_MOrxKn)C@u6{1-oD!M<f0eCi
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 0000000000000000000000000000000000000000..efd1ff3e7bbb28391e02788cff94f93bdb085679
GIT binary patch
literal 351
zcmeAS@N?(olHy`uVBq!ia0vp^8XznHBp80OT7LpkEa{HEjtmSN`?>!lvI6-E$sR$z
z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e6mbzsPFCvp`;z
zr;B5V$MLsUPYX6E@VEx9@?|&6ay8;f`myuF-MNb1M(HzW_kEU|eed)0=e7D9W0*D9
zHOYiKOggP_TGyf1*jvZE!RmS=%X5deY=xtt6CQJU6iKG+<oz+X_<8q3u?5F`7o6f<
zaIRG0plfi6-mFE%7e(fFFMDxEe|8b$t>uffPdu6X1Lz9X64!{5l*E!$tK_0oAjM#0
zU}&OiXrOCo7Gh{<Wn^h(Y^rNuVr5|P?aAUBC>nC}Q!>*kacgMbDV+k;z~JfX=d#Wz
Gp$P!pes!Aw
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_flat_10_000000_40x100.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a5aa914b236c0b1552513ab4d5fdda1aa4eef51
GIT binary patch
literal 244
zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F2qYNp$opRhQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=aiY77hwEes65fI<x~7#K<o7#Ln9FfdrnU|<k0n6oR;1}MRl<n8Xlz<9SycnOfl
z@9E+gqH#VsL4tL015h7R1OsEKSz9?!O0~o_q9i4;B-JXpC>2OC7#SFv=o%X68k&U|
w8d@1yS{a+_8kkra7<_xO_y&rG-29Zxv`X9>+ILE)05vdpy85}Sb4q9e0Ooo;w*UYD
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..068406ca901c5d06855a86906b2e36d0d3f79980
GIT binary patch
literal 301
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq*&4&eH|GXHuiJ>Nn{1`6_P!I
zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&61
z4^J1z5R22vKTKyPiu5Y2TAY7hVxPBR&H2P1b#orJiyiJ~<*`31QRkQXL-o*y)!h%x
znGe5@X}d2j`A@^}PiM-H$tGQHf`%LnpC-BAQ(ov705nsz#5JNMC9x#cD!C{XNHG{0
z7@FuB8t59Dg%}!I8ChBxo9Y^vSQ!|6d$RZjiiX_$l+3hB+#1?<N~ZudFnGH9xvX<a
GXaWF(5L_bw
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..979591a8a9e0232ca073fe0689418fe58a16da90
GIT binary patch
literal 387
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fC<Rju*&f~kYY)9^mSxl*x1kgCy^D%S4j2<
z@?~JCQe$9fXklRZ1r%y{!N5>zz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^
zWR|CkV~EG`x99D-85t$mAKd@F*+VUM$~ukHXUpObgeREBN9LXpoBz~pv(Vg&OI9xy
zIa;#Q{_g4J0*9?_KQrG=jkHl_U}#H}IJVs}Qq5B$Xw{>WZ5atiOdlp3V!tRfU-re1
zQVTbiXtAl5B~#th+Y3@pGVD4#@1sD~x#iPsx14w%KK+u&{MbF!t_9wmR%~B57PbA0
zU&4FXpzZ{_)IXz8*O(oRKv$}kxJHzuB$lLFB^RXvDF!10Lla#?16@P25JN*NBTFk|
pQ(XfSD+7aXPZr-m(U6;;l9^VCTSNO!=@g&_22WQ%mvv4FO#o0qho}Gm
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1dc6be0aed5c308955956e5cb2c8dfcb1128ea3
GIT binary patch
literal 246
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADVB6cUq=Rpjs4tz5?O(Kg=CK)
zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&V7%KUyadP-
z^mK6y(Kw%+ks#5!xIpAl1H;se6O5NlHf91PRZCnWN>UO_QmvAUQh^kMk%6I!uAzah
zp;?Hbp_P%Pm9eR=fr*uY!M7)iZ=h(%%}>cptHiCLeW!E^Py>UftDnm{r-UW|!TUb#
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..8dc23e251b0505078f3a0912ddf41db6a89bf72e
GIT binary patch
literal 5854
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
R;LcxOwQ;(FyX1T4zX0?Pvm^ij
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9b25ef80d30a7a6f6fa40e7c77dcd78aba85ea5
GIT binary patch
literal 317
zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q*&4&eH|GXHuiJ>Nn{1`6_P!I
zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&7i
z2u~Ns5Q)o25AEf3aA0V-*e_{PA|fT+A^2utsBza39wB9crJ?W6{k5E{TTy8vDu0%P
zeWCi2JKE*V_dn|99lm;lH99HHr%CRj;q?Qe3)MmzZ6?YZxp&C#57L`*<)qw^(?B~^
zOI#yLQW8s2t&)pUffR$0fuV`6p@FWUS%{&bm64^Dv8k?siIsuDw<n8lplHa=PsvQH
W#I2!yr*sNX1B0ilpUXO@geCxOC}8*i
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/ui/libs/jquery-ui/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a479d12cc304f7c5259a9db8a4827c13d693543
GIT binary patch
literal 367
zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=aiY77hwEes65fI<x~7#K<o7#Ln9FfdrnU|<k0n6oR;1}MRn<n8YA9}GAnzTW|g
zw0XKXhG?9BI>C_ZP=J7od~g)E*+$=Uk7Um%7IiGy@^6Xv0k022VsdT*YtE+W*g57e
zNcdV|y;(=+TXOLhh6nuxi$!<LpWI+~sl7BX;r{we)de%z8fQzeUJ2IxP`8TZ+%}%q
zD~iInZrJ+2-@EkY5rqQj+c}F5{IrS{VLJCY>OnXE{r{KzAG1DtYTsG7sYVLuBGnSt
zh?11Vl2ohYqEsNoU}RuuqHAcNYiJf?XlP|*X=QAxYhYq!VDRn9;u|O$a`RI%(<*Um
UXx}NF0@T3Z>FVdQ&MBb@02WezsQ>@~
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_222222_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed5adeabaf07b8784f55c2487e1cc70ee648c7fb
GIT binary patch
literal 7006
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
Gzx@w(&o~JH
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_228ef1_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_228ef1_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e787bb98f072e1080b4557a20a86cd79b814040
GIT binary patch
literal 4599
zcmeHL_cxqfw0_?iy_ZC<kxUR}^dK0$6D>qAqqiuZ-i;C^MGHdsWKwiOL?2~{E+NrH
zCj_H+3FAt>U+(=M?z7H1d!Mt`bIw}N-fN$dc-KIanu3i2003%jEj42R054r&hYWhz
zPiX6$UK%22WqoA;_>fF_W=niI=CRi@)(3zP7yzJS0pQo=6nYf^{NVtwjsgI=EC68k
z&TTZhbGaD(T|HCvYe~ER-~P7(ww`4cm#SI%85@`Y7Mfw##IqKf`vaYFs}f7{Ee%3`
zA{-x?Jkdx^x3|^DxOn9Fwua-Hmdcmcencf%&&|v?j7<%7jE;=kefK6%4`jQZ+!kcw
z=nVc=*z^4BM8(dRl!Qubcj?lTzRU0cpq;L!8jwKDsRaPE?%Ha~ra|8~ttsuNYUxRO
zwMy2q(%2hxb8dS!!+fPhdu^=8{XIqs+?V8vvG4F97Z>qV^OW)OcRGv<T-aYd?A1gA
zTT5UQ6mdV{67)P#4paIQRRp*XNr;Rn*h(OGLO60|(%D5}Pz;DE`*)=yMBE_iD!LHj
z6LI<z15*}GVNCgY#IklkAr4txYl39TvZjDz5m<^mzX1$S!+HLc_{~{8cH)nyS+$U;
zhDSja@H)T{8dnF%3zQ`)LMA40dL1TmVr>iEXsMI>5iGE&@@bB^HYsO|OkM3Sp0d2y
zBKMr6)v>5183{IAWtGIz&)+PA%!L6tbZPmtI*Iw<Qy??SN#;{$tQmrQN9{$)0dEZN
zSVZU(h2Bioj1J#MGCfd58;2SOr=uTzaeC(B@$3}cA@pVZZLJ4*?|L57@hjSS1&305
z1k3oj2p#=@_@Hp$dlvKFweoB>N^=l`7A;hXpKhM&u7g&R5bHoM=-+c`ljL>Y;k0r+
zqG+P7eD@1qmod+mkpHngi=;`8CvjfuA&cX3DkCnVUgP|ZRU91{1|d6Ri#0rU5W8CD
z`&{;xguL+A{#R1*<FQSgS`$LCa8KD8uQv;9jYZ5GOPLC4^M<tPS|X%GqFNXT-I&}=
z@l*??)!ymCl*518bm*&JcoZwlJng7rpRs=Tg_c^xjJRZb3|%9*)4l)DV{`~e7ui`H
zVYB(SZ-d4F*Vr`3-uu{Z+$+(m7}8SJ7GgxN1Q9jd8?%(g-n4;0LO(qk{TxOWbgC;f
ztPr(E%9rcWzOVv3kiW^)(Qd0NIlwhZ=PrrMb92l}HyEs&K>zmB0Ng>ZylexkMHUbW
z&3)lr?!W}cl2^Vj-@h92lNe=<_De-ES03+mWXFhY%y8iLEvWReh{<YIxOvc2(bqGm
zbzie`Shg;+oj%_z_ok~i*x{-K@`9)L!KnyE*tI{f8>yeh-VQYFd0Uk!A&s|)eG=n2
zDZfs8MwUb<b4HDgS&H6d8~!|hWwI|Ra-mcny~!jK-tFcwwC@*$8?AEy3M%1m3`KcS
zq8~-Ut)JNb>x0M8i4}>@hi+pwNbj$?l<$XS3=oW-jbvIv3vjQ-n|X_CwWF>)#q)zy
z?C*F!RHr<`qV=ydg-;l>{Y$sIb^ikc0^8B`NnW9-xR;3O-|WHT2SbS{{81KNmmxZZ
zZsFW^V6}2J{f-zzf{khpT4kS>aQfCg0skKPCvY8y8X=ut4or2>uzs@<c7oKeWLE)P
z<7c}Nq^q|Sow0F|`4v0UC%g~wRfyfk#!`>25UV<cy-;xk<ytF6q9h>QLmp^NQNPgU
zk-3BcDhTFUTY__O!l6FOipU~!PF7hURRBCOv9Ocz6LQ5)STy3;m~eYJ^3sCQ988Gg
zTatds8j%Hj>`*NlJe7V)d2AAxNiF_XEOG{>+RmNC%e`#4NfEUy`Uq^j^$`lqP4Z+;
zoP~yKX=ovke&3Y-gk;f)*CaxvHiGbgG4X+Fji(^HOwKQ#CdQp<RH09Xm7tTP?Ed~g
zx<7!1dUXnf^M=kp=C>VQ@_UZ++>{h-voX?3{b)|`pfhe%_ig#zK+jwgN2xkj+iB`_
z>jBn3WO!Yh<~jKf#<yTJF{58axmgj-XAh}bWlN(guEZ)mpLqZ=pik{)V;5%(aQ~o1
z4X>kW557O#D!FYvPXya;2_=Pt{mVlaL~%Hx1OUX6L}5%dNw4#g!```Jv`?a<`ynWb
zRaG;qWDw2fQhkECbB<u#*$TzBijmca9*azIZD;m^I_RN`a6PoEG0&ll2bH4MD5Y7D
zd7CTvTgN|Z3m=RwtG>tt%oJbRl|CLO?i2Ce=Gubj@`^@<c^UTfjaOVptVRAN{Pu(}
z_#n8n)6R(=!M%fmR=J=kq&UxEH&MEhFu2T<Ko*1<h}gl%dYe*5YpQYjL2jZI-tdxv
z+>57)r;D{=qE<v-DHh%`6tyoc*?)!g3Gqz5GFZ;pg5+<&=Id3$d3qO`@3cZ?BQ(hT
zd4uQcmMQV_uZi@?K$Hc}3ct;Z5#Cy2==cE>21g)O=L}zN*oha31yE?b`n-Q6k|J~X
z(|~fGD7FzWsOZAI`7+Irl6_dyX%+!A@p14l(KS-v+sw}Kg=e?;L(Ol)SB1R~&wv{k
z2Mk?~YNoJ`-_9XRd;y+efTp=1BS5Ak@^5<g?C!i)QXt-Ll16*r`IHMj&1f!rtQ+x-
zwFR)-54s1><~?YDVcq*x&XTGNcV@>Os{Ii(y;IU-O8t^hiDmV?A0}5edSHWrmYM@P
z>IKP4CDyxfU~m=WzN@%Gj#Wdnd;jR6ixhvl#EaVFBh!E6yT=d2aQ1InebQ-a2z@eM
zZ;_4ixw1}>2vKBcy>fQb0BfID8THVF%9(QRW2MCt=@%-VJ?-hVFjB31n@Axm>e%m-
z70X@oDV@DtBF39?_avA+{5r{toJi?FL#{jF0T<v)>ArX2&h-j55CTzTW<@KCI0J9!
zz!BCn5tL>!SC`@LtXMOCTuJ}!Haw>J(GLtmz)RK~PG<0sA1#EUB~Z}%$GjuB^ocwK
zBN<;MwBiNw?d`zs4oFfWvCz{A)g!c9irdly<GI3&1J@~>cvklZXptBK&kURIjiFUa
z6U7p03X{mSUg!F|{fNXl?;RRe+qbVS<%h-h@HcO?GH}b1xxB%SxX^vzj<QYKgJ(Zh
z<+Hg?<PdB7CKAinejVt273mWgaEwHb>_wPNZ-wl&H-$v|M_G0)E_GYptDPGNv?Qk^
za!bA|IQ={g0c+qMr5+0eYdW>+8)MhE-ra5$N+8@p8-5@xuD$R%$%#CzzJWNp81Yp!
z@f#p9@=eRo-(yrl8-y}W9#O*;gOv{p>y(W=)`xnRALBOPC~#Ylllc5YY~)9_L(R?q
zx2jWSEhf4y_qB=j?^|62_dcLBTLova+y}186t_-W+Ur&r5${)i?~IxwBdL*?l?{P&
z-5#Z_>G+$5^Mrq4|8CT|6tKTMjk{Ms`hEV{FMZk11;flFP=Y8kr7drNpHVe=TGZ9U
zF4~%(htJwuYi>2Z?1L}~)w>Qqn@Cr1uqLgLOZMZGVBJ{lY!g%_HSZI%X`}4-oJ4A)
zeQLh4>KyNlO9J}1x;ceN!c1MGf(h6Oso1y+c`D3z*FfVnHEnTGfuQlGyR(}j3H^><
z`RD?L`D1@(P_pUAdfGviF7Fe|jH)puseM&fJa%(U)NzQap%l)`F8+DH-~VnpXgV*j
zBpW4+QtbXcy8lt)s*M}u9RZ>rWz^+biDFJntlRW@2&^Hk+nlIQr~+=xJLbIRf4aYb
zGsLBy?Q5M&_V(clyc2}bY88Wdn@aLA&uekaCH^13&?AKBe;a!`ExVo9M4y&)ybf-J
zQ4P`3(9lpp)^9xs=g<igiR_7s&+w(XEpNgJ&_;_E3{R4fDvOhZA(KHVsLn+@ndWxU
z5!d>#d8l_Z%Uxp5*R~beO|A#OPnLegvn2RZWjQ%JJA22mV(QxT=ZLvV6YtM(u{D;j
z_$t`m&_tX*cO$`_xDcj2XueLNT<LFc*aLc3;b5)%L_82(-E@@9u7s=7{K{dQU(=*D
zs&(3=tq_@(g~VU$GkTi|%YHf3|B{-0<{Z7bv^rYKcU|P@iuu}prr38>t*`iH=DcAp
z2nsyFbC1yNf5LmnxFM_ntLpaTFGatXYICGmwgmjQN89o1NpELssD*434NsCgv*~lD
zf@_6Nkw>B~)>cKp`WvQM7szb2Y{C?3pN~SH{6PqYw1`UA-w+wn->NoUdZi^^u<$*p
zyP*#4mGArzcA1Q`fW0xRe;r4uwb2})DOtF!sb{Ti5_6Z}`Qe_O?Yh@gBUX#qqP1>s
zvpm(dK^^jVC4|`%LNT-q8kpq99oEsOu)$0`C10^DR4XG$`j>rf8=BwRfT3T-9K2{`
zkFoQjWC@@XqQ-={6pSonz~-;^nVwMM)|$J~wr{26Rux7UO>z@+)mY#sYvIgvb~s+|
z;;Zj1y=N1CT4>6Vpo%BXw)V?O@Jhw5_k&J{rKjKplaK%0>Jt)lH9*DPDo|pvr|d9R
zjeBF`?s*%ZjUtHPhm-LS8|S{x%3uG|gHc)0$TQELUhq&3`x$*hwLwLi2ZRyBKr_p!
zmAyT!Ll=@5Aa{Tq({}9@6<lVCMg^Fq(j(_DR9e@_<d&FTk%PiePTvH|KJa?(U67Wk
z<Iqf%Od#|DuF@Xp9P36$Z9~FZ?E3?w=uy}R#NUJBOWcKQ6+Y>p6%s+<*qlkX>FcHb
zm1lLxA#i4e`N_Jsn7<4@?vi;u7x~qUi}T)&k~SKFeSY<pL>CZVWx74S4NImL$felz
z<u%wH9xGL4{q}Nj+)W)u%6K~LITr`@Rl=sVrQckaVl58M8U4LtcyP6k851zIElbAV
z$|gMN)q<pD&|>h%q#lpzMqcFUywFTLPi44kiS7_+S#-0qV8uSC2a%>O`b}@|$bIe$
zori1&r?#zLp(&(+yr1F8g68JsF50%fO!~?z@bE;*DvA2^QIjIG`CjqqU+HHtgQT$z
zjfo|t(={zEK4b@{=oG!WZ~htBv2k-6n@E@45YBARcN>C%<rNhiMB$3_&qOe(gBe~y
zHvOabzKfrm-GXL3k~n{65V=%_M9Wxju3le@u0_uO<O~C>!D=6qgd+2p!NJ{iZ+<01
z=hH)m24T*Myh)`tm*kV>7s%L2F5ZDLD<t$luR`@+^Kq^ui%h~YvmS3`gbJck;mxUk
zk8=hghYuCi5;LHJ-u(DPrR|q6)8a?8gwa~7G`JvwX$dcVk{I7e7E5*zAfUWwa$nqg
zY=t&jksHN2@>2OOt({*AL=a1AhUd}77sixj&+aUxnQ^-;^Tf40J8XUyknxG-d+Hiq
z%m0s)v5D6S%;5V|{;yrTQ^Xms`&^TD?*jU1PwF~wMwBjEhS_1{SyfWtkSVFSPL!-i
z7QOQ2#`DNXnE*A)`dxdRek<jl%(=uvw%*ZQqG&7+FTUlQ6z>JM%V#Y$Ou0K9qT<+W
zD3Xy0aoBA9D~IW>r<W*_2J*c|#snFo>VH(j39TY2Ae=ll|ApjaUv&q~2&JWwNXq)X
zU&qaqw+~ut?Gb?GMX5bhnQ|49AGps>FXnT`o%Ez2oM|TB@bV3Q!%yA9&%xHuQO@4S
z@zMa|a4|_?F}Sdpw5gbwoS3AXn5-~dQVtI14(CJtAA*OMgR4{Ue+0Ocu=rnsq>P+|
z*nfm)=lmC!1lB)0n0Pt)1={*J0?H0vc8)yS9=6Vo#*VfQ!T<C+UjD`afVR4U+ItmL
G^#1@bXoG10
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_ef8c08_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_ef8c08_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..5dcbe012df24899416caee1a55d1bdf6c22fd837
GIT binary patch
literal 4599
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
GV*UpY-FO86
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_ffd27a_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd39c1b25bbb7734571820d7890a0401c2b70d53
GIT binary patch
literal 4599
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
Hp`-r?FR{ND
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png b/ui/libs/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000000000000000000000000000000000000..39e64723fe6a862f00d5e2578110ce781288070e
GIT binary patch
literal 6468
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
literal 0
HcmV?d00001
diff --git a/ui/libs/jquery-ui/themes/base/jquery-ui.min.css b/ui/libs/jquery-ui/themes/base/jquery-ui.min.css
new file mode 100644
index 0000000..91f16a3
--- /dev/null
+++ b/ui/libs/jquery-ui/themes/base/jquery-ui.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.11.2 - 2014-10-16
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdan…
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
\ No newline at end of file
diff --git a/ui/libs/jquery/LICENSE b/ui/libs/jquery/LICENSE
new file mode 100644
index 0000000..788a7c5
--- /dev/null
+++ b/ui/libs/jquery/LICENSE
@@ -0,0 +1,21 @@
+Copyright 2015 jQuery Foundation and other contributors
+http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/ui/libs/jquery/Makefile.am b/ui/libs/jquery/Makefile.am
new file mode 100644
index 0000000..1aef505
--- /dev/null
+++ b/ui/libs/jquery/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+jquerydir = $(datadir)/wok/ui/libs/jquery
+
+dist_jquery_DATA = $(wildcard *.js) $(NULL)
diff --git a/ui/libs/jquery/jquery.min.js b/ui/libs/jquery/jquery.min.js
new file mode 100644
index 0000000..f364443
--- /dev/null
+++ b/ui/libs/jquery/jquery.min.js
@@ -0,0 +1,6 @@
+/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
+
+return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
+return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
+//# sourceMappingURL=jquery.min.map
\ No newline at end of file
diff --git a/ui/libs/themes/Makefile.am b/ui/libs/themes/Makefile.am
deleted file mode 100644
index 1ce56d9..0000000
--- a/ui/libs/themes/Makefile.am
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SUBDIRS = base
diff --git a/ui/libs/themes/base/Makefile.am b/ui/libs/themes/base/Makefile.am
deleted file mode 100644
index 1bbaa50..0000000
--- a/ui/libs/themes/base/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SUBDIRS = images
-
-basedir = $(datadir)/wok/ui/libs/themes/base
-
-dist_base_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/libs/themes/base/images/Makefile.am b/ui/libs/themes/base/images/Makefile.am
deleted file mode 100644
index dd619c8..0000000
--- a/ui/libs/themes/base/images/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2013
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-imagesdir = $(datadir)/wok/ui/libs/themes/base/images
-
-dist_images_DATA = *.png
diff --git a/ui/libs/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/ui/libs/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
deleted file mode 100644
index 7e4af1db3ac79771f85b26e10e3ae8710059765e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 457
zcmeAS@N?(olHy`uVBq!ia0vp^8Xzpd1SErbK34)MmUKs7M+SzC{oH>NS%G|oWRD<U
z28Jp%28M<f28Lfip@tU>45bDP46hOx7_4S6Fo+k-*%fF5lweEpc6a#?2AmP!?*K&}
zc)B=-WZZju!;p)~P{8fsS+h8Y3A#s59Xebow0`qkb;0a|Q5!b@SnY5ug{8al<myW)
z?dxy*?2_|ef49!4Dt=!3@!FzomihVL%%gwZzq3<*73Z=b?gTSa=I;)nnX%K4*6S*T
zp1sFixN_EO2KVK!?y#f<%s!x!#d>D(tOTvC3~9l}1^gjX_wAqN5%Tok#}4nScjONW
zuC&^HuyAEwLCGrSGYiZbJ+E-ha5p^|lErvtS=s}+6<Ke#?6|V=@}gi&lT6E^VqV?I
zya?00ihoo6y^Jjd{qul+RV{IiC`m~yNwrEYN(E93Mh1o^x`qb2hGrp#hE_(FR>r2f
n1}0Vp2H&16zJa14H$NpatrE9}_MOrxKn)C@u6{1-oD!M<f0eCi
diff --git a/ui/libs/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png b/ui/libs/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
deleted file mode 100644
index efd1ff3e7bbb28391e02788cff94f93bdb085679..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 351
zcmeAS@N?(olHy`uVBq!ia0vp^8XznHBp80OT7LpkEa{HEjtmSN`?>!lvI6-E$sR$z
z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e6mbzsPFCvp`;z
zr;B5V$MLsUPYX6E@VEx9@?|&6ay8;f`myuF-MNb1M(HzW_kEU|eed)0=e7D9W0*D9
zHOYiKOggP_TGyf1*jvZE!RmS=%X5deY=xtt6CQJU6iKG+<oz+X_<8q3u?5F`7o6f<
zaIRG0plfi6-mFE%7e(fFFMDxEe|8b$t>uffPdu6X1Lz9X64!{5l*E!$tK_0oAjM#0
zU}&OiXrOCo7Gh{<Wn^h(Y^rNuVr5|P?aAUBC>nC}Q!>*kacgMbDV+k;z~JfX=d#Wz
Gp$P!pes!Aw
diff --git a/ui/libs/themes/base/images/ui-bg_flat_10_000000_40x100.png b/ui/libs/themes/base/images/ui-bg_flat_10_000000_40x100.png
deleted file mode 100644
index 0a5aa914b236c0b1552513ab4d5fdda1aa4eef51..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 244
zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F2qYNp$opRhQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=aiY77hwEes65fI<x~7#K<o7#Ln9FfdrnU|<k0n6oR;1}MRl<n8Xlz<9SycnOfl
z@9E+gqH#VsL4tL015h7R1OsEKSz9?!O0~o_q9i4;B-JXpC>2OC7#SFv=o%X68k&U|
w8d@1yS{a+_8kkra7<_xO_y&rG-29Zxv`X9>+ILE)05vdpy85}Sb4q9e0Ooo;w*UYD
diff --git a/ui/libs/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png b/ui/libs/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
deleted file mode 100644
index 068406ca901c5d06855a86906b2e36d0d3f79980..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 301
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq*&4&eH|GXHuiJ>Nn{1`6_P!I
zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&61
z4^J1z5R22vKTKyPiu5Y2TAY7hVxPBR&H2P1b#orJiyiJ~<*`31QRkQXL-o*y)!h%x
znGe5@X}d2j`A@^}PiM-H$tGQHf`%LnpC-BAQ(ov705nsz#5JNMC9x#cD!C{XNHG{0
z7@FuB8t59Dg%}!I8ChBxo9Y^vSQ!|6d$RZjiiX_$l+3hB+#1?<N~ZudFnGH9xvX<a
GXaWF(5L_bw
diff --git a/ui/libs/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png b/ui/libs/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
deleted file mode 100644
index 979591a8a9e0232ca073fe0689418fe58a16da90..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 387
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fC<Rju*&f~kYY)9^mSxl*x1kgCy^D%S4j2<
z@?~JCQe$9fXklRZ1r%y{!N5>zz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^
zWR|CkV~EG`x99D-85t$mAKd@F*+VUM$~ukHXUpObgeREBN9LXpoBz~pv(Vg&OI9xy
zIa;#Q{_g4J0*9?_KQrG=jkHl_U}#H}IJVs}Qq5B$Xw{>WZ5atiOdlp3V!tRfU-re1
zQVTbiXtAl5B~#th+Y3@pGVD4#@1sD~x#iPsx14w%KK+u&{MbF!t_9wmR%~B57PbA0
zU&4FXpzZ{_)IXz8*O(oRKv$}kxJHzuB$lLFB^RXvDF!10Lla#?16@P25JN*NBTFk|
pQ(XfSD+7aXPZr-m(U6;;l9^VCTSNO!=@g&_22WQ%mvv4FO#o0qho}Gm
diff --git a/ui/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/ui/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644
index b1dc6be0aed5c308955956e5cb2c8dfcb1128ea3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 246
zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADVB6cUq=Rpjs4tz5?O(Kg=CK)
zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&V7%KUyadP-
z^mK6y(Kw%+ks#5!xIpAl1H;se6O5NlHf91PRZCnWN>UO_QmvAUQh^kMk%6I!uAzah
zp;?Hbp_P%Pm9eR=fr*uY!M7)iZ=h(%%}>cptHiCLeW!E^Py>UftDnm{r-UW|!TUb#
diff --git a/ui/libs/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/ui/libs/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
deleted file mode 100644
index 8dc23e251b0505078f3a0912ddf41db6a89bf72e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5854
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
R;LcxOwQ;(FyX1T4zX0?Pvm^ij
diff --git a/ui/libs/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/ui/libs/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
deleted file mode 100644
index f9b25ef80d30a7a6f6fa40e7c77dcd78aba85ea5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 317
zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q*&4&eH|GXHuiJ>Nn{1`6_P!I
zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=luK|9_FyhG&7i
z2u~Ns5Q)o25AEf3aA0V-*e_{PA|fT+A^2utsBza39wB9crJ?W6{k5E{TTy8vDu0%P
zeWCi2JKE*V_dn|99lm;lH99HHr%CRj;q?Qe3)MmzZ6?YZxp&C#57L`*<)qw^(?B~^
zOI#yLQW8s2t&)pUffR$0fuV`6p@FWUS%{&bm64^Dv8k?siIsuDw<n8lplHa=PsvQH
W#I2!yr*sNX1B0ilpUXO@geCxOC}8*i
diff --git a/ui/libs/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/ui/libs/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
deleted file mode 100644
index 6a479d12cc304f7c5259a9db8a4827c13d693543..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 367
zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQY`6?zK#qG8~eHcB(ehe3dtTp
zz6=aiY77hwEes65fI<x~7#K<o7#Ln9FfdrnU|<k0n6oR;1}MRn<n8YA9}GAnzTW|g
zw0XKXhG?9BI>C_ZP=J7od~g)E*+$=Uk7Um%7IiGy@^6Xv0k022VsdT*YtE+W*g57e
zNcdV|y;(=+TXOLhh6nuxi$!<LpWI+~sl7BX;r{we)de%z8fQzeUJ2IxP`8TZ+%}%q
zD~iInZrJ+2-@EkY5rqQj+c}F5{IrS{VLJCY>OnXE{r{KzAG1DtYTsG7sYVLuBGnSt
zh?11Vl2ohYqEsNoU}RuuqHAcNYiJf?XlP|*X=QAxYhYq!VDRn9;u|O$a`RI%(<*Um
UXx}NF0@T3Z>FVdQ&MBb@02WezsQ>@~
diff --git a/ui/libs/themes/base/images/ui-icons_222222_256x240.png b/ui/libs/themes/base/images/ui-icons_222222_256x240.png
deleted file mode 100644
index ed5adeabaf07b8784f55c2487e1cc70ee648c7fb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 7006
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
Gzx@w(&o~JH
diff --git a/ui/libs/themes/base/images/ui-icons_228ef1_256x240.png b/ui/libs/themes/base/images/ui-icons_228ef1_256x240.png
deleted file mode 100644
index 1e787bb98f072e1080b4557a20a86cd79b814040..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4599
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
G^#1@bXoG10
diff --git a/ui/libs/themes/base/images/ui-icons_ef8c08_256x240.png b/ui/libs/themes/base/images/ui-icons_ef8c08_256x240.png
deleted file mode 100644
index 5dcbe012df24899416caee1a55d1bdf6c22fd837..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4599
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
GV*UpY-FO86
diff --git a/ui/libs/themes/base/images/ui-icons_ffd27a_256x240.png b/ui/libs/themes/base/images/ui-icons_ffd27a_256x240.png
deleted file mode 100644
index dd39c1b25bbb7734571820d7890a0401c2b70d53..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4599
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
Hp`-r?FR{ND
diff --git a/ui/libs/themes/base/images/ui-icons_ffffff_256x240.png b/ui/libs/themes/base/images/ui-icons_ffffff_256x240.png
deleted file mode 100644
index 39e64723fe6a862f00d5e2578110ce781288070e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6468
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
diff --git a/ui/libs/themes/base/jquery-ui.min.css b/ui/libs/themes/base/jquery-ui.min.css
deleted file mode 100644
index 91f16a3..0000000
--- a/ui/libs/themes/base/jquery-ui.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.11.2 - 2014-10-16
-* http://jqueryui.com
-* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdan…
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
\ No newline at end of file
diff --git a/ui/pages/error.html.tmpl b/ui/pages/error.html.tmpl
index eea1179..c767ffb 100644
--- a/ui/pages/error.html.tmpl
+++ b/ui/pages/error.html.tmpl
@@ -27,7 +27,9 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+
<title>Wok</title>
+ <link rel="shortcut icon" href="images/favicon.ico">
<link rel="stylesheet" href="$href("css/theme-default.min.css")">
</head>
diff --git a/ui/pages/login.html.tmpl b/ui/pages/login.html.tmpl
index 12ca69f..91465b6 100644
--- a/ui/pages/login.html.tmpl
+++ b/ui/pages/login.html.tmpl
@@ -30,11 +30,13 @@
<title>Kimchi</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
-<link rel="shortcut icon" href="images/logo.ico">
+<link rel="shortcut icon" href="images/favicon.ico">
+<link rel="stylesheet" href="$href('libs/jquery-ui/theme/base/jquery-ui.min.css')">
+<link rel="stylesheet" href="$href('css/jquery-ui.custom.css')">
<link rel="stylesheet" href="$href('css/theme-default.min.css')">
-<script src="$href('libs/jquery-1.10.0.min.js')"></script>
-<script src="$href('libs/jquery-ui.min.js')"></script>
-<script src="$href('libs/jquery-ui-i18n.min.js')"></script>
+<script src="$href('libs/jquery/jquery.min.js')"></script>
+<script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script>
+<script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script>
<script src="$href('js/wok.min.js')"></script>
<style type="text/css">
.topbar select {
diff --git a/ui/pages/wok-ui.html.tmpl b/ui/pages/wok-ui.html.tmpl
index 2dc4d7a..66b2e99 100644
--- a/ui/pages/wok-ui.html.tmpl
+++ b/ui/pages/wok-ui.html.tmpl
@@ -29,14 +29,13 @@
<title>Kimchi</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
-<link rel="shortcut icon" href="images/logo.ico">
-<link rel="stylesheet" href="$href('libs/themes/base/jquery-ui.min.css')">
+<link rel="shortcut icon" href="images/favicon.ico">
+<link rel="stylesheet" href="$href('libs/jquery-ui/theme/base/jquery-ui.min.css')">
+<link rel="stylesheet" href="$href('css/jquery-ui.custom.css')">
<link rel="stylesheet" href="$href('css/theme-default.min.css')">
-<link rel="stylesheet" href="$href('css/fontawesome/fontawesome.css')">
-<link rel="stylesheet" href="$href('css/opensans/opensans.css')">
-<script src="$href('libs/jquery-1.10.0.min.js')"></script>
-<script src="$href('libs/jquery-ui.min.js')"></script>
-<script src="$href('libs/jquery-ui-i18n.min.js')"></script>
+<script src="$href('libs/jquery/jquery.min.js')"></script>
+<script src="$href('libs/jquery-ui/jquery-ui.min.js')"></script>
+<script src="$href('libs/jquery-ui/jquery-ui-i18n.min.js')"></script>
<script src="$href('js/wok.min.js')"></script>
<!-- This is used for detecting if the UI needs to be built -->
--
1.9.3
1
0
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
The Tasks collection and Task resource are basic structures from the AsyncTasks
feature and will be used by all plugins inside the Wok framework.
This patch-set moves the Tasks model and control from Kimchi to Wok, update all
model and UI files from Kimchi to use the new structure and update the tests
from Kimchi.
Paulo Vital (3):
Move Tasks to Wok.
Update Kimchi to use Tasks from Wok.
Update Kimchi tests to use Tasks from Wok.
docs/API.md | 30 +++++++++++
plugins/kimchi/control/tasks.py | 37 --------------
plugins/kimchi/docs/API.md | 31 ------------
plugins/kimchi/model/debugreports.py | 2 +-
plugins/kimchi/model/host.py | 2 +-
plugins/kimchi/model/storagevolumes.py | 2 +-
plugins/kimchi/model/tasks.py | 64 ------------------------
plugins/kimchi/model/vms.py | 2 +-
plugins/kimchi/model/vmsnapshots.py | 2 +-
plugins/kimchi/tests/test_host.py | 4 +-
plugins/kimchi/tests/test_mock_storagepool.py | 2 +-
plugins/kimchi/tests/test_model_storagevolume.py | 8 +--
plugins/kimchi/tests/test_rest.py | 22 ++++----
plugins/kimchi/tests/test_server.py | 8 +--
plugins/kimchi/ui/js/src/kimchi.api.js | 4 +-
src/wok/control/tasks.py | 37 ++++++++++++++
src/wok/model/tasks.py | 64 ++++++++++++++++++++++++
17 files changed, 160 insertions(+), 161 deletions(-)
delete mode 100644 plugins/kimchi/control/tasks.py
delete mode 100644 plugins/kimchi/model/tasks.py
create mode 100644 src/wok/control/tasks.py
create mode 100644 src/wok/model/tasks.py
--
2.4.3
2
4
[PATCH] [WOK] Adding font-awesome and open-sans CSS files to UI
by sguimaraes943@gmail.com 18 Sep '15
by sguimaraes943@gmail.com 18 Sep '15
18 Sep '15
From: samhenri <samuel.guimaraes(a)eldorado.org.br>
Adding the CSS files pointing to the correct font path in the server.
This patch also removes Fontello references from the project and updates the config and test_config files with the correct path for these font families CSS.
It is recommended to discard previeous UI related patches and apply over HEAD.
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
configure.ac | 6 +-
plugins/kimchi/tests/test_config.py.in | 8 +-
src/wok/config.py.in | 2 +-
ui/Makefile.am | 2 +-
ui/fontello/LICENSE.txt | 66 -
ui/fontello/Makefile.am | 22 -
ui/fontello/css/Makefile.am | 20 -
ui/fontello/css/animation.css | 85 -
ui/fontello/css/fontello.css | 261 ----
ui/fontello/font/Makefile.am | 20 -
ui/fontello/font/fontello.eot | Bin 42700 -> 0 bytes
ui/fontello/font/fontello.svg | 220 ---
ui/fontello/font/fontello.ttf | Bin 42532 -> 0 bytes
ui/fontello/font/fontello.woff | Bin 24196 -> 0 bytes
ui/fonts/LICENSE.txt | 139 ++
ui/fonts/Makefile.am | 22 +
ui/fonts/css/Makefile.am | 20 +
ui/fonts/css/fontawesome.css | 2669 ++++++++++++++++++++++++++++++++
ui/fonts/css/opensans.css | 79 +
ui/pages/wok-ui.html.tmpl | 5 +-
20 files changed, 2940 insertions(+), 706 deletions(-)
delete mode 100644 ui/fontello/LICENSE.txt
delete mode 100644 ui/fontello/Makefile.am
delete mode 100644 ui/fontello/css/Makefile.am
delete mode 100644 ui/fontello/css/animation.css
delete mode 100644 ui/fontello/css/fontello.css
delete mode 100644 ui/fontello/font/Makefile.am
delete mode 100644 ui/fontello/font/fontello.eot
delete mode 100644 ui/fontello/font/fontello.svg
delete mode 100644 ui/fontello/font/fontello.ttf
delete mode 100644 ui/fontello/font/fontello.woff
create mode 100644 ui/fonts/LICENSE.txt
create mode 100644 ui/fonts/Makefile.am
create mode 100644 ui/fonts/css/Makefile.am
create mode 100644 ui/fonts/css/fontawesome.css
create mode 100644 ui/fonts/css/opensans.css
diff --git a/configure.ac b/configure.ac
index 47c2e6c..d8e89a7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -104,9 +104,9 @@ AC_CONFIG_FILES([
plugins/sample/ui/pages/Makefile
ui/Makefile
ui/css/Makefile
- ui/fontello/Makefile
- ui/fontello/css/Makefile
- ui/fontello/font/Makefile
+ ui/fonts/Makefile
+ ui/fonts/css/Makefile
+ ui/fonts/font/Makefile
ui/images/Makefile
ui/images/theme-default/Makefile
ui/js/Makefile
diff --git a/plugins/kimchi/tests/test_config.py.in b/plugins/kimchi/tests/test_config.py.in
index 0167610..2aac410 100644
--- a/plugins/kimchi/tests/test_config.py.in
+++ b/plugins/kimchi/tests/test_config.py.in
@@ -121,9 +121,9 @@ class ConfigTests(unittest.TestCase):
'tools.nocache.on': False,
'tools.wokauth.on': False
},
- '/fontello': {
+ '/fonts': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/fontello' % paths.prefix,
+ 'tools.staticdir.dir': '%s/ui/fonts' % paths.prefix,
'tools.expires.on': True,
'tools.expires.secs': CACHEEXPIRES,
'tools.nocache.on': False,
@@ -229,9 +229,9 @@ class ConfigTests(unittest.TestCase):
'tools.nocache.on': False,
'tools.wokauth.on': False
},
- '/fontello': {
+ '/fonts': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/fontello' % pluginPrefix,
+ 'tools.staticdir.dir': '%s/ui/fonts' % pluginPrefix,
'tools.expires.on': True,
'tools.expires.secs': CACHEEXPIRES,
'tools.nocache.on': False,
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index 10cb58c..f6960d4 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -132,7 +132,7 @@ class UIConfig(dict):
def __init__(self, paths):
ui_configs = {}
- for sub_dir in ('css', 'fontello', 'js', 'libs', 'images'):
+ for sub_dir in ('css', 'fonts', 'js', 'libs', 'images'):
ui_configs['/' + sub_dir] = {
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.join(paths.ui_dir, sub_dir),
diff --git a/ui/Makefile.am b/ui/Makefile.am
index 6be27ed..6994705 100644
--- a/ui/Makefile.am
+++ b/ui/Makefile.am
@@ -15,7 +15,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-SUBDIRS = css fontello images js libs pages
+SUBDIRS = css fonts images js libs pages
uidir = $(datadir)/wok/ui
diff --git a/ui/fontello/LICENSE.txt b/ui/fontello/LICENSE.txt
deleted file mode 100644
index 0effddb..0000000
--- a/ui/fontello/LICENSE.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-Font license info
-
-
-## Font Awesome
-
- Copyright (C) 2012 by Dave Gandy
-
- Author: Dave Gandy
- License: SIL ()
- Homepage: http://fortawesome.github.com/Font-Awesome/
-
-
-## Entypo
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: Daniel Bruce
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.entypo.com
-
-
-## Elusive
-
- Copyright (C) 2013 by Aristeides Stathopoulos
-
- Author: Aristeides Stathopoulos
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://aristeides.com/
-
-
-## MFG Labs
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: MFG Labs
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.mfglabs.com/
-
-
-## Typicons
-
- (c) Stephen Hutchings 2012
-
- Author: Stephen Hutchings
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://typicons.com/
-
-
-## Zocial
-
- Copyright (C) 2012 by Sam Collins
-
- Author: Sam Collins
- License: MIT (http://opensource.org/licenses/mit-license.php)
- Homepage: http://zocial.smcllns.com/
-
-
-## Fontelico
-
- Copyright (C) 2012 by Fontello project
-
- Author: Crowdsourced, for Fontello project
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://fontello.com
-
-
diff --git a/ui/fontello/Makefile.am b/ui/fontello/Makefile.am
deleted file mode 100644
index 0576ed2..0000000
--- a/ui/fontello/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SUBDIRS = css font
-
-fontellodir = $(datadir)/wok/ui/fontello
-
-dist_fontello_DATA = LICENSE.txt
diff --git a/ui/fontello/css/Makefile.am b/ui/fontello/css/Makefile.am
deleted file mode 100644
index 50b5489..0000000
--- a/ui/fontello/css/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-cssdir = $(datadir)/wok/ui/fontello/css
-
-dist_css_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/fontello/css/animation.css b/ui/fontello/css/animation.css
deleted file mode 100644
index ac5a956..0000000
--- a/ui/fontello/css/animation.css
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- Animation example, for spinners
-*/
-.animate-spin {
- -moz-animation: spin 2s infinite linear;
- -o-animation: spin 2s infinite linear;
- -webkit-animation: spin 2s infinite linear;
- animation: spin 2s infinite linear;
- display: inline-block;
-}
-@-moz-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-webkit-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-o-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-ms-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
diff --git a/ui/fontello/css/fontello.css b/ui/fontello/css/fontello.css
deleted file mode 100644
index d9df9ce..0000000
--- a/ui/fontello/css/fontello.css
+++ /dev/null
@@ -1,261 +0,0 @@
-@font-face {
- font-family: 'fontello';
- src: url('../font/fontello.eot?99320945');
- src: url('../font/fontello.eot?99320945#iefix') format('embedded-opentype'),
- url('../font/fontello.woff?99320945') format('woff'),
- url('../font/fontello.ttf?99320945') format('truetype'),
- url('../font/fontello.svg?99320945#fontello') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
-/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
-/*
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: 'fontello';
- src: url('../font/fontello.svg?99320945#fontello') format('svg');
- }
-}
-*/
-
- [class^="icon-"]:before, [class*=" icon-"]:before {
- font-family: "fontello";
- font-style: normal;
- font-weight: normal;
- speak: none;
-
- display: inline-block;
- text-decoration: inherit;
- width: 1em;
- margin-right: .2em;
- text-align: center;
- /* opacity: .8; */
-
- /* For safety - reset parent styles, that can break glyph codes*/
- font-variant: normal;
- text-transform: none;
-
- /* fix buttons height, for twitter bootstrap */
- line-height: 1em;
-
- /* Animation center compensation - margins should be symmetric */
- /* remove if not needed */
- margin-left: .2em;
-
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
-
- /* Uncomment for 3D effect */
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
-}
-
-.icon-user:before { content: '\e800'; } /* '' */
-.icon-help-circled:before { content: '\e801'; } /* '' */
-.icon-search:before { content: '\e802'; } /* '' */
-.icon-tag:before { content: '\e803'; } /* '' */
-.icon-dot-2:before { content: '\e804'; } /* '' */
-.icon-arrows-cw:before { content: '\e805'; } /* '' */
-.icon-print:before { content: '\e806'; } /* '' */
-.icon-cancel-circled:before { content: '\e807'; } /* '' */
-.icon-edit-alt:before { content: '\e808'; } /* '' */
-.icon-login:before { content: '\e809'; } /* '' */
-.icon-logout:before { content: '\e80a'; } /* '' */
-.icon-download:before { content: '\e80b'; } /* '' */
-.icon-th-large:before { content: '\e80c'; } /* '' */
-.icon-th:before { content: '\e80d'; } /* '' */
-.icon-th-list:before { content: '\e80e'; } /* '' */
-.icon-star:before { content: '\e80f'; } /* '' */
-.icon-star-empty:before { content: '\e810'; } /* '' */
-.icon-users:before { content: '\e811'; } /* '' */
-.icon-upload:before { content: '\e812'; } /* '' */
-.icon-circle-thin:before { content: '\e813'; } /* '' */
-.icon-dot-circled:before { content: '\e814'; } /* '' */
-.icon-ok:before { content: '\e815'; } /* '' */
-.icon-check-empty-1:before { content: '\e816'; } /* '' */
-.icon-clock-2:before { content: '\e817'; } /* '' */
-.icon-ok-squared:before { content: '\e818'; } /* '' */
-.icon-pin:before { content: '\e820'; } /* '' */
-.icon-eye:before { content: '\e821'; } /* '' */
-.icon-attach:before { content: '\e824'; } /* '' */
-.icon-unlink:before { content: '\e825'; } /* '' */
-.icon-link:before { content: '\e826'; } /* '' */
-.icon-home:before { content: '\e827'; } /* '' */
-.icon-info:before { content: '\e828'; } /* '' */
-.icon-info-circled:before { content: '\e829'; } /* '' */
-.icon-export:before { content: '\e82f'; } /* '' */
-.icon-export-alt:before { content: '\e830'; } /* '' */
-.icon-share:before { content: '\e831'; } /* '' */
-.icon-share-squared:before { content: '\e832'; } /* '' */
-.icon-retweet:before { content: '\e836'; } /* '' */
-.icon-attention-alt:before { content: '\e837'; } /* '' */
-.icon-attention:before { content: '\e838'; } /* '' */
-.icon-attention-circled:before { content: '\e839'; } /* '' */
-.icon-location:before { content: '\e83a'; } /* '' */
-.icon-trash:before { content: '\e83b'; } /* '' */
-.icon-doc:before { content: '\e83c'; } /* '' */
-.icon-docs:before { content: '\e83d'; } /* '' */
-.icon-doc-text:before { content: '\e83e'; } /* '' */
-.icon-doc-inv:before { content: '\e83f'; } /* '' */
-.icon-doc-text-inv:before { content: '\e840'; } /* '' */
-.icon-file-pdf:before { content: '\e841'; } /* '' */
-.icon-file-word:before { content: '\e842'; } /* '' */
-.icon-file-excel:before { content: '\e843'; } /* '' */
-.icon-file-powerpoint:before { content: '\e844'; } /* '' */
-.icon-file-image:before { content: '\e845'; } /* '' */
-.icon-cog:before { content: '\e84b'; } /* '' */
-.icon-cog-alt:before { content: '\e84c'; } /* '' */
-.icon-wrench:before { content: '\e84d'; } /* '' */
-.icon-calendar:before { content: '\e84e'; } /* '' */
-.icon-calendar-empty:before { content: '\e84f'; } /* '' */
-.icon-clock:before { content: '\e852'; } /* '' */
-.icon-block:before { content: '\e853'; } /* '' */
-.icon-zoom-in:before { content: '\e857'; } /* '' */
-.icon-zoom-out:before { content: '\e858'; } /* '' */
-.icon-down-circled2:before { content: '\e859'; } /* '' */
-.icon-up-circled2:before { content: '\e85a'; } /* '' */
-.icon-left-circled2:before { content: '\e85b'; } /* '' */
-.icon-right-circled2:before { content: '\e85c'; } /* '' */
-.icon-down-dir:before { content: '\e85d'; } /* '' */
-.icon-up-dir:before { content: '\e85e'; } /* '' */
-.icon-left-dir:before { content: '\e85f'; } /* '' */
-.icon-right-dir:before { content: '\e860'; } /* '' */
-.icon-down-open:before { content: '\e861'; } /* '' */
-.icon-left-open:before { content: '\e862'; } /* '' */
-.icon-right-open:before { content: '\e863'; } /* '' */
-.icon-up-open:before { content: '\e864'; } /* '' */
-.icon-angle-left:before { content: '\e865'; } /* '' */
-.icon-angle-right:before { content: '\e866'; } /* '' */
-.icon-angle-up:before { content: '\e867'; } /* '' */
-.icon-angle-down:before { content: '\e868'; } /* '' */
-.icon-angle-circled-left:before { content: '\e869'; } /* '' */
-.icon-angle-circled-right:before { content: '\e86a'; } /* '' */
-.icon-angle-circled-up:before { content: '\e86b'; } /* '' */
-.icon-angle-circled-down:before { content: '\e86c'; } /* '' */
-.icon-angle-double-left:before { content: '\e86d'; } /* '' */
-.icon-angle-double-right:before { content: '\e86e'; } /* '' */
-.icon-angle-double-up:before { content: '\e86f'; } /* '' */
-.icon-angle-double-down:before { content: '\e870'; } /* '' */
-.icon-down-big:before { content: '\e871'; } /* '' */
-.icon-left-big:before { content: '\e872'; } /* '' */
-.icon-right-big:before { content: '\e873'; } /* '' */
-.icon-up-big:before { content: '\e874'; } /* '' */
-.icon-left-circled:before { content: '\e875'; } /* '' */
-.icon-right-circled:before { content: '\e876'; } /* '' */
-.icon-up-circled:before { content: '\e877'; } /* '' */
-.icon-down-circled:before { content: '\e878'; } /* '' */
-.icon-cw:before { content: '\e879'; } /* '' */
-.icon-ccw:before { content: '\e87a'; } /* '' */
-.icon-level-up:before { content: '\e87c'; } /* '' */
-.icon-level-down:before { content: '\e87d'; } /* '' */
-.icon-shuffle:before { content: '\e87e'; } /* '' */
-.icon-exchange:before { content: '\e87f'; } /* '' */
-.icon-history:before { content: '\e880'; } /* '' */
-.icon-expand:before { content: '\e881'; } /* '' */
-.icon-collapse:before { content: '\e882'; } /* '' */
-.icon-expand-right:before { content: '\e883'; } /* '' */
-.icon-collapse-left:before { content: '\e884'; } /* '' */
-.icon-play:before { content: '\e885'; } /* '' */
-.icon-play-circled2:before { content: '\e886'; } /* '' */
-.icon-play-circled:before { content: '\e887'; } /* '' */
-.icon-stop:before { content: '\e888'; } /* '' */
-.icon-cloud:before { content: '\e889'; } /* '' */
-.icon-table:before { content: '\e88a'; } /* '' */
-.icon-off:before { content: '\e88b'; } /* '' */
-.icon-check:before { content: '\e88c'; } /* '' */
-.icon-asterisk:before { content: '\e88e'; } /* '' */
-.icon-chart-bar:before { content: '\e88f'; } /* '' */
-.icon-bug:before { content: '\e890'; } /* '' */
-.icon-certificate:before { content: '\e891'; } /* '' */
-.icon-tasks:before { content: '\e892'; } /* '' */
-.icon-sort-up:before { content: '\e893'; } /* '' */
-.icon-sort-down:before { content: '\e894'; } /* '' */
-.icon-sort:before { content: '\e895'; } /* '' */
-.icon-gauge:before { content: '\e896'; } /* '' */
-.icon-spinner:before { content: '\e897'; } /* '' */
-.icon-database:before { content: '\e898'; } /* '' */
-.icon-lifebuoy:before { content: '\e899'; } /* '' */
-.icon-cubes:before { content: '\e89a'; } /* '' */
-.icon-cube:before { content: '\e89b'; } /* '' */
-.icon-bullseye:before { content: '\e89c'; } /* '' */
-.icon-windows:before { content: '\e89d'; } /* '' */
-.icon-cancel-circled-1:before { content: '\e89e'; } /* '' */
-.icon-plus-1:before { content: '\e8a0'; } /* '' */
-.icon-plus-circled-1:before { content: '\e8a1'; } /* '' */
-.icon-minus-1:before { content: '\e8a3'; } /* '' */
-.icon-minus-circled-1:before { content: '\e8a4'; } /* '' */
-.icon-help-circled-1:before { content: '\e8a7'; } /* '' */
-.icon-heart-empty-1:before { content: '\e8aa'; } /* '' */
-.icon-mail-1:before { content: '\e8ab'; } /* '' */
-.icon-star-1:before { content: '\e8ac'; } /* '' */
-.icon-star-empty-1:before { content: '\e8ad'; } /* '' */
-.icon-link-1:before { content: '\e8ae'; } /* '' */
-.icon-attach-1:before { content: '\e8af'; } /* '' */
-.icon-eye-1:before { content: '\e8b2'; } /* '' */
-.icon-attention-1:before { content: '\e8b3'; } /* '' */
-.icon-doc-text-1:before { content: '\e8b4'; } /* '' */
-.icon-doc-text-inv-1:before { content: '\e8b5'; } /* '' */
-.icon-share-1:before { content: '\e8b7'; } /* '' */
-.icon-shareable:before { content: '\e8b8'; } /* '' */
-.icon-ccw-1:before { content: '\e8cc'; } /* '' */
-.icon-cw-1:before { content: '\e8cd'; } /* '' */
-.icon-arrows-ccw:before { content: '\e8ce'; } /* '' */
-.icon-play-1:before { content: '\e8cf'; } /* '' */
-.icon-pause:before { content: '\e8d0'; } /* '' */
-.icon-record:before { content: '\e8d1'; } /* '' */
-.icon-stop-1:before { content: '\e8d2'; } /* '' */
-.icon-switch:before { content: '\e8d3'; } /* '' */
-.icon-loop:before { content: '\e8d4'; } /* '' */
-.icon-cloud-1:before { content: '\e8d5'; } /* '' */
-.icon-certificate-outline:before { content: '\e8db'; } /* '' */
-.icon-certificate-1:before { content: '\e8dc'; } /* '' */
-.icon-windows-1:before { content: '\e8dd'; } /* '' */
-.icon-spin5:before { content: '\e8df'; } /* '' */
-.icon-spin2:before { content: '\e8e0'; } /* '' */
-.icon-picture:before { content: '\e8e4'; } /* '' */
-.icon-menu:before { content: '\e8e5'; } /* '' */
-.icon-sliders:before { content: '\e8e6'; } /* '' */
-.icon-list-alt:before { content: '\e8e7'; } /* '' */
-.icon-ajust:before { content: '\e8e8'; } /* '' */
-.icon-circle:before { content: '\e8e9'; } /* '' */
-.icon-circle-empty:before { content: '\e8ea'; } /* '' */
-.icon-circle-notch:before { content: '\e8ec'; } /* '' */
-.icon-fork:before { content: '\e8ed'; } /* '' */
-.icon-sitemap:before { content: '\e8ee'; } /* '' */
-.icon-stethoscope:before { content: '\e8ef'; } /* '' */
-.icon-shield:before { content: '\e8f0'; } /* '' */
-.icon-heart-1:before { content: '\e8f1'; } /* '' */
-.icon-search-1:before { content: '\e8f2'; } /* '' */
-.icon-menu-1:before { content: '\e8f3'; } /* '' */
-.icon-back:before { content: '\e8f6'; } /* '' */
-.icon-home-1:before { content: '\e8f7'; } /* '' */
-.icon-pencil-1:before { content: '\e8f8'; } /* '' */
-.icon-location-1:before { content: '\e8f9'; } /* '' */
-.icon-logout-1:before { content: '\e8fb'; } /* '' */
-.icon-login-1:before { content: '\e8fc'; } /* '' */
-.icon-publish:before { content: '\e8fd'; } /* '' */
-.icon-window:before { content: '\e8fe'; } /* '' */
-.icon-chart-pie:before { content: '\e8ff'; } /* '' */
-.icon-chart-line:before { content: '\e900'; } /* '' */
-.icon-chart-area:before { content: '\e901'; } /* '' */
-.icon-chart-bar-1:before { content: '\e902'; } /* '' */
-.icon-air:before { content: '\e905'; } /* '' */
-.icon-database-1:before { content: '\e906'; } /* '' */
-.icon-flow-cascade:before { content: '\e907'; } /* '' */
-.icon-flow-tree:before { content: '\e908'; } /* '' */
-.icon-flow-line:before { content: '\e909'; } /* '' */
-.icon-flow-branch:before { content: '\e90a'; } /* '' */
-.icon-flow-parallel-1:before { content: '\e90f'; } /* '' */
-.icon-dot:before { content: '\e910'; } /* '' */
-.icon-dot-3:before { content: '\e911'; } /* '' */
-.icon-cd:before { content: '\e912'; } /* '' */
-.icon-back-in-time:before { content: '\e913'; } /* '' */
-.icon-list:before { content: '\e914'; } /* '' */
-.icon-list-add:before { content: '\e915'; } /* '' */
-.icon-progress-0:before { content: '\e919'; } /* '' */
-.icon-pencil-2:before { content: '\e91d'; } /* '' */
-.icon-cog-2:before { content: '\e91f'; } /* '' */
-.icon-cog-circled:before { content: '\e920'; } /* '' */
-.icon-cogs:before { content: '\e921'; } /* '' */
-.icon-calendar-1:before { content: '\e924'; } /* '' */
-.icon-doc-new:before { content: '\e925'; } /* '' */
\ No newline at end of file
diff --git a/ui/fontello/font/Makefile.am b/ui/fontello/font/Makefile.am
deleted file mode 100644
index da9cb66..0000000
--- a/ui/fontello/font/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-fontdir = $(datadir)/wok/ui/fontello/font
-
-dist_font_DATA = $(wildcard fontello.*) $(NULL)
diff --git a/ui/fontello/font/fontello.eot b/ui/fontello/font/fontello.eot
deleted file mode 100644
index 4485477e781e2444c35c47b5b8944695fcb79af3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 42700
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
DzM+#I
diff --git a/ui/fontello/font/fontello.svg b/ui/fontello/font/fontello.svg
deleted file mode 100644
index 7efcd70..0000000
--- a/ui/fontello/font/fontello.svg
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Copyright (C) 2014 by original authors @ fontello.com</metadata>
-<defs>
-<font id="fontello" horiz-adv-x="1000" >
-<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
-<missing-glyph horiz-adv-x="1000" />
-<glyph glyph-name="user" unicode="" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58z m-179 498q0-88-63-151t-151-63-152 63-62 151 62 152 152 63 151-63 63-152z" horiz-adv-x="785.7" />
-<glyph glyph-name="help-circled" unicode="" d="m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="search" unicode="" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="tag" unicode="" d="m250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z" horiz-adv-x="857.1" />
-<glyph glyph-name="dot-2" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 32-32 78 32 78 78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33q-46 0-78 32t-32 78 32 78 78 32z" horiz-adv-x="570" />
-<glyph glyph-name="arrows-cw" unicode="" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="print" unicode="" d="m214-7h500v143h-500v-143z m0 357h500v214h-89q-22 0-38 16t-16 38v89h-357v-357z m643-36q0 15-10 25t-26 11-25-11-10-25 10-25 25-10 26 10 10 25z m72 0v-232q0-7-6-12t-12-6h-125v-89q0-22-16-38t-38-16h-536q-22 0-37 16t-16 38v89h-125q-7 0-13 6t-5 12v232q0 44 32 76t75 31h36v304q0 22 16 38t37 16h375q23 0 50-12t42-26l85-85q15-16 27-43t11-49v-143h35q45 0 76-31t32-76z" horiz-adv-x="928.6" />
-<glyph glyph-name="cancel-circled" unicode="" d="m641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="edit-alt" unicode="" d="m0-150l0 1000 646 0-164-164-318 0 0-672 672 0 0 319 164 164 0-647-1000 0z m363 363l0 118 6 0q39 2 72-30 39-39 39-88l-117 0z m51 176l367 367 125-125-367-367z m397 397l64 64 125-125-64-64z" horiz-adv-x="1000" />
-<glyph glyph-name="login" unicode="" d="m661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 63 27t27 63v392q0 37-27 63t-63 27h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
-<glyph glyph-name="logout" unicode="" d="m357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
-<glyph glyph-name="download" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-144 60t-59 143z m155 359q0 33 24 57 23 23 56 23t57-23l105-106v344q0 33 24 57t56 23 57-23 24-57v-344l110 110q24 24 57 24t56-24q24-23 24-56t-24-57l-247-247q-24-25-57-25-32 0-56 25l-242 242q-24 24-24 57z" horiz-adv-x="937.5" />
-<glyph glyph-name="th-large" unicode="" d="m429 279v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z m500-428v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="th" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-22 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-22 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="th-list" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m714-285v-108q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v108q0 22 16 38t38 15h535q23 0 38-15t16-38z m-714 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m714-286v-107q0-22-16-38t-38-15h-535q-23 0-38 15t-16 38v107q0 23 16 38t38 16h535q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-535q-23 0-38 16t-16 38v107q0 22 16 38t38 16h535q23 0 38-16t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="star" unicode="" d="m929 489q0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
-<glyph glyph-name="star-empty" unicode="" d="m634 290l171 165-235 35-106 213-105-213-236-35 171-165-41-235 211 111 211-111z m295 199q0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
-<glyph glyph-name="users" unicode="" d="m331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
-<glyph glyph-name="upload" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-143 59t-60 144z m155 407q0 33 24 57l247 247q23 23 57 23 33 0 56-23l243-242q23-24 23-57t-23-57q-24-23-57-23t-57 23l-105 105v-344q0-33-24-57t-56-24q-33 0-57 24t-24 57v344l-110-110q-24-23-57-23t-56 23-24 57z" horiz-adv-x="937.5" />
-<glyph glyph-name="circle-thin" unicode="" d="m429 707q-73 0-139-28t-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139-29 139-76 114-114 76-138 28z m428-357q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="dot-circled" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m-142 304q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="ok" unicode="" d="m932 534q0-22-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38z" horiz-adv-x="1000" />
-<glyph glyph-name="check-empty-1" unicode="" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
-<glyph glyph-name="clock-2" unicode="" d="m0 349q0 188 134 322t322 134 321-134 133-322-133-321-321-133-322 133-134 321z m119 0q0-140 99-238t238-99 238 99 99 238-99 238-238 99-238-99-99-238z m172-69l0 117 117 0 0 213 117 0 0-330-234 0z" horiz-adv-x="910" />
-<glyph glyph-name="ok-squared" unicode="" d="m382 125l343 343q10 10 10 25t-10 25l-57 57q-11 10-25 10t-25-10l-261-261-118 118q-10 11-25 11t-25-11l-57-57q-10-11-10-25t10-25l200-200q11-11 25-11t25 11z m475 493v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="pin" unicode="" d="m268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
-<glyph glyph-name="eye" unicode="" d="m929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
-<glyph glyph-name="attach" unicode="" d="m783 77q0-65-44-109t-109-44q-75 0-131 55l-434 434q-63 64-63 151 0 88 62 150t150 62q88 0 152-63l338-338q5-5 5-12 0-9-17-26t-26-17q-7 0-13 5l-338 339q-44 43-101 43-59 0-100-42t-40-101q0-58 42-101l433-433q35-35 81-35 36 0 59 23t24 59q0 46-36 81l-324 324q-14 14-33 14-16 0-27-11t-11-27q0-18 14-33l229-228q6-6 6-13 0-9-18-26t-26-17q-7 0-12 5l-229 229q-35 34-35 83 0 46 32 78t77 32q49 0 83-36l325-324q55-54 55-131z" horiz-adv-x="785.7" />
-<glyph glyph-name="unlink" unicode="" d="m245 141l-143-143q-5-5-13-5-6 0-13 5-5 5-5 13t5 13l143 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 11-24 31l134 10 152-153q15-15 38-15t38 15l82 81q15 16 15 37 0 23-15 38l-153 154 10 133q20-12 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z" horiz-adv-x="928.6" />
-<glyph glyph-name="link" unicode="" d="m812 171q0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
-<glyph glyph-name="home" unicode="" d="m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z" horiz-adv-x="928.6" />
-<glyph glyph-name="info" unicode="" d="m357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="info-circled" unicode="" d="m571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="export" unicode="" d="m786 298v-144q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h142q7 0 13-6t5-12q0-15-15-18-43-15-74-34-5-2-9-2h-62q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v119q0 11 10 16 16 7 30 21 9 9 20 4 12-5 12-16z m132 277l-214-214q-10-11-25-11-7 0-14 3-22 9-22 33v107h-89q-181 0-245-73-66-77-41-264 2-13-11-19-5-1-7-1-9 0-14 7-6 8-12 17t-22 38-28 56-21 64-10 68q0 27 2 50t8 51 15 49 27 45 38 42 52 34 70 27 89 17 110 6h89v107q0 24 22 33 7 3 14 3 14 0 25-11l214-214q11-11 11-25t-11-25z" horiz-adv-x="928.6" />
-<glyph glyph-name="export-alt" unicode="" d="m561 236l196 196q11 11 11 25t-11 25l-196 197q-17 17-39 7-22-9-22-32v-90q-66 0-121-11t-90-28-64-44-42-53-25-61-12-62-3-62q0-101 93-226 6-6 14-6 4 0 7 1 13 5 11 19-25 197 34 264 26 29 73 42t125 13v-89q0-24 22-33 7-3 14-3 14 0 25 11z m296 382v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="share" unicode="" d="m679 279q74 0 126-53t52-126-52-126-126-53-127 53-52 126q0 7 1 19l-201 100q-51-48-121-48-75 0-127 53t-52 126 52 126 127 53q70 0 121-48l201 100q-1 12-1 19 0 74 52 126t127 53 126-53 52-126-52-126-126-53q-71 0-122 48l-201-100q1-12 1-19t-1-19l201-100q51 48 122 48z" horiz-adv-x="857.1" />
-<glyph glyph-name="share-squared" unicode="" d="m714 183q0 49-35 84t-84 36q-46 0-80-33l-135 67q1 9 1 13t-1 13l135 67q34-33 80-33 50 0 84 36t35 84-35 84-84 35-84-35-35-84q0-4 1-13l-134-67q-35 32-81 32-49 0-84-35t-35-84 35-84 84-35q46 0 81 32l134-67q-1-9-1-13 0-49 35-84t84-35 84 35 35 84z m143 435v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="retweet" unicode="" d="m714 11q0-8-5-13t-13-5h-535q-5 0-8 1t-5 4-3 4-2 7 0 6v335h-107q-15 0-25 11t-11 25q0 13 8 23l179 214q11 12 27 12t28-12l178-214q9-10 9-23 0-15-11-25t-25-11h-107v-214h321q9 0 14-6l89-108q4-6 4-11z m357 232q0-14-8-23l-179-214q-11-13-27-13t-27 13l-179 214q-8 9-8 23 0 14 10 25t26 11h107v214h-322q-9 0-14 7l-89 107q-4 5-4 11 0 7 5 12t13 6h536q4 0 7-1t5-4 3-5 2-6 1-7v-334h107q14 0 25-11t10-25z" horiz-adv-x="1071.4" />
-<glyph glyph-name="attention-alt" unicode="" d="m286 154v-125q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v125q0 14 11 25t25 10h143q15 0 25-10t11-25z m16 589l-15-429q-1-14-12-25t-25-10h-143q-14 0-25 10t-12 25l-15 429q-1 14 9 25t25 11h179q14 0 25-11t9-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="attention" unicode="" d="m571 83v106q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-106q0-8 5-13t12-6h108q7 0 12 6t5 13z m-1 208l10 257q0 6-5 10-7 6-14 6h-122q-7 0-14-6-5-4-5-12l9-255q0-5 6-9t13-3h103q8 0 13 3t6 9z m-7 522l428-786q20-35-1-70-10-17-26-26t-35-10h-858q-18 0-35 10t-26 26q-21 35-1 70l429 786q9 17 26 27t36 10 36-10 27-27z" horiz-adv-x="1000" />
-<glyph glyph-name="attention-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m71-696v106q0 8-5 13t-12 5h-107q-8 0-13-5t-6-13v-106q0-8 6-13t13-6h107q7 0 12 6t5 13z m-1 192l10 346q0 7-6 10-5 5-13 5h-123q-8 0-13-5-6-3-6-10l10-346q0-6 5-10t14-4h103q8 0 13 4t6 10z" horiz-adv-x="857.1" />
-<glyph glyph-name="location" unicode="" d="m429 493q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m142 0q0-61-18-100l-203-432q-9-18-27-29t-37-11-38 11-26 29l-204 432q-18 39-18 100 0 118 84 202t202 84 202-84 83-202z" horiz-adv-x="571.4" />
-<glyph glyph-name="trash" unicode="" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
-<glyph glyph-name="doc" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z" horiz-adv-x="857.1" />
-<glyph glyph-name="docs" unicode="" d="m946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
-<glyph glyph-name="doc-text" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
-<glyph glyph-name="doc-inv" unicode="" d="m571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-38t38-15h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
-<glyph glyph-name="doc-text-inv" unicode="" d="m819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-38t38-15z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v35q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-35q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-pdf" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-287 331q18-14 47-31 33 4 65 4 82 0 99-27 9-13 1-29 0-1-1-1l-1-2v0q-3-21-39-21-27 0-65 11t-72 29q-123-13-219-46-85-146-135-146-8 0-15 4l-14 6q0 1-3 3-6 6-4 20 5 23 32 51t73 54q8 5 13-3 1-1 1-2 29 47 60 110 38 76 58 146-13 46-17 89t4 71q6 22 23 22h12q13 0 20-8 10-12 5-38-1-3-2-4 0-2 0-5v-17q-1-68-8-107 31-91 82-133z m-322-229q30 13 77 88-29-22-49-47t-28-41z m223 513q-9-23-2-73 1 4 4 24 0 2 4 24 1 3 3 5-1 0-1 1t0 1-1 1q0 12-7 20 0-1 0-1v-2z m-70-368q76 30 159 45-1 0-7 5t-9 8q-43 37-71 98-15-48-47-110-16-31-25-46z m361 8q-14 14-78 14 42-16 69-16 8 0 10 1 0 0-1 1z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-word" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-656 500v-59h39l92-369h88l72 271q4 11 5 25 1 9 1 14h3l1-14q1-1 2-11t3-14l72-271h89l91 369h39v59h-167v-59h50l-55-245q-3-11-4-25l-1-12h-3l-1 12q-1 2-2 11t-3 14l-81 304h-63l-81-304q-1-5-2-13t-2-12l-2-12h-2l-2 12q-1 14-4 25l-55 245h50v59h-167z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-excel" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-547 131v-59h157v59h-42l58 90q3 4 5 9t5 8 2 2h1q0-2 2-6 2-2 3-4t3-4 4-5l60-90h-43v-59h163v59h-38l-107 152 108 158h38v59h-156v-59h41l-57-89q-2-4-6-9t-5-8l-1-1h-1q-1 2-3 5-3 6-9 13l-59 89h42v59h-162v-59h38l106-152-109-158h-38z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-powerpoint" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-554 131v-59h183v59h-52v93h76q43 0 66 9 37 12 59 48t23 82q0 45-21 78t-56 49q-27 10-72 10h-206v-59h52v-310h-52z m197 156h-66v150h67q29 0 46-10 31-19 31-64 0-50-34-67-18-9-44-9z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-image" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-72 250v-178h-571v107l107 107 71-71 215 214z m-464 108q-45 0-76 31t-31 76 31 76 76 31 76-31 31-76-31-76-76-31z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog" unicode="" d="m571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog-alt" unicode="" d="m500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 11 12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
-<glyph glyph-name="wrench" unicode="" d="m214 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m360 234l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50 0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59-27-75-92-122t-144-46q-104 0-177 73t-73 177 73 176 177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
-<glyph glyph-name="calendar" unicode="" d="m71-79h161v161h-161v-161z m197 0h178v161h-178v-161z m-197 197h161v178h-161v-178z m197 0h178v178h-178v-178z m-197 214h161v161h-161v-161z m411-411h179v161h-179v-161z m-214 411h178v161h-178v-161z m428-411h161v161h-161v-161z m-214 197h179v178h-179v-178z m-196 482v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161q0-7 6-13t12-5h36q7 0 12 5t6 13z m410-482h161v178h-161v-178z m-214 214h179v161h-179v-161z m214 0h161v161h-161v-161z m18 268v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161q0-7 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="calendar-empty" unicode="" d="m71-79h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="clock" unicode="" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="block" unicode="" d="m732 352q0 90-48 164l-421-420q76-50 166-50 62 0 118 25t96 65 65 97 24 119z m-557-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137-137-92-166-34-167 34-137 92-91 137-34 168 34 167 91 137 137 91 167 34 166-34 137-91 91-137 34-167z" horiz-adv-x="857.1" />
-<glyph glyph-name="zoom-in" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="zoom-out" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13v36q0 7 6 12t12 5h322q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="down-circled2" unicode="" d="m625 332q0-7-6-13l-178-178q-6-5-12-5t-13 5l-179 178q-8 9-4 20 5 11 17 11h107v196q0 8 5 13t13 5h107q8 0 13-5t5-13v-196h107q8 0 13-5t5-13z m-196 322q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-circled2" unicode="" d="m624 361q-5-11-17-11h-107v-196q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v196h-107q-8 0-13 5t-5 13q0 7 6 13l178 178q6 5 13 5t12-5l179-178q8-9 4-20z m-195 293q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="left-circled2" unicode="" d="m643 404v-108q0-7-5-12t-13-5h-196v-108q0-7-5-12t-13-5q-7 0-14 5l-178 178q-5 5-5 13t5 13l179 178q5 5 13 5 7 0 12-5t6-12v-108h196q7 0 13-5t5-12z m89-54q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-circled2" unicode="" d="m643 350q0-8-5-13l-179-178q-5-5-13-5-7 0-12 5t-5 12v108h-197q-7 0-12 5t-6 12v108q0 7 6 12t12 5h197v108q0 7 5 12t12 5q7 0 14-5l178-178q5-5 5-13z m89 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="down-dir" unicode="" d="m571 457q0-14-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 11-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="up-dir" unicode="" d="m571 171q0-14-10-25t-25-10h-500q-15 0-25 10t-11 25 11 26l250 250q10 10 25 10t25-10l250-250q10-11 10-26z" horiz-adv-x="571.4" />
-<glyph glyph-name="left-dir" unicode="" d="m357 600v-500q0-14-10-25t-26-11-25 11l-250 250q-10 11-10 25t10 25l250 250q11 11 25 11t26-11 10-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="right-dir" unicode="" d="m321 350q0-14-10-25l-250-250q-11-11-25-11t-25 11-11 25v500q0 15 11 25t25 11 25-11l250-250q10-10 10-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="down-open" unicode="" d="m939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l92 92q11 11 26 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" />
-<glyph glyph-name="left-open" unicode="" d="m653 682l-296-296 296-297q11-10 11-25t-11-25l-92-93q-11-10-25-10t-25 10l-414 415q-11 10-11 25t11 25l414 414q10 10 25 10t25-10l92-93q11-10 11-25t-11-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="right-open" unicode="" d="m618 361l-414-415q-11-10-25-10t-26 10l-92 93q-11 11-11 25t11 25l296 297-296 296q-11 11-11 25t11 25l92 93q11 10 26 10t25-10l414-414q10-11 10-25t-10-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="up-open" unicode="" d="m939 107l-92-92q-11-10-26-10t-25 10l-296 297-296-297q-11-10-25-10t-26 10l-92 92q-11 11-11 26t11 25l414 414q11 10 25 10t25-10l414-414q11-11 11-25t-11-26z" horiz-adv-x="1000" />
-<glyph glyph-name="angle-left" unicode="" d="m350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
-<glyph glyph-name="angle-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z" horiz-adv-x="357.1" />
-<glyph glyph-name="angle-up" unicode="" d="m600 189q0-7-6-13l-28-27q-5-6-12-6t-13 6l-220 219-219-219q-5-6-13-6t-13 6l-27 27q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-5 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-down" unicode="" d="m600 439q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 6 13 6t13-6l219-219 220 219q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-circled-left" unicode="" d="m507 72l57 56q11 11 11 26t-11 25l-171 171 171 171q11 11 11 25t-11 25l-57 57q-10 11-25 11t-25-11l-253-253q-11-11-11-25t11-25l253-254q11-10 25-10t25 10z m350 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-right" unicode="" d="m400 72l253 253q11 11 11 25t-11 25l-253 253q-10 11-25 11t-25-11l-57-56q-11-11-11-26t11-25l171-171-171-171q-11-11-11-25t11-26l57-57q11-10 25-10t25 10z m457 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-up" unicode="" d="m650 214l57 57q11 11 11 25t-11 26l-253 253q-11 10-25 10t-26-10l-253-254q-10-10-10-25t10-25l57-57q11-10 25-10t25 10l172 172 171-172q11-10 25-10t25 10z m207 136q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-down" unicode="" d="m454 125l253 253q11 11 11 26t-11 25l-57 57q-10 10-25 10t-25-10l-171-172-172 172q-10 10-25 10t-25-10l-57-57q-10-11-10-25t10-26l253-253q11-10 26-10t25 10z m403 225q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-double-left" unicode="" d="m350 82q0-7-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13z m214 0q0-7-5-13l-28-28q-6-5-13-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q6 6 13 6t13-6l28-28q5-5 5-13t-5-12l-220-220 220-219q5-6 5-13z" horiz-adv-x="571.4" />
-<glyph glyph-name="angle-double-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
-<glyph glyph-name="angle-double-up" unicode="" d="m600 118q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 219-219-219q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 5 12 5t13-5l260-260q6-6 6-13z m0 214q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 220-219-220q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-6 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-double-down" unicode="" d="m600 368q0-7-6-13l-260-260q-5-6-13-6t-12 6l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z m0 214q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="down-big" unicode="" d="m899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l164 164q21 21 51 21 29 0 50-21l42-42q21-21 21-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="left-big" unicode="" d="m857 350v-71q0-30-18-51t-47-21h-393l164-164q21-20 21-50t-21-50l-42-43q-21-20-51-20-29 0-50 20l-364 364q-20 21-20 50 0 29 20 51l364 363q21 21 50 21 29 0 51-21l42-42q21-21 21-50t-21-51l-164-164h393q29 0 47-20t18-51z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-big" unicode="" d="m821 314q0-30-20-50l-363-364q-22-20-51-20-29 0-50 20l-42 42q-22 21-22 51t22 51l163 163h-393q-29 0-47 21t-18 51v71q0 30 18 51t47 20h393l-163 164q-22 21-22 51t22 50l42 42q21 21 50 21 29 0 51-21l363-363q20-20 20-51z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-big" unicode="" d="m899 308q0-28-21-50l-42-42q-21-21-50-21-30 0-51 21l-164 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50 0 30 21 51l363 363q20 21 50 21 30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="left-circled" unicode="" d="m714 314v72q0 14-10 25t-25 10h-281l106 106q11 11 11 25t-11 25l-51 51q-10 10-25 10t-25-10l-202-202-51-51q-10-10-10-25t10-25l51-51 202-202q10-10 25-10t25 10l51 51q10 10 10 25t-10 25l-106 106h281q14 0 25 10t10 25z m143 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-circled" unicode="" d="m717 350q0 15-10 25l-51 51-202 202q-10 10-25 10t-25-10l-51-51q-10-10-10-25t10-25l106-106h-280q-15 0-26-10t-10-25v-72q0-14 10-25t26-10h280l-106-106q-10-10-10-25t10-25l51-51q10-10 25-10t25 10l202 202 51 51q10 10 10 25z m140 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-circled" unicode="" d="m717 351q0 15-11 25l-202 202-50 50q-10 11-25 11t-26-11l-50-50-202-202q-10-10-10-25t10-26l50-50q11-10 26-10t25 10l105 105v-280q0-14 11-25t25-11h71q15 0 25 11t11 25v280l105-105q11-11 26-11t25 11l50 50q11 11 11 26z m140-1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="down-circled" unicode="" d="m717 349q0 16-11 26l-50 50q-10 10-25 10t-26-10l-105-105v280q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-280l-105 105q-11 11-25 11t-26-11l-50-50q-10-10-10-26t10-25l202-202 50-50q11-10 26-10t25 10l50 50 202 202q11 10 11 25z m140 1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="cw" unicode="" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
-<glyph glyph-name="ccw" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
-<glyph glyph-name="level-up" unicode="" d="m568 514q-10-21-32-21h-107v-482q0-8-5-13t-13-5h-393q-12 0-16 10-5 11 2 19l89 108q5 6 14 6h179v357h-107q-23 0-33 21-9 20 5 37l179 215q10 12 27 12t28-12l178-215q15-17 5-37z" horiz-adv-x="571.4" />
-<glyph glyph-name="level-down" unicode="" d="m18 707h393q7 0 12-5t6-13v-482h107q22 0 32-20t-5-39l-178-214q-11-13-28-13t-27 13l-179 214q-14 17-5 39 10 20 33 20h107v357h-179q-8 0-14 6l-89 108q-7 7-2 19 5 10 16 10z" horiz-adv-x="571.4" />
-<glyph glyph-name="shuffle" unicode="" d="m372 582q-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
-<glyph glyph-name="exchange" unicode="" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13 0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
-<glyph glyph-name="history" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
-<glyph glyph-name="expand" unicode="" d="m639 473q10-19-3-36l-178-250q-11-16-29-16t-29 16l-179 250q-13 17-3 36 10 20 32 20h357q22 0 32-20z m75-391v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="collapse" unicode="" d="m639 227q-10-20-32-20h-357q-22 0-32 20-10 19 3 37l179 250q10 15 29 15t29-15l178-250q13-18 3-37z m75-145v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="expand-right" unicode="" d="m607 350q0-18-15-29l-250-179q-17-12-37-2-19 9-19 31v358q0 22 19 31 20 10 37-2l250-179q15-11 15-29z m107-268v536q0 8-5 13t-13 5h-535q-8 0-13-5t-5-13v-536q0-8 5-13t13-5h535q8 0 13 5t5 13z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="collapse-left" unicode="" d="m571 529v-358q0-14-10-25t-25-10q-11 0-21 6l-250 179q-15 11-15 29t15 29l250 179q10 6 21 6 14 0 25-10t10-25z m143-447v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="play" unicode="" d="m772 333l-741-412q-13-7-22-2t-9 20v822q0 14 9 20t22-2l741-412q13-7 13-17t-13-17z" horiz-adv-x="785.7" />
-<glyph glyph-name="play-circled2" unicode="" d="m661 350q0-21-18-31l-304-178q-8-5-18-5-8 0-17 4-18 11-18 31v358q0 20 18 31 18 10 35-1l304-178q18-10 18-31z m71 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="play-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m214-460q18 10 18 31t-18 31l-304 178q-17 11-35 1-18-11-18-31v-358q0-20 18-31 9-4 17-4 10 0 18 5z" horiz-adv-x="857.1" />
-<glyph glyph-name="stop" unicode="" d="m857 743v-786q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v786q0 14 11 25t25 11h785q15 0 26-11t10-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="cloud" unicode="" d="m1071 207q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 74 40 135t104 91q-1 15-1 24 0 118 84 202t202 84q88 0 159-50t105-128q39 35 93 35 59 0 101-42t42-101q0-42-23-77 72-17 119-75t46-134z" horiz-adv-x="1071.4" />
-<glyph glyph-name="table" unicode="" d="m286 82v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-13-5t-5-12v-108q0-7 5-12t13-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
-<glyph glyph-name="off" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34-167 34-136 92-92 137-34 166q0 102 45 191t126 151q24 18 54 14t46-28q18-23 14-53t-28-47q-54-41-84-101t-30-127q0-58 22-111t62-91 91-61 111-23 110 23 92 61 61 91 22 111q0 68-30 127t-84 101q-24 18-28 47t14 53q17 24 47 28t53-14q81-61 126-151t45-191z m-357 429v-358q0-29-21-50t-50-21-51 21-21 50v358q0 29 21 50t51 21 50-21 21-50z" horiz-adv-x="857.1" />
-<glyph glyph-name="check" unicode="" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
-<glyph glyph-name="asterisk" unicode="" d="m827 264q26-14 33-43t-7-55l-35-61q-15-26-44-33t-54 7l-149 85v-171q0-29-21-50t-50-22h-71q-29 0-51 22t-21 50v171l-148-85q-26-15-55-7t-43 33l-36 61q-14 26-7 55t34 43l148 86-148 86q-26 14-34 43t7 55l36 61q15 26 43 33t55-7l148-85v171q0 29 21 50t51 22h71q29 0 50-22t21-50v-171l149 85q26 15 54 7t44-33l35-62q15-25 7-54t-33-43l-148-86z" horiz-adv-x="928.6" />
-<glyph glyph-name="chart-bar" unicode="" d="m357 350v-286h-143v286h143z m214 286v-572h-142v572h142z m572-643v-72h-1143v858h71v-786h1072z m-357 500v-429h-143v429h143z m214 214v-643h-143v643h143z" horiz-adv-x="1142.9" />
-<glyph glyph-name="bug" unicode="" d="m911 314q0-14-11-25t-25-10h-125q0-96-37-162l116-117q10-11 10-25t-10-25q-10-11-25-11t-26 11l-110 110q-3-3-8-7t-24-16-36-21-46-16-54-7v500h-71v-500q-29 0-57 7t-49 19-36 22-25 18l-8 8-102-116q-11-12-27-12-13 0-24 9-11 10-11 25t8 26l113 127q-32 63-32 153h-125q-15 0-25 10t-11 25 11 25 25 11h125v164l-97 97q-11 10-11 25t11 25 25 10 25-10l97-97h471l96 97q11 10 25 10t26-10 10-25-10-25l-97-97v-164h125q15 0 25-11t11-25z m-268 322h-357q0 74 52 126t126 52 127-52 52-126z" horiz-adv-x="928.6" />
-<glyph glyph-name="certificate" unicode="" d="m768 350l77-75q17-16 11-39-7-23-29-29l-105-27 30-103q6-23-11-39-16-18-39-11l-104 30-27-105q-5-23-28-30-7-1-11-1-17 0-28 13l-75 77-76-77q-15-17-39-12-23 7-28 30l-27 105-104-30q-23-7-39 11-17 16-10 39l29 103-105 27q-22 6-29 29-6 23 11 39l77 75-77 75q-17 16-11 39 7 23 29 29l105 27-29 103q-7 23 10 39 16 18 39 11l104-29 27 104q5 23 28 29 23 7 39-11l76-77 75 77q16 17 39 11 23-6 28-29l27-104 104 29q23 7 39-11 17-16 11-39l-30-103 105-27q22-6 29-29 6-23-11-39z" horiz-adv-x="857.1" />
-<glyph glyph-name="tasks" unicode="" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
-<glyph glyph-name="sort-up" unicode="" d="m571 457q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="sort-down" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="sort" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="gauge" unicode="" d="m214 207q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m107 250q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m239-268l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51z m369 18q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-358 357q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m250-107q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m179-250q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269 0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194z" horiz-adv-x="1000" />
-<glyph glyph-name="spinner" unicode="" d="m277 100q0-33-24-57t-57-23q-33 0-56 23t-24 57 24 57 56 23q33 0 57-23t24-57z m241-107q0-30-21-51t-51-21-50 21-21 51 21 50 50 21 51-21 21-50z m-339 357q0-37-27-63t-63-26-63 26-26 63 26 63 63 26 63-26 27-63z m580-250q0-26-18-44t-45-18-44 18-18 44 18 44 44 19 45-19 18-44z m-464 500q0-41-29-69t-70-29-69 29-29 69 29 69 69 29 70-29 29-69z m259 107q0-45-32-76t-76-31-75 31-32 76 32 76 75 31 76-31 32-76z m303-357q0-22-15-38t-38-16-38 16-16 38 16 38 38 16 38-16 15-38z m-116 250q0-18-13-32t-32-13-31 13-13 32 13 31 31 14 32-14 13-31z" horiz-adv-x="875" />
-<glyph glyph-name="database" unicode="" d="m429 421q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0-428q132 0 247 24t181 71v-95q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v95q66-47 181-71t248-24z m0 214q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0 643q116 0 214-19t157-52 57-72v-71q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v71q0 39 58 72t156 52 215 19z" horiz-adv-x="857.1" />
-<glyph glyph-name="lifebuoy" unicode="" d="m500 850q102 0 194-40t160-106 106-160 40-194-40-194-106-160-160-106-194-40-194 40-160 106-106 160-40 194 40 194 106 160 160 106 194 40z m0-71q-106 0-201-51l108-108q46 16 93 16t93-16l108 108q-95 51-201 51z m-378-630l108 108q-16 46-16 93t16 93l-108 108q-51-95-51-201t51-201z m378-228q106 0 201 51l-108 108q-46-16-93-16t-93 16l-108-108q95-51 201-51z m0 215q89 0 152 63t62 151-62 152-152 62-151-62-63-152 63-151 151-63z m270 121l108-108q51 95 51 201t-51 201l-108-108q16-46 16-93t-16-93z" horiz-adv-x="1000" />
-<glyph glyph-name="cubes" unicode="" d="m357-61l214 107v176l-214-92v-191z m-36 254l226 96-226 97-225-97z m608-254l214 107v176l-214-92v-191z m-36 254l225 96-225 97-226-97z m-250 163l214 92v149l-214-92v-149z m-36 212l246 105-246 106-246-106z m607-289v-233q0-20-10-37t-29-26l-250-125q-14-8-32-8t-32 8l-250 125q-3 1-4 2-1-1-4-2l-250-125q-14-8-32-8t-31 8l-250 125q-19 9-29 26t-11 37v233q0 21 12 39t32 26l242 104v223q0 22 12 39t31 27l250 107q13 6 28 6t28-6l250-107q20-9 32-27t12-39v-223l242-104q20-9 32-26t11-40z" horiz-adv-x="1285.7" />
-<glyph glyph-name="cube" unicode="" d="m500-59l357 195v355l-357-130v-420z m-36 483l390 141-390 142-389-142z m465 140v-428q0-20-10-37t-28-26l-393-214q-15-9-34-9t-34 9l-393 214q-17 10-27 26t-10 37v428q0 23 13 41t34 26l393 143q12 5 24 5t25-5l393-143q21-8 34-26t13-41z" horiz-adv-x="1000" />
-<glyph glyph-name="bullseye" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m72 0q0 89-63 152t-151 62-152-62-63-152 63-151 152-63 151 63 63 151z m71 0q0-118-83-202t-202-84-202 84-84 202 84 202 202 84 202-84 83-202z m72 0q0 73-29 139t-76 114-114 76-138 28-139-28-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139z m71 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="windows" unicode="" d="m381 289v-364l-381 53v311h381z m0 414v-367h-381v315z m548-414v-439l-507 70v369h507z m0 490v-443h-507v373z" horiz-adv-x="928.6" />
-<glyph glyph-name="cancel-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m86-420l154 154-86 86-154-152-152 152-88-86 154-154-154-152 88-86 152 152 154-152 86 86z" horiz-adv-x="840" />
-<glyph glyph-name="plus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-210 0 0-210q0-30-50-30t-50 30l0 210-210 0q-30 0-30 50t30 50l210 0 0 210q0 30 50 30t50-30l0-210 210 0z" horiz-adv-x="580" />
-<glyph glyph-name="plus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m52-470l200 0 0 102-200 0 0 202-102 0 0-202-202 0 0-102 202 0 0-202 102 0 0 202z" horiz-adv-x="840" />
-<glyph glyph-name="minus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-520 0q-30 0-30 50t30 50l520 0z" horiz-adv-x="580" />
-<glyph glyph-name="minus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m252-368l-504 0 0-102 504 0 0 102z" horiz-adv-x="840" />
-<glyph glyph-name="help-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78 0 78-54 116-52 38-134 38-64 0-104-26-68-42-72-146l0-4 110 0 0 4q0 26 16 54 16 24 54 24 40 0 52-20 16-20 16-44 0-18-16-40-8-12-20-20l-6-4q-6-4-16-11t-20-15-21-17-17-17q-14-20-18-78l0-8 108 0 0 4q0 12 4 28 6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
-<glyph glyph-name="heart-empty-1" unicode="" d="m790 642q70-64 70-156t-70-156l-360-330-360 330q-70 64-70 156t70 156q64 58 152 58t150-58l58-52 56 52q64 58 152 58t152-58z m-54-260q42 40 42 104 0 66-38 100-38 38-102 38-52 0-104-48l-104-92-106 92q-48 48-102 48-64 0-104-38-38-36-38-100 0-66 44-104l306-286z" horiz-adv-x="860" />
-<glyph glyph-name="mail-1" unicode="" d="m30 586q-32 18-28 40 2 14 26 14l846 0q38 0 20-32-8-14-24-22-14-6-192-102t-182-98q-16-10-46-10-28 0-46 10-4 2-182 98t-192 102z m850-100q20 10 20-10l0-368q0-16-17-32t-33-16l-800 0q-16 0-33 16t-17 32l0 368q0 20 20 10l384-200q18-10 46-10t46 10z" horiz-adv-x="900" />
-<glyph glyph-name="star-1" unicode="" d="m440 790l120-336 320 0-262-196 94-348-272 208-272-208 94 348-262 196 320 0z" horiz-adv-x="880" />
-<glyph glyph-name="star-empty-1" unicode="" d="m880 454l-262-196 94-348-272 208-272-208 94 348-262 196 320 0 120 336 120-336 320 0z m-440-238l150-124-62 178 144 114-176-4-56 202-54-202-176 4 142-114-62-178z" horiz-adv-x="880" />
-<glyph glyph-name="link-1" unicode="" d="m294 116q14 14 34 14t36-14q32-34 0-70l-42-40q-56-56-132-56-78 0-134 56t-56 132q0 78 56 134l148 148q70 68 144 77t128-43q16-16 16-36t-16-36q-36-32-70 0-50 48-132-34l-148-146q-26-26-26-64t26-62q26-26 63-26t63 26z m450 574q56-56 56-132 0-78-56-134l-158-158q-74-72-150-72-62 0-112 50-14 14-14 34t14 36q14 14 35 14t35-14q50-48 122 24l158 156q28 28 28 64 0 38-28 62-24 26-56 31t-60-21l-50-50q-16-14-36-14t-34 14q-34 34 0 70l50 50q54 54 127 51t129-61z" horiz-adv-x="800" />
-<glyph glyph-name="attach-1" unicode="" d="m244-140q-102 0-170 72-72 70-74 166t84 190l496 496q80 80 174 54 44-12 79-47t47-79q26-96-54-176l-474-474q-40-40-88-46-48-4-80 28-30 24-27 74t47 92l332 334q24 26 50 0t0-50l-332-332q-44-44-20-70 12-8 24-6 24 4 46 26l474 474q50 50 34 108-16 60-76 76-54 14-108-36l-494-494q-66-76-64-143t52-117q50-48 117-50t141 62l496 494q24 24 50 0 26-22 0-48l-496-496q-82-82-186-82z" horiz-adv-x="939" />
-<glyph glyph-name="eye-1" unicode="" d="m500 630q92 0 177-25t141-62 99-77 63-71 20-45-20-44-63-71-99-78-141-62-177-25-177 25-141 62-99 78-63 71-20 44 20 45 63 71 99 77 141 62 177 25z m0-494q92 0 157 63t65 151q0 90-65 153t-157 63-157-63-65-153q0-88 65-151t157-63z m0 214q8-8 37-2t50 11 25-9q0-44-33-75t-79-31-78 31-32 75q0 46 32 77t78 31q14 0 10-23t-12-47 2-38z" horiz-adv-x="1000" />
-<glyph glyph-name="attention-1" unicode="" d="m957-24q10-16 0-34-10-16-30-16l-892 0q-18 0-28 16-13 18-2 34l446 782q8 18 30 18t30-18z m-420 50l0 100-110 0 0-100 110 0z m0 174l0 300-110 0 0-300 110 0z" horiz-adv-x="962" />
-<glyph glyph-name="doc-text-1" unicode="" d="m212 308l0 90 280 0 0-90-280 0z m388 492q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m0-800l0 700-500 0 0-700 500 0z m-110 592l0-88-280 0 0 88 280 0z m0-392l0-88-280 0 0 88 280 0z" horiz-adv-x="700" />
-<glyph glyph-name="doc-text-inv-1" unicode="" d="m600 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m-460-208l0-88 420 0 0 88-420 0z m420-480l0 88-420 0 0-88 420 0z m0 196l0 90-418 0 0-90 418 0z" horiz-adv-x="700" />
-<glyph glyph-name="share-1" unicode="" d="m650 200q62 0 106-43t44-107q0-62-44-106t-106-44-106 44-44 106q0 6 1 14t1 12l-260 156q-42-32-92-32-62 0-106 44t-44 106 44 106 106 44q54 0 92-30l260 156q0 4-1 12t-1 12q0 62 44 106t106 44 106-43 44-107q0-62-44-106t-106-44q-52 0-90 32l-262-156q2-8 2-26 0-16-2-24l262-156q36 30 90 30z" horiz-adv-x="800" />
-<glyph glyph-name="shareable" unicode="" d="m340 350q0 68 47 114t113 46 113-46 47-114q0-66-47-113t-113-47-113 47-47 113z m-114 60q-14-60-66-60l-160 0 0 120 118 0q40 124 145 202t237 78q164 0 284-116 16-18 16-43t-16-43q-18-16-43-16t-43 16q-78 82-198 82-100 0-176-62t-98-158z m614-60l160 0 0-120-118 0q-40-124-144-202t-238-78q-164 0-282 118-18 18-18 43t18 41q16 18 41 18t43-18q82-82 198-82 100 0 176 63t98 157q12 60 66 60z" horiz-adv-x="1000" />
-<glyph glyph-name="ccw-1" unicode="" d="m532 736q170 0 289-120t119-290-119-290-289-120q-142 0-252 88l70 74q84-60 182-60 126 0 216 90t90 218-90 218-216 90q-124 0-214-87t-92-211l142 0-184-204-184 204 124 0q2 166 122 283t286 117z" horiz-adv-x="940" />
-<glyph glyph-name="cw-1" unicode="" d="m408 760q168 0 287-116t123-282l122 0-184-206-184 206 144 0q-4 124-94 210t-214 86q-126 0-216-90t-90-218q0-126 90-216t216-90q104 0 182 60l70-76q-110-88-252-88-168 0-288 120t-120 290 120 290 288 120z" horiz-adv-x="940" />
-<glyph glyph-name="arrows-ccw" unicode="" d="m186 140l116 116 0-292-276 16 88 86q-116 122-114 290t120 288q100 100 240 116l4-102q-100-16-172-88-88-88-90-213t84-217z m332 598l276-16-88-86q116-122 114-290t-120-288q-96-98-240-118l-2 104q98 16 170 88 88 88 90 213t-84 217l-114-116z" horiz-adv-x="820" />
-<glyph glyph-name="play-1" unicode="" d="m486 376q14-10 14-26 0-14-14-24l-428-266q-24-16-41-6t-17 40l0 514q0 30 17 40t41-6z" horiz-adv-x="500" />
-<glyph glyph-name="pause" unicode="" d="m440 700q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z m-350 0q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z" horiz-adv-x="530" />
-<glyph glyph-name="record" unicode="" d="m350 700q146 0 248-102t102-248q0-144-102-247t-248-103-248 103-102 247q0 146 102 248t248 102z" horiz-adv-x="700" />
-<glyph glyph-name="stop-1" unicode="" d="m526 650q74 0 74-64l0-470q0-66-74-66l-450 0q-76 0-76 66l0 470q0 36 18 50t58 14l450 0z" horiz-adv-x="600" />
-<glyph glyph-name="switch" unicode="" d="m700 592l0-140-500 0 0-90-200 160 200 170 0-100 500 0z m300-420l-200-160 0 90-500 0 0 140 500 0 0 100z" horiz-adv-x="1000" />
-<glyph glyph-name="loop" unicode="" d="m800 540q42 0 71-29t29-71l0-290q0-40-29-70t-71-30l-700 0q-40 0-70 30t-30 70l0 290q0 42 30 71t70 29l250 0 0 110 200-180-200-180 0 110-210 0 0-210 620 0 0 210-150 0 0 140 190 0z" horiz-adv-x="900" />
-<glyph glyph-name="cloud-1" unicode="" d="m760 494q100 0 170-68t70-166-70-166-170-68l-578 0q-74 0-128 52t-54 124q0 74 53 126t129 52q2 0 10-1t10-1q-2 12-2 38 0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
-<glyph glyph-name="certificate-outline" unicode="" d="m1019 395q22-15 22-44t-22-43l-96-64 51-104q14-26-3-49t-41-26l-115-7-7-117q-3-25-25-40t-50-2l-104 51-65-96q-16-24-43-24-27 0-43 24l-64 96-104-51q-26-14-49 2t-26 40l-7 117-117 7q-25 3-40 25t-2 50l51 104-96 64q-24 16-24 43t24 44l96 64-51 104q-14 27 2 50t40 25l117 7 7 115q3 25 26 41t49 3l104-51 64 96q13 21 43 21t43-21l65-96 104 51q26 14 50-3t25-41l7-115 115-7q25-3 41-25t3-50l-51-104z m-210-156q-9 17-4 36t21 30l70 46-70 47q-36 26-17 66l37 75-83 5q-20 1-34 15t-15 34l-5 83-75-37q-40-19-66 17l-47 70-46-70q-26-36-66-17l-75 37-5-83q-1-20-15-34t-34-15l-84-5 38-75q9-18 3-36t-22-30l-69-47 69-46q16-11 22-30t-3-36l-38-75 84-5q20-1 33-15t15-34l6-84 75 38q10 5 22 5 29 0 44-23l46-70 47 69q11 16 30 22t36-3l75-38 5 84q1 20 15 34t34 15l82 5z" horiz-adv-x="1041" />
-<glyph glyph-name="certificate-1" unicode="" d="m863 449l115-78q12-8 12-21t-12-21l-115-78 61-123q7-14-1-25t-20-13l-139-10-9-138q-1-12-12-20t-25-2l-124 62-78-116q-7-11-21-11t-21 11l-78 116-123-62q-14-6-25 2t-13 20l-10 139-137 9q-13 1-22 13t-1 25l63 123-117 78q-11 7-11 21t11 21l117 78-63 124q-7 12 1 24t22 13l137 9 10 139q1 12 13 20t25 1l123-61 78 116q7 11 21 11t21-11l78-116 124 61q13 7 25-1t12-20l9-139 139-9q12-1 20-12t1-25z" horiz-adv-x="990" />
-<glyph glyph-name="windows-1" unicode="" d="m0-43l105 371q35 20 86 31t83 13l34 1q50 0 104-10 101-20 144-61l-104-370q-36 28-79 45t-69 21l-26 4q-34 3-65 3-16 0-42-1t-84-14-87-33z m126 477l105 371q35 20 86 32t84 12l33 1q51 0 104-10 101-20 144-61l-104-371q-36 28-79 46t-69 20l-26 4q-35 3-64 3-16 0-42-1t-84-13-88-33z m431-513l104 371q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t84 13 86 32l-104-371q-35-20-86-31t-84-12l-33-2q-51 0-104 10-101 20-145 61z m120 475l104 370q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t83 13 87 32l-104-370q-35-20-86-31t-85-13l-33-2q-52 0-103 11-101 19-145 61z" horiz-adv-x="1233" />
-<glyph glyph-name="spin5" unicode="" d="m462 850c-6 0-11-5-11-11l0-183 0 0c0-6 5-11 11-11l69 0c1 0 1 0 1 0 7 0 12 5 12 11l0 183 0 0c0 6-5 11-12 11l-69 0c0 0 0 0-1 0z m250-47c-4 1-8-2-10-5l-91-158 0 0c-4-6-2-13 4-16l60-35c0 0 0 0 0 0 6-3 13-1 16 4l91 158c3 6 2 13-4 16l-61 35c-1 1-3 1-5 1z m-428-2c-2 0-4-1-6-2l-61-35c-5-3-7-10-4-16l91-157c0 0 0 0 0 0 3-6 10-8 16-5l61 35c5 4 7 11 4 16l-91 157c0 1 0 1 0 1-2 4-6 6-10 6z m620-163c-2 0-4 0-6-1l-157-91c0 0 0 0 0 0-6-3-8-10-5-16l35-61c4-5 11-7 16-4l157 91c1 0 1 0 1 0 6 3 7 10 4 16l-35 61c-2 3-6 5-10 5z m-810-4c-5 0-9-2-11-6l-35-61c-3-5-1-12 4-15l158-92 0 0c6-3 13-1 16 5l35 60c0 0 0 0 0 0 3 6 1 13-4 16l-158 91c-2 1-4 2-5 2z m712-235l0 0c-6 0-11-5-11-11l0-69c0-1 0-1 0-1 0-7 5-12 11-12l183 0 0 0c6 0 11 5 11 12l0 69c0 0 0 0 0 1 0 6-5 11-11 11l-183 0z m-794-5l0 0c-7 0-12-5-12-12l0-69c0 0 0 0 0-1 0-6 5-11 12-11l182 0 0 0c6 0 11 5 11 11l0 69c0 1 0 1 0 1 0 7-5 12-11 12l-182 0z m772-153c-4 0-8-2-10-6l-34-60c-1 0-1 0-1 0-3-6-1-13 4-16l158-91c6-3 13-2 16 4l35 61c3 5 1 12-4 15l-158 91 0 0c-2 1-4 2-6 2z m-566-5c-1 0-3 0-5-1l-157-91c0 0-1 0-1 0-5-3-7-11-4-16l35-61c3-5 10-7 16-4l157 91c0 0 0 0 0 0 6 3 8 10 5 16l-35 61c-3 3-7 5-11 5z m468-121c-2 0-4 0-6-1l-61-35c-5-4-7-11-4-16l91-157c0-1 0-1 0-1 3-6 11-7 16-4l61 35c5 3 7 10 4 16l-91 157c0 0 0 0 0 0-2 4-6 6-10 6z m-367-3c-4 1-8-2-10-5l-91-158c-3-6-1-13 4-16l61-35c5-3 12-1 15 4l92 158 0 0c3 6 1 13-5 16l-60 34c0 1 0 1 0 1-2 1-4 1-6 1z m149-57c-7 0-12-5-12-11l0-183 0 0c0-6 5-11 12-11l69 0c0 0 0 0 1 0 6 0 11 5 11 11l0 183 0 0c0 6-5 11-11 11l-69 0c-1 0-1 0-1 0z" horiz-adv-x="1000" />
-<glyph glyph-name="spin2" unicode="" d="m46 144l0 0c0 0-1 0-1 0-8 18-15 37-21 55-6 19-11 38-15 58-19 99-8 203 35 298 3 6 10 8 15 5 1 0 2 0 2-1l0 0 80-59c5-3 6-9 4-14-5-12-9-25-12-38-4-12-7-26-9-39-11-67-3-137 23-201 2-5 0-10-4-13l0 0-80-56c-5-4-12-3-16 3-1 0-1 1-1 2l0 0z m120 574l0 0c0 1 0 1 0 1 15 13 30 25 46 37 16 11 33 22 51 31 89 50 192 72 297 60 6-1 10-6 10-13 0-1-1-1-1-2l0 0-31-94c-2-5-8-8-13-7-13 0-27 0-40 0-14-1-27-2-40-4-68-11-133-40-186-84-4-3-10-3-14 0l0 0-79 58c-5 3-6 11-2 16 0 0 1 1 2 1l0 0z m588 65l0 0c0 0 1 0 1 0 17-10 34-21 50-32 16-12 31-25 46-38 74-69 127-160 148-262 2-6-2-12-9-13-1 0-1 0-2 0l0 0-100 1c-5 0-10 4-11 9-3 13-8 26-12 38-5 12-10 25-17 36-31 61-78 113-137 150-5 3-6 8-5 13l0 0 31 92c2 6 9 9 15 7 1 0 2-1 2-1l0 0z m244-535l0 0c0 0 0 0 0 0-4-20-9-39-15-57-7-19-14-37-22-55-44-92-114-170-205-221-6-3-13-1-16 4 0 1-1 2-1 2l0 0-30 94c-2 6 1 12 6 14 11 7 22 15 32 23 11 9 21 18 30 27 49 48 84 109 101 176 2 5 6 8 11 8l0 0 98-1c6 0 11-5 11-11 0-1 0-2 0-3l0 0z m-438-395l0 0c0 0 0 0 0 0-20-2-40-3-60-3-20 0-40 1-59 4-102 12-198 54-276 125-5 4-5 11 0 16 0 0 1 1 1 1l0 0 81 58c5 3 12 2 16-2 10-8 20-16 32-23 11-7 22-14 34-20 62-31 131-45 200-41 6 0 10-3 12-8l0 0 29-92c2-6-1-12-7-14-1-1-2-1-3-1l0 0z" horiz-adv-x="1000" />
-<glyph glyph-name="picture" unicode="" d="m357 529q0-45-31-76t-76-32-76 32-31 76 31 75 76 32 76-32 31-75z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
-<glyph glyph-name="menu" unicode="" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
-<glyph glyph-name="sliders" unicode="" d="m196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-26t-26-10h-142q-15 0-26 10t-10 26v142q0 15 10 26t26 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
-<glyph glyph-name="list-alt" unicode="" d="m214 189v-35q0-8-5-13t-13-5h-35q-7 0-13 5t-5 13v35q0 8 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-35q-7 0-13 5t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-35q-7 0-13 6t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m643-286v-35q0-8-5-13t-13-5h-535q-8 0-13 5t-5 13v35q0 8 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-535q-8 0-13 5t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-535q-8 0-13 6t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m72-393v464q0 8-6 13t-12 5h-822q-7 0-12-5t-6-13v-464q0-7 6-12t12-6h822q7 0 12 6t6 12z m71 607v-607q0-37-26-63t-63-26h-822q-36 0-63 26t-26 63v607q0 37 26 63t63 27h822q37 0 63-27t26-63z" horiz-adv-x="1000" />
-<glyph glyph-name="ajust" unicode="" d="m429 46v608q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41z m428 304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle" unicode="" d="m857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle-empty" unicode="" d="m429 654q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle-notch" unicode="" d="m1000 350q0-102-40-194t-106-160-160-106-194-40-194 40-160 106-106 160-40 194q0 124 56 231t155 177 218 87v-145q-124-25-205-124t-81-226q0-73 28-139t77-114 113-76 139-28 139 28 114 76 76 114 28 139q0 128-81 226t-205 124v145q120-17 218-87t155-177 56-231z" horiz-adv-x="1000" />
-<glyph glyph-name="fork" unicode="" d="m161 29q0 22-16 38t-38 15-38-15-15-38 15-38 38-16 38 16 16 38z m0 642q0 23-16 38t-38 16-38-16-15-38 15-38 38-15 38 15 16 38z m357-71q0 22-16 38t-38 16-38-16-15-38 15-38 38-16 38 16 16 38z m53 0q0-29-14-54t-39-39q-1-160-126-231-38-21-114-45-71-22-94-39t-23-56v-15q24-14 39-39t14-53q0-45-31-76t-76-32-76 32-31 76q0 29 15 53t39 39v458q-25 14-39 39t-15 53q0 45 31 76t76 32 76-32 31-76q0-29-14-53t-39-39v-278q30 15 86 32 30 10 49 17t39 17 33 22 22 29 16 38 5 51q-25 14-39 39t-15 54q0 45 31 76t76 31 76-31 31-76z" horiz-adv-x="571.4" />
-<glyph glyph-name="sitemap" unicode="" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="stethoscope" unicode="" d="m714 457q0 15-10 25t-25 11-26-11-10-25 10-25 26-11 25 11 10 25z m72 0q0-34-20-62t-52-39v-220q0-89-73-152t-177-63-176 63-74 152v73q-91 12-153 72t-61 140v286q0 15 11 25t25 11q3 0 9-1 9 16 26 27t36 10q30 0 51-21t21-51-21-50-51-21q-18 0-36 10v-225q0-59 53-101t126-41 126 41 53 101v225q-18-10-36-10-30 0-51 21t-21 50 21 51 51 21q19 0 36-10t26-27q6 1 9 1 15 0 25-11t11-25v-286q0-80-61-140t-153-72v-73q0-59 52-101t126-42 126 42 53 101v220q-32 12-52 39t-20 62q0 45 32 76t76 31 75-31 32-76z" horiz-adv-x="785.7" />
-<glyph glyph-name="shield" unicode="" d="m607 314v357h-250v-634q67 35 119 76 131 103 131 201z m107 429v-429q0-48-18-95t-47-84-66-71-70-57-68-43-50-28-23-11q-7-4-15-4t-14 4q-9 4-24 11t-50 28-68 43-70 57-66 71-46 84-19 95v429q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="heart-1" unicode="" d="m790 644q70-64 70-156t-70-158l-360-330-360 330q-70 66-70 158t70 156q62 58 151 58t153-58l56-52 58 52q62 58 150 58t152-58z" horiz-adv-x="860" />
-<glyph glyph-name="search-1" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
-<glyph glyph-name="menu-1" unicode="" d="m650 400q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z m-600 100q-20 0-35 15t-15 35 14 35 36 15l600 0q22 0 36-15t14-35-15-35-35-15l-600 0z m600-300q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z" horiz-adv-x="700" />
-<glyph glyph-name="back" unicode="" d="m750 540q40 0 70-29t30-71l0-290q0-40-30-70t-70-30l-690 0 0 140 650 0 0 210-500 0 0-110-210 180 210 180 0-110 540 0z" horiz-adv-x="850" />
-<glyph glyph-name="home-1" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
-<glyph glyph-name="pencil-1" unicode="" d="m718 680q32-32 47-64t15-48l0-16-252-252-290-288-238-52 50 240 290 288 252 252q54 12 126-60z m-494-640l24 24q-2 44-52 94-22 22-45 35t-35 13l-14 2-22-24-18-80q28-16 46-34 24-24 36-48z" horiz-adv-x="780" />
-<glyph glyph-name="location-1" unicode="" d="m250 750q104 0 177-73t73-177q0-106-62-243t-126-223l-62-84q-10 12-27 35t-60 89-76 130-60 147-27 149q0 104 73 177t177 73z m0-388q56 0 96 40t40 96-40 95-96 39-95-39-39-95 39-96 95-40z" horiz-adv-x="500" />
-<glyph glyph-name="logout-1" unicode="" d="m502 0l0 100 98 0 0-100q0-40-29-70t-71-30l-400 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l400 0q42 0 71-29t29-71l0-150-98 0 0 150-402 0 0-700 402 0z m398 326l-198-196 0 120-450 0 0 150 450 0 0 120z" horiz-adv-x="900" />
-<glyph glyph-name="login-1" unicode="" d="m800 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-450 0q-40 0-69 30t-29 70l0 100 98 0 0-100 450 0 0 700-450 0 0-150-98 0 0 150q0 42 29 71t69 29l450 0z m-350-670l0 120-450 0 0 150 450 0 0 120 200-194z" horiz-adv-x="900" />
-<glyph glyph-name="publish" unicode="" d="m900 800q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-198 0 0 98 200 0 0 462-802 0 0-462 200 0 0-98-200 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-770-168q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m100 0q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m672 6l0 62-602 0 0-62 602 0z m-404-198l242-240-150 0 0-300-184 0 0 300-150 0z" horiz-adv-x="1000" />
-<glyph glyph-name="window" unicode="" d="m900 750q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-670-94q-16 0-27-11t-11-25q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10z m-138-36q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10-27-11-11-25z m810-570l0 460-802 0 0-460 802 0z m0 540l0 60-602 0 0-60 602 0z" horiz-adv-x="1000" />
-<glyph glyph-name="chart-pie" unicode="" d="m368 770l0-368-368 0q18 146 121 249t247 119z m106 0q156-20 261-139t105-279q0-174-123-298t-299-124q-160 0-278 105t-140 263l424 0q20 0 35 14t15 36l0 422z" horiz-adv-x="840" />
-<glyph glyph-name="chart-line" unicode="" d="m34 284q-42 10-32 56 10 42 54 32l98-24-52-80z m890-12q14 12 33 11t31-15q32-32-2-64l-252-226q-12-12-30-12-14 0-28 10l-286 220-54 14 50 80 36-8q12-4 16-8l264-204z m-490 220l-350-550q-12-22-38-22-12 0-24 8-16 10-20 29t6 33l374 588q8 16 28 20 18 6 36-6l246-156 226 326q10 16 28 19t34-9q38-24 12-62l-252-362q-24-36-62-12z" horiz-adv-x="1003" />
-<glyph glyph-name="chart-area" unicode="" d="m964 732q16 22 16-4l0-768-964 0q-12 0-15 7t5 17l230 288q20 22 40 2l74-66q10-8 21-7t17 11l158 238q16 26 38 4l112-104q20-20 38 4z" horiz-adv-x="980" />
-<glyph glyph-name="chart-bar-1" unicode="" d="m750 800q22 0 36-15t14-35l0-850-200 0 0 850q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-550-200 0 0 550q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-250-200 0 0 250q0 50 40 50l110 0z" horiz-adv-x="800" />
-<glyph glyph-name="air" unicode="" d="m85 534q-16-14-36-12t-34 18q-14 14-12 36t18 36q48 40 79 60t89 40 129 4 159-66 155-53 100 16 89 67q38 30 70-6 32-40-6-72-122-110-234-110-100 0-222 70-68 38-119 52t-93 0-65-29-67-51z m736-110q38 32 70-6 32-40-6-72-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 0-65-29-67-51q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z m0-256q38 32 70-6 14-14 12-36t-18-36q-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 1-66-29-66-52q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z" horiz-adv-x="905" />
-<glyph glyph-name="database-1" unicode="" d="m686 208q14 20 14-2l0-100q0-74-104-135t-246-61q-140 0-245 61t-105 135l0 100q0 8 4 10t10-8q32-52 125-86t211-34 211 34 125 86z m2 254q8 16 12 0l0-116q0-68-102-114t-248-46q-144 0-247 46t-103 114l0 116q0 20 14 0 30-46 124-75t212-29 212 29 126 75z m-338 328q144 0 247-39t103-93l0-64q0-58-103-99t-247-41-247 41-103 99l0 64q0 54 103 93t247 39z" horiz-adv-x="700" />
-<glyph glyph-name="flow-cascade" unicode="" d="m520 120q50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-88 0-131 54t-43 118l0 464q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-114q0-78 78-78l164 0q30 72 110 72 50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-42 0-78 16l0-194q0-78 78-78l164 0q30 72 110 72z m0 300q-28 0-49-20t-21-50q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20z m-470 280q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20-49-20-21-50z m470-768q28 0 49 20t21 48q0 30-21 50t-49 20-49-20-21-50q0-28 21-48t49-20z" horiz-adv-x="640" />
-<glyph glyph-name="flow-tree" unicode="" d="m868 112q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 78-76 78l-100 0q-44 0-78 12l0-204q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 204q-30-12-76-12l-100 0q-34 0-53-19t-22-33-3-26l0-114q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 64 43 118t131 54l100 0q76 0 76 52l0 140q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-140q0-52 78-52l100 0q86 0 129-54t43-118l0-114z m-678-112q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m212 700q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m138-700q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m280-68q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="940" />
-<glyph glyph-name="flow-line" unicode="" d="m168 162q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="240" />
-<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110-6-58-28-101t-61-69-68-38-75-26q-42-14-63-22t-47-24-38-40-16-60q70-30 70-110 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-204q40 30 138 60 58 18 84 29t51 41 29 76q-70 32-70 108 0 50 35 85t85 35 85-35 35-85z m-588 0q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="flow-parallel-1" unicode="" d="m240 650q0-76-72-110l0-378q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85z m-50-600q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m-70 532q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m448-420q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="dot" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="220" />
-<glyph glyph-name="dot-3" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33-77 33-33 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="920" />
-<glyph glyph-name="cd" unicode="" d="m460 810q190 0 325-135t135-325-135-325-325-135-325 135-135 325 135 325 325 135z m0-610q62 0 106 44t44 106q0 64-43 107t-107 43q-62 0-106-44t-44-106 44-106 106-44z" horiz-adv-x="920" />
-<glyph glyph-name="back-in-time" unicode="" d="m532 760q170 0 289-120t119-290-119-290-289-120q-138 0-252 88l70 76q82-60 182-60 126 0 216 90t90 216q0 128-90 218t-216 90q-124 0-213-86t-93-210l142 0-184-206-184 206 124 0q4 166 123 282t285 116z m-36-190l70 0 0-204 130-130-50-50-150 150 0 234z" horiz-adv-x="940" />
-<glyph glyph-name="list" unicode="" d="m100 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m200-100q-20 0-35 15t-15 35 15 35 35 15l350 0q22 0 36-15t14-35-15-35-35-15l-350 0z m350-100q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z m0-200q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z" horiz-adv-x="700" />
-<glyph glyph-name="list-add" unicode="" d="m350 400q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m0-200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m620 200q30 0 30-50t-30-50l-170 0 0-170q0-30-50-30t-50 30l0 170-164 0q-30 0-30 50t30 50l164 0 0 170q0 30 50 30t50-30l0-170 170 0z m-620 200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z" horiz-adv-x="1000" />
-<glyph glyph-name="progress-0" unicode="" d="m1000 450l0-250q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 300q0 40 30 70t70 30l800 0q42 0 71-30t29-70l0-50z m-100-250l0 300-800 0 0-300 800 0z" horiz-adv-x="1000" />
-<glyph glyph-name="pencil-2" unicode="" d="m0-143l68 343 274-273z m137 392l422 422 259-260-421-422z m531 494q2 39 31 69t69 31 66-26l131-130q25-26 24-66t-30-69-69-30-66 24l-131 131q-27 27-25 66z" horiz-adv-x="989" />
-<glyph glyph-name="cog-2" unicode="" d="m0 272l0 156 150 16q14 45 38 88l-96 117 109 109 117-95q41 23 88 37l16 150 156 0 16-150q45-14 88-37l117 95 109-109-96-117q24-43 38-88l150-16 0-156-150-16q-14-47-38-88l96-117-109-109-117 96q-43-24-88-38l-16-150-156 0-16 150q-47 14-88 38l-117-96-109 109 96 117q-24 41-38 88z m355 78q0-60 42-102t103-42 103 42 42 102-42 103-103 42-103-42-42-103z" horiz-adv-x="1000" />
-<glyph glyph-name="cog-circled" unicode="" d="m0 350q0 207 147 354t353 146 354-146 146-354-146-354-354-146-353 146-147 354z m195-47l92-10q8-29 22-52l-59-73 68-68 73 59q23-14 52-22l10-92 94 0 10 92q29 8 52 22l73-59 68 68-59 73q14 23 22 52l92 10 0 94-92 10q-8 29-22 52l59 73-68 68-73-59q-23 14-52 22l-10 92-94 0-10-92q-29-8-52-22l-73 59-68-68 59-73q-14-23-22-52l-92-10 0-94z m217 47q0 37 26 63t62 25 63-25 25-63-25-62-63-26-62 26-26 62z" horiz-adv-x="1000" />
-<glyph glyph-name="cogs" unicode="" d="m0 245l0 97 94 8q8 30 23 55l-60 74 68 69 74-61q26 16 55 23l8 94 97 0 10-94q29-7 55-23l74 61 68-69-60-74q16-25 23-55l94-8 0-97-94-10q-7-29-23-55l60-72-68-70-74 60q-26-15-55-23l-10-94-97 0-8 94q-29 8-55 23l-74-60-68 70 60 72q-15 26-23 55z m221 49q0-37 26-64t64-26 63 26 26 64-26 63-63 26-64-26-26-63z m318 238l8 72 70-2q8 22 20 39l-37 57 54 45 49-49q20 10 41 14l14 66 72-8-2-68q22-8 39-22l57 39 45-54-49-49q10-20 12-43l68-14-8-70-68 0q-8-20-22-37l39-59-56-45-47 49q-22-8-43-12l-14-66-70 6 0 70q-20 8-37 20l-59-37-45 54 49 49q-8 20-12 41z m31-446l6 51 49 0q6 16 14 28l-26 43 37 33 36-37q13 7 29 9l10 49 48-6 0-48q16-6 28-16l41 27 31-41-35-35q6-14 10-29l47-12-6-51-49 0q-4-15-14-27l28-43-40-33-35 37q-13-8-29-10l-10-49-49 6 0 51q-13 4-27 14l-41-28-31 41 35 35q-6 14-8 30z m118 14q-4-21 8-36t32-18 34 10 17 33-10 36-31 18l-6 0q-17 0-31-13t-13-30z m17 451q-4-27 14-49t45-24 48 15 23 45-14 47-44 25l-7 0q-26 0-44-17t-21-42z" horiz-adv-x="1000" />
-<glyph glyph-name="calendar-1" unicode="" d="m0-150l0 649 893 0 0-649-893 0z m0 705l0 221 109 0 0-141 200 0 0 141 275 0 0-141 199 0 0 141 110 0 0-221-893 0z m168 139l0 156 82 0 0-156-82 0z m59-619q0-112 123-112 47 0 84 32 39 31 39 80 0 68-78 90 48 15 64 48 12 28-2 73-27 62-107 62-51 0-86-26t-37-77l72 0q0 45 49 46 43 0 45-52 0-49-84-47l0-57q48 0 68-8 23-11 23-46 0-57-54-61-43 0-47 55l-72 0z m281 146q49 14 88 47l0-297 70 0 0 371-64 0q-38-37-94-58l0-63z m135 473l0 156 82 0 0-156-82 0z" horiz-adv-x="893" />
-<glyph glyph-name="doc-new" unicode="" d="m0-150l0 818 188 182 519 0 0-348-86 0 0 260-369 0 0-156-166 0 0-668 418 0 0-88-504 0z m373 207l0 162 209 0 0 207 160 0 0-207 207 0 0-162-207 0 0-207-160 0 0 207-209 0z" horiz-adv-x="949" />
-</font>
-</defs>
-</svg>
\ No newline at end of file
diff --git a/ui/fontello/font/fontello.ttf b/ui/fontello/font/fontello.ttf
deleted file mode 100644
index c1167906ee073765a9d01aead457c4b25c530735..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 42532
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
P^z$#-zOUl!Fe&{XToHil
diff --git a/ui/fontello/font/fontello.woff b/ui/fontello/font/fontello.woff
deleted file mode 100644
index e0007cf3c54b81e62aeaeec8976b8feb2e5a21c0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 24196
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
G0002s37CTb
diff --git a/ui/fonts/LICENSE.txt b/ui/fonts/LICENSE.txt
new file mode 100644
index 0000000..9f15790
--- /dev/null
+++ b/ui/fonts/LICENSE.txt
@@ -0,0 +1,139 @@
+Font license info
+
+Open Sans font family is licensed under the Apache License, Version 2.0:
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+---
+
+The Font Awesome font is licensed under the SIL OFL 1.1:
+
+Copyright (c) 2012, Font Awesome by Dave Gandy - http://fontawesome.io,
+with Font Awesome <fontawesome>.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+
+Font Awesome CSS, LESS, and Sass files are licensed under the MIT License:
+
+The MIT License (MIT)
+
+Copyright (c) 2012 - Font Awesome by Dave Gandy - http://fontawesome.io
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/ui/fonts/Makefile.am b/ui/fonts/Makefile.am
new file mode 100644
index 0000000..6c3e531
--- /dev/null
+++ b/ui/fonts/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = css font
+
+fontsdir = $(datadir)/wok/ui/fonts
+
+dist_fonts_DATA = LICENSE.txt
diff --git a/ui/fonts/css/Makefile.am b/ui/fonts/css/Makefile.am
new file mode 100644
index 0000000..4ec5f18
--- /dev/null
+++ b/ui/fonts/css/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cssdir = $(datadir)/wok/ui/fonts/css
+
+dist_css_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/fonts/css/fontawesome.css b/ui/fonts/css/fontawesome.css
new file mode 100644
index 0000000..1125cde
--- /dev/null
+++ b/ui/fonts/css/fontawesome.css
@@ -0,0 +1,2669 @@
+@charset "UTF-8";
+/*
+ * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ *
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015 - Font Awesome 4.3.0 - http://fontawesome.io - @fontawesome
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ /
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.*/
+
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: 'FontAwesome';
+ src: url("../fontawesome-webfont.ttf") format("truetype");
+ font-weight: normal;
+ font-style: normal;
+}
+
+.fa {
+ 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;
+}
+
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.3333333333em;
+ 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.2857142857em;
+ text-align: center;
+}
+
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.1428571429em;
+ list-style-type: none;
+}
+
+.fa-ul > li {
+ position: relative;
+}
+
+.fa-li {
+ position: absolute;
+ left: -2.1428571429em;
+ width: 2.1428571429em;
+ top: 0.1428571429em;
+ text-align: center;
+}
+
+.fa-li.fa-lg {
+ left: -1.8571428571em;
+}
+
+.fa-border {
+ padding: 0.2em 0.25em 0.15em;
+ border: solid 0.08em #eee;
+ border-radius: .1em;
+}
+
+.fa-pull-left {
+ float: left;
+}
+
+.fa-pull-right {
+ float: right;
+}
+
+.fa.fa-pull-left {
+ margin-right: .3em;
+}
+
+.fa.fa-pull-right {
+ margin-left: .3em;
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.fa.pull-left {
+ margin-right: .3em;
+}
+
+.fa.pull-right {
+ margin-left: .3em;
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-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 {
+ -webkit-filter: none;
+ 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;
+}
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "";
+}
+
+.fa-music:before {
+ content: "";
+}
+
+.fa-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 {
+ content: "";
+}
+
+.fa-file-o:before {
+ content: "";
+}
+
+.fa-clock-o:before {
+ content: "";
+}
+
+.fa-road:before {
+ content: "";
+}
+
+.fa-download: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 {
+ 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 {
+ content: "";
+}
+
+.fa-check-circle: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 {
+ content: "";
+}
+
+.fa-gift:before {
+ content: "";
+}
+
+.fa-leaf:before {
+ content: "";
+}
+
+.fa-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-f:before,
+.fa-facebook:before {
+ content: "";
+}
+
+.fa-github:before {
+ content: "";
+}
+
+.fa-unlock:before {
+ content: "";
+}
+
+.fa-credit-card:before {
+ content: "";
+}
+
+.fa-feed:before,
+.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 {
+ content: "";
+}
+
+.fa-arrow-circle-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 {
+ 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 {
+ 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 {
+ 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 {
+ 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,
+.fa-gratipay: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 {
+ 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-y-combinator-square:before,
+.fa-yc-square:before,
+.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-buysellads:before {
+ content: "";
+}
+
+.fa-connectdevelop:before {
+ content: "";
+}
+
+.fa-dashcube:before {
+ content: "";
+}
+
+.fa-forumbee:before {
+ content: "";
+}
+
+.fa-leanpub:before {
+ content: "";
+}
+
+.fa-sellsy:before {
+ content: "";
+}
+
+.fa-shirtsinbulk:before {
+ content: "";
+}
+
+.fa-simplybuilt:before {
+ content: "";
+}
+
+.fa-skyatlas:before {
+ content: "";
+}
+
+.fa-cart-plus:before {
+ content: "";
+}
+
+.fa-cart-arrow-down:before {
+ content: "";
+}
+
+.fa-diamond:before {
+ content: "";
+}
+
+.fa-ship:before {
+ content: "";
+}
+
+.fa-user-secret:before {
+ content: "";
+}
+
+.fa-motorcycle:before {
+ content: "";
+}
+
+.fa-street-view:before {
+ content: "";
+}
+
+.fa-heartbeat:before {
+ content: "";
+}
+
+.fa-venus:before {
+ content: "";
+}
+
+.fa-mars:before {
+ content: "";
+}
+
+.fa-mercury:before {
+ content: "";
+}
+
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "";
+}
+
+.fa-transgender-alt:before {
+ content: "";
+}
+
+.fa-venus-double:before {
+ content: "";
+}
+
+.fa-mars-double:before {
+ content: "";
+}
+
+.fa-venus-mars:before {
+ content: "";
+}
+
+.fa-mars-stroke:before {
+ content: "";
+}
+
+.fa-mars-stroke-v:before {
+ content: "";
+}
+
+.fa-mars-stroke-h:before {
+ content: "";
+}
+
+.fa-neuter:before {
+ content: "";
+}
+
+.fa-genderless:before {
+ content: "";
+}
+
+.fa-facebook-official:before {
+ content: "";
+}
+
+.fa-pinterest-p:before {
+ content: "";
+}
+
+.fa-whatsapp:before {
+ content: "";
+}
+
+.fa-server:before {
+ content: "";
+}
+
+.fa-user-plus:before {
+ content: "";
+}
+
+.fa-user-times:before {
+ content: "";
+}
+
+.fa-hotel:before,
+.fa-bed:before {
+ content: "";
+}
+
+.fa-viacoin:before {
+ content: "";
+}
+
+.fa-train:before {
+ content: "";
+}
+
+.fa-subway:before {
+ content: "";
+}
+
+.fa-medium:before {
+ content: "";
+}
+
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "";
+}
+
+.fa-optin-monster:before {
+ content: "";
+}
+
+.fa-opencart:before {
+ content: "";
+}
+
+.fa-expeditedssl:before {
+ content: "";
+}
+
+.fa-battery-4:before,
+.fa-battery-full:before {
+ content: "";
+}
+
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "";
+}
+
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "";
+}
+
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "";
+}
+
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "";
+}
+
+.fa-mouse-pointer:before {
+ content: "";
+}
+
+.fa-i-cursor:before {
+ content: "";
+}
+
+.fa-object-group:before {
+ content: "";
+}
+
+.fa-object-ungroup:before {
+ content: "";
+}
+
+.fa-sticky-note:before {
+ content: "";
+}
+
+.fa-sticky-note-o:before {
+ content: "";
+}
+
+.fa-cc-jcb:before {
+ content: "";
+}
+
+.fa-cc-diners-club:before {
+ content: "";
+}
+
+.fa-clone:before {
+ content: "";
+}
+
+.fa-balance-scale:before {
+ content: "";
+}
+
+.fa-hourglass-o:before {
+ content: "";
+}
+
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "";
+}
+
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "";
+}
+
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "";
+}
+
+.fa-hourglass:before {
+ content: "";
+}
+
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "";
+}
+
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "";
+}
+
+.fa-hand-scissors-o:before {
+ content: "";
+}
+
+.fa-hand-lizard-o:before {
+ content: "";
+}
+
+.fa-hand-spock-o:before {
+ content: "";
+}
+
+.fa-hand-pointer-o:before {
+ content: "";
+}
+
+.fa-hand-peace-o:before {
+ content: "";
+}
+
+.fa-trademark:before {
+ content: "";
+}
+
+.fa-registered:before {
+ content: "";
+}
+
+.fa-creative-commons:before {
+ content: "";
+}
+
+.fa-gg:before {
+ content: "";
+}
+
+.fa-gg-circle:before {
+ content: "";
+}
+
+.fa-tripadvisor:before {
+ content: "";
+}
+
+.fa-odnoklassniki:before {
+ content: "";
+}
+
+.fa-odnoklassniki-square:before {
+ content: "";
+}
+
+.fa-get-pocket:before {
+ content: "";
+}
+
+.fa-wikipedia-w:before {
+ content: "";
+}
+
+.fa-safari:before {
+ content: "";
+}
+
+.fa-chrome:before {
+ content: "";
+}
+
+.fa-firefox:before {
+ content: "";
+}
+
+.fa-opera:before {
+ content: "";
+}
+
+.fa-internet-explorer:before {
+ content: "";
+}
+
+.fa-tv:before,
+.fa-television:before {
+ content: "";
+}
+
+.fa-contao:before {
+ content: "";
+}
+
+.fa-500px:before {
+ content: "";
+}
+
+.fa-amazon:before {
+ content: "";
+}
+
+.fa-calendar-plus-o:before {
+ content: "";
+}
+
+.fa-calendar-minus-o:before {
+ content: "";
+}
+
+.fa-calendar-times-o:before {
+ content: "";
+}
+
+.fa-calendar-check-o:before {
+ content: "";
+}
+
+.fa-industry:before {
+ content: "";
+}
+
+.fa-map-pin:before {
+ content: "";
+}
+
+.fa-map-signs:before {
+ content: "";
+}
+
+.fa-map-o:before {
+ content: "";
+}
+
+.fa-map:before {
+ content: "";
+}
+
+.fa-commenting:before {
+ content: "";
+}
+
+.fa-commenting-o:before {
+ content: "";
+}
+
+.fa-houzz:before {
+ content: "";
+}
+
+.fa-vimeo:before {
+ content: "";
+}
+
+.fa-black-tie:before {
+ content: "";
+}
+
+.fa-fonticons:before {
+ content: "";
+}
diff --git a/ui/fonts/css/opensans.css b/ui/fonts/css/opensans.css
new file mode 100644
index 0000000..9402221
--- /dev/null
+++ b/ui/fonts/css/opensans.css
@@ -0,0 +1,79 @@
+/* BEGIN Light */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-Light.ttf") format("truetype");
+ font-weight: 300;
+ font-style: normal; }
+/* END Light */
+
+/* BEGIN Light Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-LightItalic.ttf") format("truetype");
+ font-weight: 300;
+ font-style: italic; }
+/* END Light Italic */
+
+/* BEGIN Regular */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-Regular.ttf") format("truetype");
+ font-weight: normal;
+ font-style: normal; }
+/* END Regular */
+
+/* BEGIN Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-Italic.ttf") format("truetype");
+ font-weight: normal;
+ font-style: italic; }
+/* END Italic */
+
+/* BEGIN Semibold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-Semibold.ttf") format("truetype");
+ font-weight: 600;
+ font-style: normal; }
+/* END Semibold */
+
+/* BEGIN Semibold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-SemiboldItalic.ttf") format("truetype");
+ font-weight: 600;
+ font-style: italic; }
+/* END Semibold Italic */
+
+/* BEGIN Bold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-Bold.ttf") format("truetype");
+ font-weight: bold;
+ font-style: normal; }
+/* END Bold */
+
+/* BEGIN Bold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-BoldItalic.ttf") format("truetype");
+ font-weight: bold;
+ font-style: italic; }
+/* END Bold Italic */
+
+/* BEGIN Extrabold */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-ExtraBold.ttf") format("truetype");
+ font-weight: 800;
+ font-style: normal; }
+/* END Extrabold */
+
+/* BEGIN Extrabold Italic */
+@font-face {
+ font-family: 'Open Sans';
+ src: url("../OpenSans-ExtraBoldItalic.ttf") format("truetype");
+ font-weight: 800;
+ font-style: italic; }
+/* END Extrabold Italic */
\ No newline at end of file
diff --git a/ui/pages/wok-ui.html.tmpl b/ui/pages/wok-ui.html.tmpl
index a2fd4e1..5666a1a 100644
--- a/ui/pages/wok-ui.html.tmpl
+++ b/ui/pages/wok-ui.html.tmpl
@@ -31,10 +31,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<link rel="shortcut icon" href="images/logo.ico">
<link rel="stylesheet" href="$href('libs/themes/base/jquery-ui.min.css')">
-<link rel="stylesheet" href="$href('fontello/css/fontello.css')">
-<link rel="stylesheet" href="$href('fontello/css/animation.css')">
<link rel="stylesheet" href="$href('css/theme-default.min.css')">
-
+<link rel="stylesheet" href="$href('fonts/css/fontawesome.css')">
+<link rel="stylesheet" href="$href('fonts/css/opensans.css')">
<script src="$href('libs/jquery-1.10.0.min.js')"></script>
<script src="$href('libs/jquery-ui.min.js')"></script>
<script src="$href('libs/jquery-ui-i18n.min.js')"></script>
--
1.9.3
2
1
18 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
V2 -> V3:
- Update model/vmstorages.py to solve issue when using REST API directly.
- Changed return of validation to True/False instead of 1/0.
- Update tests to reflect REST API changes.
- Update MockModel to be correctly used by tests.
V1 -> V2:
- Add new supported valid Raw content.
- Make list of valid Raw content global.
Kimchi allows to attach Raw volumes that are not disk images when editing
a VM. With this, it's possible attach a XML or PDF file (that qemu-img and
libvirt see as raw volumes) as a disk into the guest.
This patch-set introduces a check for all 'raw' volumes to see if them are
valid disks or not (by using libmagic), and then, pass this information to
the front-end to make a correct list of volumes option when attaching a new
one into a VM.
Paulo Vital (3):
Raw volumes validation: update contrib and README
Raw volumes validation: back-end and front-end
Raw volumes validation: update tests
contrib/DEBIAN/control.in | 3 ++-
contrib/kimchi.spec.fedora.in | 1 +
contrib/kimchi.spec.suse.in | 1 +
docs/API.md | 1 +
docs/README.md | 11 +++++------
src/kimchi/control/storagevolumes.py | 3 ++-
src/kimchi/mockmodel.py | 10 ++++++++--
src/kimchi/model/storagevolumes.py | 21 ++++++++++++++++++++-
src/kimchi/model/vmstorages.py | 4 ++++
tests/test_model_storagevolume.py | 2 +-
tests/test_rest.py | 2 ++
ui/js/src/kimchi.guest_storage_add.main.js | 2 +-
12 files changed, 48 insertions(+), 13 deletions(-)
--
2.4.3
2
4
Aline Manera (2):
Move vnc.py to Kimchi plugin
Remove unnecessary dependencies from Wok and Kimchi
Makefile.am | 2 -
contrib/DEBIAN/control.in | 4 --
contrib/wok.spec.fedora.in | 12 -----
contrib/wok.spec.suse.in | 5 --
plugins/kimchi/Makefile.am | 4 +-
plugins/kimchi/contrib/DEBIAN/control.in | 6 ---
plugins/kimchi/contrib/kimchi.spec.fedora.in | 9 +---
plugins/kimchi/contrib/kimchi.spec.suse.in | 10 +---
plugins/kimchi/model/vms.py | 2 +-
plugins/kimchi/root.py | 2 +-
plugins/kimchi/vnc.py | 77 ++++++++++++++++++++++++++++
src/wok/vnc.py | 77 ----------------------------
12 files changed, 86 insertions(+), 124 deletions(-)
create mode 100644 plugins/kimchi/vnc.py
delete mode 100644 src/wok/vnc.py
--
2.1.0
2
5
Aline Manera (2):
Add Fontawesome font as dependency and expose the .ttf file on server
Add OpenSans font family as dependency and expose the .ttf file on
server
contrib/DEBIAN/control.in | 4 +++-
contrib/wok.spec.fedora.in | 2 ++
contrib/wok.spec.suse.in | 2 ++
src/wok/config.py.in | 35 +++++++++++++++++++++++++++++++++++
4 files changed, 42 insertions(+), 1 deletion(-)
--
2.1.0
2
5
17 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Add to deb and rpm build files all necessary packages required to make
available build wok to distros.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
contrib/DEBIAN/control.in | 3 ++-
contrib/wok.spec.fedora.in | 1 +
contrib/wok.spec.suse.in | 1 +
3 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/contrib/DEBIAN/control.in b/contrib/DEBIAN/control.in
index ef4e0c2..965d13f 100644
--- a/contrib/DEBIAN/control.in
+++ b/contrib/DEBIAN/control.in
@@ -15,7 +15,8 @@ Depends: python-cherrypy3 (>= 3.2.0),
python-lxml,
nginx,
python-ldap,
- spice-html5
+ spice-html5,
+ python-psutil (>= 0.6.0)
Build-Depends: libxslt,
openssl,
python-lxml
diff --git a/contrib/wok.spec.fedora.in b/contrib/wok.spec.fedora.in
index 30319a9..3f233a7 100644
--- a/contrib/wok.spec.fedora.in
+++ b/contrib/wok.spec.fedora.in
@@ -19,6 +19,7 @@ Requires: python-jsonschema >= 1.3.0
Requires: python-lxml
Requires: nginx
Requires: python-ldap
+Requires: python-psutil >= 0.6.0
BuildRequires: libxslt
BuildRequires: openssl
BuildRequires: python-lxml
diff --git a/contrib/wok.spec.suse.in b/contrib/wok.spec.suse.in
index 63bdce3..a9a496b 100644
--- a/contrib/wok.spec.suse.in
+++ b/contrib/wok.spec.suse.in
@@ -20,6 +20,7 @@ Requires: python-ldap
Requires: python-lxml
Requires: python-xml
Requires: nginx
+Requires: python-psutil >= 0.6.0
BuildRequires: libxslt-tools
BuildRequires: openssl
BuildRequires: python-lxml
--
2.4.3
2
3
Hi All,
first I want to clarify that the following proposal is targeting the 1.6
release and can wait till we have stabilized the new UI in 1.6.
But I guess that it will take some discussion to come up with a good
solution so I thought I'll start it now even knowing that I'll not be
able to participate in the discussion for the next 2 weeks since I'll be
travelling.
Problem statement:
- there is a set functionalities which are usefull/required in
kimchi and ginger, for example:
- logical volume management:
- required by kimchi to define a storage pool based on LVM
- required by ginger to manage the host owned logical
volumes
- networking: VLAN assignement, bridge management
- required by kimchi on virtual network management
- required by ginger outside/without virtualisation
Currently the functionalities mentioned above are part of the kimchi plugin.
Options to address this problem:
1. Implement the functionality in both plugins.
Pros: the current code in kimchi can stay unchanged
Cons: code dupplication, double maintanance
2. Share the source code modules
Pros: no code duplication
Cons: potential module duplication since the plugins are in
different repos
3. "Interfacing" between the plugins: one plugin implements the
functionality and is exposing an interface for other plugins
Pros: clean separation
Cons: dependency between plugins (but we have that anyhow
already between kimchi and gingercommon)
4. ???
My preffered Option would be 3. but potentially there are othere options
and aspect I may have missed.
5
5
v2:
- patch rebased
*IMPORTANT*: This patch depends on cpu hotplug support.
This patchset addresses two issues regarding vcpu:
1 - users cannot update the number of cpus when topology is defined. In
such case, vcpu must always be sockets * cores * threads. If a VM has a
topology defined and we try to simply change vcpu without taking care of
that topology libvirt will complain.
NOTE: Using Kimchi UI, we can define the topology only when creating a
template, it means that thoses values cannot be updated because there is
no interface to do that.
2 - the maximum vcpu returned by libvirt is wrong. In Power it returns
1024 however the VM won't even boot with that value.
Jose Ricardo Ziviani (2):
Forbid user to edit CPU value if topology is defined
Do not use libvirt to retrieve max vcpu value
src/kimchi/i18n.py | 1 +
src/kimchi/model/vms.py | 29 ++++++++++++++++++++++++++++-
2 files changed, 29 insertions(+), 1 deletion(-)
--
1.9.1
2
3
v3:
- included commit "Hot add/remove CPUs on PPC"
v2:
- patch rebased
This patchset refactors part of the code related to updating VM CPUs.
I am aware of two tests which are failing with this patchset. They'll be worked
on before the final version.
Crístian Deives (4):
Use locks to prevent concurrent updates to VMs
Update VCPU by using libvirt function
Set max VCPU count to the max supported value
Check if the VM update params are valid for the current state
Crístian Viana (1):
Hot add/remove CPUs on PPC
src/kimchi/i18n.py | 5 +++
src/kimchi/mockmodel.py | 48 ++++++++--------------
src/kimchi/model/vms.py | 106 ++++++++++++++++++++++++++++++++++++++++++++----
tests/test_rest.py | 3 +-
4 files changed, 122 insertions(+), 40 deletions(-)
--
1.9.1
3
7
From: samhenri <samuel.guimaraes(a)eldorado.org.br>
This was necessary due to merge conflicts with upstream code.
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
COPYING | 2 +-
configure.ac | 5 +-
plugins/kimchi/tests/test_config.py.in | 8 +-
plugins/kimchi/ui/config/tab-ext.xml | 10 +-
plugins/kimchi/ui/css/theme-default/host.css | 287 ---
plugins/kimchi/ui/js/src/kimchi.host.js | 84 +-
plugins/kimchi/ui/pages/host.html.tmpl | 202 +-
plugins/kimchi/ui/pages/report-add.html.tmpl | 46 +-
src/wok/config.py.in | 2 +-
ui/Makefile.am | 2 +-
ui/fontawesome/LICENSE.txt | 9 +
ui/fontawesome/Makefile.am | 22 +
ui/fontawesome/css/Makefile.am | 20 +
ui/fontawesome/css/fontawesome.css | 2648 ++++++++++++++++++++++++++
ui/fontello/LICENSE.txt | 66 -
ui/fontello/Makefile.am | 22 -
ui/fontello/css/Makefile.am | 20 -
ui/fontello/css/animation.css | 85 -
ui/fontello/css/fontello.css | 261 ---
ui/fontello/font/Makefile.am | 20 -
ui/fontello/font/fontello.eot | Bin 42700 -> 0 bytes
ui/fontello/font/fontello.svg | 220 ---
ui/fontello/font/fontello.ttf | Bin 42532 -> 0 bytes
ui/fontello/font/fontello.woff | Bin 24196 -> 0 bytes
24 files changed, 2866 insertions(+), 1175 deletions(-)
delete mode 100644 plugins/kimchi/ui/css/theme-default/host.css
create mode 100644 ui/fontawesome/LICENSE.txt
create mode 100644 ui/fontawesome/Makefile.am
create mode 100644 ui/fontawesome/css/Makefile.am
create mode 100644 ui/fontawesome/css/fontawesome.css
delete mode 100644 ui/fontello/LICENSE.txt
delete mode 100644 ui/fontello/Makefile.am
delete mode 100644 ui/fontello/css/Makefile.am
delete mode 100644 ui/fontello/css/animation.css
delete mode 100644 ui/fontello/css/fontello.css
delete mode 100644 ui/fontello/font/Makefile.am
delete mode 100644 ui/fontello/font/fontello.eot
delete mode 100644 ui/fontello/font/fontello.svg
delete mode 100644 ui/fontello/font/fontello.ttf
delete mode 100644 ui/fontello/font/fontello.woff
diff --git a/COPYING b/COPYING
index 4cc4028..bd570de 100644
--- a/COPYING
+++ b/COPYING
@@ -6,7 +6,7 @@ Except the imported code under the following directories:
- plugins/kimchi/ui/spice-html5 which is imported from spice-html5 project
(http://cgit.freedesktop.org/spice/spice-html5)
- ui/libs which is imported from JQuery UI (http://jqueryui.com)
-- ui/fontello which is generated by http://fontello.com open source project.
+- ui/fontawesome which is generated by http://fontawesome.com open source project.
The rest of this distribution is governed by the GNU Lesser General Public
License version 3.
diff --git a/configure.ac b/configure.ac
index 47c2e6c..2457e35 100644
--- a/configure.ac
+++ b/configure.ac
@@ -104,9 +104,8 @@ AC_CONFIG_FILES([
plugins/sample/ui/pages/Makefile
ui/Makefile
ui/css/Makefile
- ui/fontello/Makefile
- ui/fontello/css/Makefile
- ui/fontello/font/Makefile
+ ui/fontawesome/Makefile
+ ui/fontawesome/css/Makefile
ui/images/Makefile
ui/images/theme-default/Makefile
ui/js/Makefile
diff --git a/plugins/kimchi/tests/test_config.py.in b/plugins/kimchi/tests/test_config.py.in
index 0167610..996542a 100644
--- a/plugins/kimchi/tests/test_config.py.in
+++ b/plugins/kimchi/tests/test_config.py.in
@@ -121,9 +121,9 @@ class ConfigTests(unittest.TestCase):
'tools.nocache.on': False,
'tools.wokauth.on': False
},
- '/fontello': {
+ '/fontawesome': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/fontello' % paths.prefix,
+ 'tools.staticdir.dir': '%s/ui/fontawesome' % paths.prefix,
'tools.expires.on': True,
'tools.expires.secs': CACHEEXPIRES,
'tools.nocache.on': False,
@@ -229,9 +229,9 @@ class ConfigTests(unittest.TestCase):
'tools.nocache.on': False,
'tools.wokauth.on': False
},
- '/fontello': {
+ '/fontawesome': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/fontello' % pluginPrefix,
+ 'tools.staticdir.dir': '%s/ui/fontawesome' % pluginPrefix,
'tools.expires.on': True,
'tools.expires.secs': CACHEEXPIRES,
'tools.nocache.on': False,
diff --git a/plugins/kimchi/ui/config/tab-ext.xml b/plugins/kimchi/ui/config/tab-ext.xml
index ee88c88..4f6a228 100644
--- a/plugins/kimchi/ui/config/tab-ext.xml
+++ b/plugins/kimchi/ui/config/tab-ext.xml
@@ -3,36 +3,36 @@
<tab>
<access role="admin" mode="admin"/>
<access role="user" mode="none"/>
-
<title>Host</title>
+ <css>host</css>
<path>plugins/kimchi/host.html</path>
</tab>
<tab>
<access role="admin" mode="admin"/>
<access role="user" mode="byInstance"/>
-
<title>Guests</title>
+ <css>guests</css>
<path>plugins/kimchi/guests.html</path>
</tab>
<tab>
<access role="admin" mode="admin"/>
<access role="user" mode="none"/>
-
<title>Templates</title>
+ <css>templates</css>
<path>plugins/kimchi/templates.html</path>
</tab>
<tab>
<access role="admin" mode="admin"/>
<access role="user" mode="read-only"/>
-
<title>Storage</title>
+ <css>storage</css>
<path>plugins/kimchi/storage.html</path>
</tab>
<tab>
<access role="admin" mode="admin"/>
<access role="user" mode="read-only"/>
-
<title>Network</title>
+ <css>network</css>
<path>plugins/kimchi/network.html</path>
</tab>
</tabs-ext>
diff --git a/plugins/kimchi/ui/css/theme-default/host.css b/plugins/kimchi/ui/css/theme-default/host.css
deleted file mode 100644
index a0cccb1..0000000
--- a/plugins/kimchi/ui/css/theme-default/host.css
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-.host-panel {
- font-size: 12px;
- margin-bottom: 100px;
-}
-
-.host-panel .logo-container, .host-panel .info-container,
-.host-panel .section-label, .host-panel .section-value {
- display: inline-block;
- vertical-align: top;
-}
-
-.host-panel .section-label {
- display: inline-block;
- margin-right: 1em;
- vertical-align: top;
-}
-
-.host-panel .logo {
- background: url("plugins/kimchi/images/icon-vm.png") no-repeat left top;
- height: 128px;
- width: 128px;
-}
-
-.host-panel .hostname {
- text-decoration: underline;
-}
-
-.host-panel .action-panel {
- margin-top: 2em;
- padding-left: 10px;
-}
-
-.host-panel .button-icon {
- background: url("../images/theme-default/host-icon-sprite.png") no-repeat
- left top;
- display: inline-block;
- height: 12px;
- width: 12px;
-}
-
-.host-panel .action-icon-stop {
- background-position: -14px 0;
-}
-
-.host-panel .action-icon-restart {
- background-position: -28px 0;
-}
-
-.host-panel .action-icon-download {
- background-position: -42px 0;
-}
-
-.host-panel .action-icon-connect {
- background-position: -56px 0;
-}
-
-.host-panel .action-icon-add {
- background-position: -70px 0;
-}
-
-.host-panel .action-icon-edit {
- background-position: -84px 0;
-}
-
-.host-panel .action-icon-remove {
- background-position: -98px 0;
-}
-
-.host-panel button:disabled .action-icon-start {
- background-position: 0 -14px;
-}
-
-.host-panel button:disabled .action-icon-stop {
- background-position: -14px -14px;
-}
-
-.host-panel button:disabled .action-icon-restart {
- background-position: -28px -14px;
-}
-
-.host-panel button:disabled .action-icon-download {
- background-position: -42px -14px;
-}
-
-.host-panel button:disabled .action-icon-connect {
- background-position: -56px -14px;
-}
-
-.host-panel button:disabled .action-icon-add {
- background-position: -70px -14px;
-}
-
-.host-panel button:disabled .action-icon-edit {
- background-position: -84px -14px;
-}
-
-.host-panel button:disabled .action-icon-remove {
- background-position: -98px -14px;
-}
-
-.host-panel .info-container {
- padding-top: 16px;
- width: 890px;
-}
-
-.host-panel .section-header {
- background: #EEE;
- border-radius: 5px;
- cursor: pointer;
- line-height: 2em;
- margin: 1em 0 1em;
- padding-left: 6px;
-}
-
-.host-panel .section-header:hover {
- background: #06f;
- color: white;
-}
-
-.host-panel .section-content {
- padding-left: 1em;
-}
-
-.host-panel .section-header .arrow {
- border-color: transparent;
- border-style: solid;
- display: inline-block;
- margin-right: 6px;
- width: 0;
-}
-
-.host-panel .section-header[aria-expanded="true"] .arrow {
- border-top-color: black;
- border-width: 8px 4px 0;
- border-bottom: none;
-}
-
-.host-panel .section-header[aria-expanded="true"]:hover .arrow {
- border-top-color: white;
-}
-
-.host-panel .section-header[aria-expanded="false"] .arrow {
- border-left-color: black;
- border-right: none;
- border-width: 4px 0 4px 8px;
-}
-
-.host-panel .section-header[aria-expanded="false"]:hover .arrow {
- border-left-color: white;
-}
-
-.host-panel .section-row {
- line-height: 1.6em;
- margin-bottom: 1em;
-}
-
-.host-panel .section-label {
- width: 100px;
-}
-
-#frequency-textbox {
- width: 20px;
-}
-
-#container-chart-cpu,
-#container-chart-memory,
-#container-chart-disk-io,
-#container-chart-network-io {
- border: 1px solid white;
- box-shadow: 2px 2px 2px gray, 2px -2px 2px gray, -2px -2px 2px gray, -2px
- 2px 2px gray;
- height: 100px;
- width: 500px;
-}
-
-#container-chart-disk-io .disk-write,
-#container-chart-network-io .network-sent {
- stroke: #f80;
-}
-
-/* Debug Report */
-.cell-text-wrapper {
- margin-left: 10px;
-}
-
-.host-panel #available-reports-grid {
- border-color: #ddd;
- height: 400px;
- width: 850px;
-}
-
-.host-panel select#available-reports-list {
- width: 300px;
-}
-
-.host-panel select#available-reports-list option {
- margin: .2em 1em;
-}
-
-.debug-report-name,
-.debug-report-time {
- width: 424px;
-}
-
-#id-debug-img {
- background: url(../images/theme-default/kimchi-loading15x15.gif) 12px
- center no-repeat;
- padding-left: 23px;
-}
-
-/* End of Debug Report */
-
-/* Software Updates */
-.host-panel #software-updates-grid {
- border-color: #ddd;
- height: 300px;
- width: 850px;
-}
-
-.software-update-name,
-.software-update-repos {
- width: 224px;
-}
-
-.software-update-version,
-.software-update-arch {
- width: 200px;
-}
-
-.host-panel #software-updates-progress-textarea {
- border: 1px solid #ddd;
- box-sizing: border-box;
- height: 100px;
- padding: .2em .5em;
- resize: vertical;
- width: 852px;
-}
-/* End of Software Updates */
-
-/* Repository */
-.host-panel #repositories-grid {
- border-color: #ddd;
- height: 200px;
- width: 850px;
-}
-
-.host-panel #repositories-grid .repository-id {
- width: 120px;
-}
-
-.host-panel #repositories-grid .repository-name {
- width: 640px;
-}
-
-.host-panel #repositories-grid .repository-enabled {
- width: 88px;
-}
-
-.host-panel #repositories-grid .repository-baseurl.deb {
- width: 400px;
-}
-
-.host-panel #repositories-grid .repository-enabled.deb {
- width: 100px;
-}
-
-.host-panel #repositories-grid .repository-gpgcheck.deb {
- width: 150px;
-}
-/* End of Repository */
diff --git a/plugins/kimchi/ui/js/src/kimchi.host.js b/plugins/kimchi/ui/js/src/kimchi.host.js
index e2d2511..8c2ff49 100644
--- a/plugins/kimchi/ui/js/src/kimchi.host.js
+++ b/plugins/kimchi/ui/js/src/kimchi.host.js
@@ -19,9 +19,9 @@ kimchi.host={};
kimchi.host_main = function() {
var expand = function(header, toExpand) {
- var controlledNode = $(header).attr('aria-controls');
- $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
- $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
+ // var controlledNode = $(header).attr('aria-controls');
+ // $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
+ // $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
};
var repositoriesGrid = null;
@@ -85,6 +85,7 @@ kimchi.host_main = function() {
toolbarButtons: [{
id: 'repositories-grid-add-button',
label: i18n['KCHREPO6012M'],
+ class: 'fa fa-plus-circle',
onClick: function(event) {
wok.window.open({url:'plugins/kimchi/repository-add.html',
class: repo_type});
@@ -92,6 +93,7 @@ kimchi.host_main = function() {
}, {
id: 'repositories-grid-enable-button',
label: i18n['KCHREPO6016M'],
+ class: 'fa fa-play-circle-o',
disabled: true,
onClick: function(event) {
var repository = repositoriesGrid.getSelected();
@@ -108,6 +110,7 @@ kimchi.host_main = function() {
}, {
id: 'repositories-grid-edit-button',
label: i18n['KCHREPO6013M'],
+ class: 'fa fa-pencil',
disabled: true,
onClick: function(event) {
var repository = repositoriesGrid.getSelected();
@@ -122,6 +125,8 @@ kimchi.host_main = function() {
id: 'repositories-grid-remove-button',
label: i18n['KCHREPO6014M'],
disabled: true,
+ class: 'fa fa-minus-circle',
+ critical: true,
onClick: function(event) {
var repository = repositoriesGrid.getSelected();
if(!repository) {
@@ -302,12 +307,14 @@ kimchi.host_main = function() {
title: i18n['KCHDR6002M'],
toolbarButtons: [{
id: reportGridID + '-generate-button',
+ class: 'fa fa-plus-circle',
label: i18n['KCHDR6006M'],
onClick: function(event) {
wok.window.open('plugins/kimchi/report-add.html');
}
}, {
id: reportGridID + '-rename-button',
+ class: 'fa fa-pencil',
label: i18n['KCHDR6008M'],
disabled: true,
onClick: function(event) {
@@ -320,8 +327,25 @@ kimchi.host_main = function() {
wok.window.open('plugins/kimchi/report-rename.html');
}
}, {
+ id: reportGridID + '-download-button',
+ label: i18n['KCHDR6010M'],
+ class: 'fa fa-download',
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ kimchi.downloadReport({
+ file: report['uri']
+ });
+ }
+ }, {
id: reportGridID + '-remove-button',
+ class: 'fa fa-minus-circle',
label: i18n['KCHDR6009M'],
+ critical: true,
disabled: true,
onClick: function(event) {
var report = reportGrid.getSelected();
@@ -346,20 +370,6 @@ kimchi.host_main = function() {
});
});
}
- }, {
- id: reportGridID + '-download-button',
- label: i18n['KCHDR6010M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- kimchi.downloadReport({
- file: report['uri']
- });
- }
}],
onRowSelected: function(row) {
var report = reportGrid.getSelected();
@@ -486,9 +496,9 @@ kimchi.host_main = function() {
var initPage = function() {
$('#host-info-container .section-header').each(function(i, header) {
- $('<span class="arrow"></span>').prependTo(header);
- var toExpand = $(header).attr('aria-expanded') !== 'false';
- expand(header, toExpand);
+ // $('<span class="arrow"></span>').prependTo(header);
+ // var toExpand = $(header).attr('aria-expanded') !== 'false';
+ // expand(header, toExpand);
});
$('#host-info-container').on('click', '.section-header', function(event) {
@@ -497,10 +507,12 @@ kimchi.host_main = function() {
});
$('#host-button-shutdown').on('click', function(event) {
+ event.preventDefault();
shutdownHost(null);
});
$('#host-button-restart').on('click', function(event) {
+ event.preventDefault();
shutdownHost({
reboot: true
});
@@ -576,40 +588,40 @@ kimchi.host_main = function() {
}
},
diskIO: {
- r: {
+ w: {
type: 'value',
base: 2,
fixed: 2,
unit: 'B/s',
- legend: i18n['KCHHOST6004M'],
+ legend: i18n['KCHHOST6005M'],
+ 'class': 'disk-write',
points: []
},
- w: {
+ r: {
type: 'value',
base: 2,
fixed: 2,
unit: 'B/s',
- legend: i18n['KCHHOST6005M'],
- 'class': 'disk-write',
+ legend: i18n['KCHHOST6004M'],
points: []
}
},
networkIO: {
- r: {
+ s: {
type: 'value',
base: 2,
fixed: 2,
unit: 'B/s',
- legend: i18n['KCHHOST6006M'],
+ legend: i18n['KCHHOST6007M'],
+ 'class': 'network-sent',
points: []
},
- s: {
+ r: {
type: 'value',
base: 2,
fixed: 2,
unit: 'B/s',
- legend: i18n['KCHHOST6007M'],
- 'class': 'network-sent',
+ legend: i18n['KCHHOST6006M'],
points: []
}
}
@@ -725,19 +737,19 @@ kimchi.host_main = function() {
}
},
diskIO: {
- r: {
- v: stats['disk_read_rate']
- },
w: {
v: stats['disk_write_rate']
+ },
+ r: {
+ v: stats['disk_read_rate']
}
},
networkIO: {
- r: {
- v: stats['net_recv_rate']
- },
s: {
v: stats['net_sent_rate']
+ },
+ r: {
+ v: stats['net_recv_rate']
}
}
};
diff --git a/plugins/kimchi/ui/pages/host.html.tmpl b/plugins/kimchi/ui/pages/host.html.tmpl
index d87debc..8bea5b6 100644
--- a/plugins/kimchi/ui/pages/host.html.tmpl
+++ b/plugins/kimchi/ui/pages/host.html.tmpl
@@ -31,145 +31,117 @@
<body>
<div id="host-root-container">
<div class="toolbar">
- <div class="tools">
+ <div class="container">
+ <div class="tools pull-right">
+ <a id="host-button-restart" href="javascript:void(0);"><i class="fa fa-refresh"></i><span>$_("Restart")</span></a>
+ <a id="host-button-shutdown" href="javascript:void(0);"><i class="fa fa-ban"></i><span>$_("Shut down")</span></a>
+ <!-- <a href="javascript:void(0);"><i class="fa fa-desktop"></i><span>$_("Connect")</span></a> -->
+ </div>
</div>
</div>
<div id="host-content-container" class="empty-when-logged-off"></div>
</div>
<script id="host-tmpl" type="kimchi/template">
- <div class="host-panel">
- <div class="logo-container">
- <div class="logo" style="background-image: url({logo});"></div>
- </div>
- <div id="host-info-container" class="info-container">
- <h2 class="hostname">{hostname}</h2>
- <div class="action-panel">
- <button id="host-button-shutdown" class="btn-normal-1 stop">
- <div class="button-icon action-icon-stop"></div>
- $_("Shut down")
- </button>
- <button id="host-button-restart" class="btn-normal-1 restart">
- <div class="button-icon action-icon-restart"></div>
- $_("Restart")
- </button>
- <button class="btn-normal-1 connect" disabled="disabled">
- <div class="button-icon action-icon-connect"></div>
- $_("Connect")
- </button>
- </div>
- <div class="host-section">
- <h3 class="section-header"
- aria-expanded="false"
- aria-controls="content-sys-info">
- $_("Basic Information")
- </h3>
- <div id="content-sys-info" class="section-content">
- <div class="section-row">
- <div class="section-label">$_("OS Distro")</div>
- <div class="section-value">{os_distro}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("OS Version")</div>
- <div class="section-value">{os_version}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("OS Code Name")</div>
- <div class="section-value">{os_codename}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Processor")</div>
- <div class="section-value">{cpu_model}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("CPU(s)")</div>
- <div class="section-value">{cpus}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Memory")</div>
- <div class="section-value">{memory}</div>
+<div class="host-dashboard">
+ <div class="container">
+ <div id="alert-container"></div>
+ <div id="content-sys-statistics" class="row">
+ <div class="col-md-3">
+ <div id="cpu-dashboard">
+ <h3 class="section-label">$_("CPU")</h3>
+ <div class="section-value">
+ <div id="container-chart-cpu" class="inline-block"></div>
</div>
</div>
</div>
- <div class="host-section">
- <h3 class="section-header"
- aria-controls="content-sys-statistics">
- $_("System Statistics")
- </h3>
- <div id="content-sys-statistics" class="section-content">
- <div class="section-row">
- <div class="section-label">$_("CPU")</div>
- <div class="section-value">
- <div id="container-chart-cpu" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Memory")</div>
- <div class="section-value">
- <div id="container-chart-memory" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Disk I/O")</div>
- <div class="section-value">
- <div id="container-chart-disk-io" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Network I/O")</div>
- <div class="section-value">
- <div id="container-chart-network-io" class="inline-block"></div>
- </div>
+ <div class="col-md-3">
+ <div id="memory-dashboard">
+ <h3 class="section-label">$_("Memory")</h3>
+ <div class="section-value">
+ <div id="container-chart-memory" class="inline-block"></div>
</div>
</div>
</div>
- <div id="software-update-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-software-update">
- $_("Software Updates")
- </h3>
- <div id="content-software-update" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="software-updates-grid-container"></div>
- <div id="software-updates-progress-container" class="hidden">
- <label for="software-updates-progress-textarea">$_("Update Progress")</label>
- <textarea id="software-updates-progress-textarea" readonly></textarea>
- </div>
- </div>
+ <div class="col-md-3">
+ <div id="disk-dashboard">
+ <h3 class="section-label">$_("Disk I/O")</h3>
+ <div class="section-value">
+ <div id="container-chart-disk-io" class="inline-block"></div>
</div>
</div>
</div>
- <div id="repositories-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-repositories">
- $_("Repositories")
- </h3>
- <div id="content-repositories" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="repositories-grid-container"></div>
- </div>
+ <div class="col-md-3">
+ <div id="network-dashboard">
+ <h3 class="section-label">$_("Network I/O")</h3>
+ <div class="section-value">
+ <div id="container-chart-network-io" class="inline-block"></div>
</div>
</div>
</div>
- <div id="debug-report-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-sys-reports">
- $_("Debug Reports")
- </h3>
- <div id="content-sys-reports" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="available-reports-grid-container"></div>
- </div>
+ </div>
+ </div>
+</div>
+<div class="host-panel">
+ <div class="container">
+ <div id="host-info-container" class="row">
+ <div id="content-sys-info" class="panel panel-default col-md-4">
+ <div class="panel-heading">
+ <h3 class="panel-title">$_("Basic Information")</h3>
+ </div>
+ <div class="panel-body">
+ <dl class="basic-information-list">
+ <dt>{os_distro}</dt>
+ <dd>$_("OS Distro")</dd>
+ <dt>{os_version}</dt>
+ <dd>$_("OS Version")</dd>
+ <dt>{os_codename}</dt>
+ <dd>$_("OS Code Name")</dd>
+ <dt>{cpu_model}</dt>
+ <dd>$_("Processor")</dd>
+ <dt>{cpus}</dt>
+ <dd>$_("CPU(s)")</dd>
+ <dt>{memory}</dt>
+ <dd>$_("Memory")</dd>
+ </dl>
+ </div>
+ </div>
+ <div id="repositories-section" class="panel panel-default col-md-4">
+ <div class="panel-heading">
+ <h3 class="panel-title">$_("Repositories")</h3>
+ </div>
+ <div id="content-repositories" class="panel-body">
+ <div id="repositories-grid-container"></div>
+ </div>
+ </div>
+ <div id="debug-report-section" class="panel panel-default col-md-4">
+ <div class="panel-heading">
+ <h3 class="panel-title">$_("Debug Reports")</h3>
+ </div>
+ <div id="content-sys-reports" class="panel-body">
+ <div id="available-reports-grid-container"></div>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div id="software-update-section" class="panel panel-default col-md-12">
+ <div class="panel-heading">
+ <h3 class="panel-title">$_("Software Updates")</h3>
+ </div>
+ <div id="content-software-update" class="panel panel-default">
+ <div id="software-updates-grid-container"></div>
+ <div id="software-updates-progress-container" class="hidden">
+ <label for="software-updates-progress-textarea">$_("Update Progress")</label>
+ <textarea id="software-updates-progress-textarea" readonly></textarea>
</div>
</div>
</div>
</div>
</div>
+</div>
</script>
-
+<div id="modalWindow" class="modal fade host-modal" tabindex="-1" role="dialog" aria-labelledby="hostsModalLabel" aria-hidden="true">
+</div>
<script type="text/javascript">
kimchi.host_main();
</script>
diff --git a/plugins/kimchi/ui/pages/report-add.html.tmpl b/plugins/kimchi/ui/pages/report-add.html.tmpl
index 25bf0a9..a1085ed 100644
--- a/plugins/kimchi/ui/pages/report-add.html.tmpl
+++ b/plugins/kimchi/ui/pages/report-add.html.tmpl
@@ -22,35 +22,25 @@
#silent _ = t.gettext
#silent _t = t.gettext
<!DOCTYPE html>
-<div id="report-add-window" class="window">
- <header>
- <h1 class="title h1 grey">$_("Generate a New Debug Report")</h1>
- </header>
- <div class="content">
- <form id="form-report-add">
- <section class="form-section">
- <h2>
- <label for="report-name-textbox">$_("Report Name")</label>
- </h2>
- <div class="field">
- <input type="text" class="text" id="report-name-textbox" name="name" />
- <span class="icon-info-circled light-grey c1"></span>
- <span class="info-add-debug-report">
- $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").")
- </span>
- </div>
- </section>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button>
- <button id="button-report-cancel" class="btn-normal close" type="button">
- <span calss="text">$_("Cancel")</span>
- </button>
+<div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title">$_("Generate a New Debug Report")</h4>
+ </div>
+ <div class="modal-body">
+ <form id="form-report-add">
+ <label for="report-name-textbox">$_("Report Name")</label>
+ <div class="form-group">
+ <input type="text" class="form-control" id="report-name-textbox" name="name" />
+ <p class="help-block"><i class="fa fa-info-circle"></i> $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").")
+ </p>
</div>
- </footer>
+ </form>
+ </div>
+ <div class="modal-footer">
+ <button type="button" id="button-report-add" class="btn btn-default">$_("Generate")</button>
+ <button type="button" id="button-report-cancel" class="btn btn-default" data-dismiss="modal">$_("Cancel")</button>
+ </div>
</div>
<script>
kimchi.report_add_main();
-</script>
+</script>
\ No newline at end of file
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index 5a39e63..da861f8 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -122,7 +122,7 @@ class UIConfig(dict):
def __init__(self, paths):
ui_configs = {}
- for sub_dir in ('css', 'fontello', 'js', 'libs', 'images'):
+ for sub_dir in ('css', 'fontawesome', 'js', 'libs', 'images'):
ui_configs['/' + sub_dir] = {
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.join(paths.ui_dir, sub_dir),
diff --git a/ui/Makefile.am b/ui/Makefile.am
index 6be27ed..b820b45 100644
--- a/ui/Makefile.am
+++ b/ui/Makefile.am
@@ -15,7 +15,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-SUBDIRS = css fontello images js libs pages
+SUBDIRS = css fontawesome images js libs pages
uidir = $(datadir)/wok/ui
diff --git a/ui/fontawesome/LICENSE.txt b/ui/fontawesome/LICENSE.txt
new file mode 100644
index 0000000..2f9d8a9
--- /dev/null
+++ b/ui/fontawesome/LICENSE.txt
@@ -0,0 +1,9 @@
+Font license info
+
+## Font Awesome 4.3.0
+
+ Copyright (C) 2012 by Dave Gandy
+
+ Author: Dave Gandy
+ License: Font: SIL OFL 1.1, CSS: MIT License
+ Homepage: http://fontawesome.io
\ No newline at end of file
diff --git a/ui/fontawesome/Makefile.am b/ui/fontawesome/Makefile.am
new file mode 100644
index 0000000..f3c7bff
--- /dev/null
+++ b/ui/fontawesome/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = css
+
+fontawesomedir = $(datadir)/wok/ui/fontawesome
+
+dist_fontawesome_DATA = LICENSE.txt
diff --git a/ui/fontawesome/css/Makefile.am b/ui/fontawesome/css/Makefile.am
new file mode 100644
index 0000000..593d1f0
--- /dev/null
+++ b/ui/fontawesome/css/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cssdir = $(datadir)/wok/ui/fontawesome/css
+
+dist_css_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/fontawesome/css/fontawesome.css b/ui/fontawesome/css/fontawesome.css
new file mode 100644
index 0000000..fe34a85
--- /dev/null
+++ b/ui/fontawesome/css/fontawesome.css
@@ -0,0 +1,2648 @@
+@charset "UTF-8";
+/*!
+ * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: 'FontAwesome';
+ src: url("../../../fontawesome/font/fontawesome-webfont.ttf") format("truetype");
+ font-weight: normal;
+ font-style: normal;
+}
+
+.fa {
+ 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;
+}
+
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.3333333333em;
+ 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.2857142857em;
+ text-align: center;
+}
+
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.1428571429em;
+ list-style-type: none;
+}
+
+.fa-ul > li {
+ position: relative;
+}
+
+.fa-li {
+ position: absolute;
+ left: -2.1428571429em;
+ width: 2.1428571429em;
+ top: 0.1428571429em;
+ text-align: center;
+}
+
+.fa-li.fa-lg {
+ left: -1.8571428571em;
+}
+
+.fa-border {
+ padding: 0.2em 0.25em 0.15em;
+ border: solid 0.08em #eee;
+ border-radius: .1em;
+}
+
+.fa-pull-left {
+ float: left;
+}
+
+.fa-pull-right {
+ float: right;
+}
+
+.fa.fa-pull-left {
+ margin-right: .3em;
+}
+
+.fa.fa-pull-right {
+ margin-left: .3em;
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.fa.pull-left {
+ margin-right: .3em;
+}
+
+.fa.pull-right {
+ margin-left: .3em;
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-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 {
+ -webkit-filter: none;
+ 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;
+}
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "";
+}
+
+.fa-music:before {
+ content: "";
+}
+
+.fa-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 {
+ content: "";
+}
+
+.fa-file-o:before {
+ content: "";
+}
+
+.fa-clock-o:before {
+ content: "";
+}
+
+.fa-road:before {
+ content: "";
+}
+
+.fa-download: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 {
+ 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 {
+ content: "";
+}
+
+.fa-check-circle: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 {
+ content: "";
+}
+
+.fa-gift:before {
+ content: "";
+}
+
+.fa-leaf:before {
+ content: "";
+}
+
+.fa-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-f:before,
+.fa-facebook:before {
+ content: "";
+}
+
+.fa-github:before {
+ content: "";
+}
+
+.fa-unlock:before {
+ content: "";
+}
+
+.fa-credit-card:before {
+ content: "";
+}
+
+.fa-feed:before,
+.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 {
+ content: "";
+}
+
+.fa-arrow-circle-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 {
+ 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 {
+ 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 {
+ 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 {
+ 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,
+.fa-gratipay: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 {
+ 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-y-combinator-square:before,
+.fa-yc-square:before,
+.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-buysellads:before {
+ content: "";
+}
+
+.fa-connectdevelop:before {
+ content: "";
+}
+
+.fa-dashcube:before {
+ content: "";
+}
+
+.fa-forumbee:before {
+ content: "";
+}
+
+.fa-leanpub:before {
+ content: "";
+}
+
+.fa-sellsy:before {
+ content: "";
+}
+
+.fa-shirtsinbulk:before {
+ content: "";
+}
+
+.fa-simplybuilt:before {
+ content: "";
+}
+
+.fa-skyatlas:before {
+ content: "";
+}
+
+.fa-cart-plus:before {
+ content: "";
+}
+
+.fa-cart-arrow-down:before {
+ content: "";
+}
+
+.fa-diamond:before {
+ content: "";
+}
+
+.fa-ship:before {
+ content: "";
+}
+
+.fa-user-secret:before {
+ content: "";
+}
+
+.fa-motorcycle:before {
+ content: "";
+}
+
+.fa-street-view:before {
+ content: "";
+}
+
+.fa-heartbeat:before {
+ content: "";
+}
+
+.fa-venus:before {
+ content: "";
+}
+
+.fa-mars:before {
+ content: "";
+}
+
+.fa-mercury:before {
+ content: "";
+}
+
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "";
+}
+
+.fa-transgender-alt:before {
+ content: "";
+}
+
+.fa-venus-double:before {
+ content: "";
+}
+
+.fa-mars-double:before {
+ content: "";
+}
+
+.fa-venus-mars:before {
+ content: "";
+}
+
+.fa-mars-stroke:before {
+ content: "";
+}
+
+.fa-mars-stroke-v:before {
+ content: "";
+}
+
+.fa-mars-stroke-h:before {
+ content: "";
+}
+
+.fa-neuter:before {
+ content: "";
+}
+
+.fa-genderless:before {
+ content: "";
+}
+
+.fa-facebook-official:before {
+ content: "";
+}
+
+.fa-pinterest-p:before {
+ content: "";
+}
+
+.fa-whatsapp:before {
+ content: "";
+}
+
+.fa-server:before {
+ content: "";
+}
+
+.fa-user-plus:before {
+ content: "";
+}
+
+.fa-user-times:before {
+ content: "";
+}
+
+.fa-hotel:before,
+.fa-bed:before {
+ content: "";
+}
+
+.fa-viacoin:before {
+ content: "";
+}
+
+.fa-train:before {
+ content: "";
+}
+
+.fa-subway:before {
+ content: "";
+}
+
+.fa-medium:before {
+ content: "";
+}
+
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "";
+}
+
+.fa-optin-monster:before {
+ content: "";
+}
+
+.fa-opencart:before {
+ content: "";
+}
+
+.fa-expeditedssl:before {
+ content: "";
+}
+
+.fa-battery-4:before,
+.fa-battery-full:before {
+ content: "";
+}
+
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "";
+}
+
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "";
+}
+
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "";
+}
+
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "";
+}
+
+.fa-mouse-pointer:before {
+ content: "";
+}
+
+.fa-i-cursor:before {
+ content: "";
+}
+
+.fa-object-group:before {
+ content: "";
+}
+
+.fa-object-ungroup:before {
+ content: "";
+}
+
+.fa-sticky-note:before {
+ content: "";
+}
+
+.fa-sticky-note-o:before {
+ content: "";
+}
+
+.fa-cc-jcb:before {
+ content: "";
+}
+
+.fa-cc-diners-club:before {
+ content: "";
+}
+
+.fa-clone:before {
+ content: "";
+}
+
+.fa-balance-scale:before {
+ content: "";
+}
+
+.fa-hourglass-o:before {
+ content: "";
+}
+
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "";
+}
+
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "";
+}
+
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "";
+}
+
+.fa-hourglass:before {
+ content: "";
+}
+
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "";
+}
+
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "";
+}
+
+.fa-hand-scissors-o:before {
+ content: "";
+}
+
+.fa-hand-lizard-o:before {
+ content: "";
+}
+
+.fa-hand-spock-o:before {
+ content: "";
+}
+
+.fa-hand-pointer-o:before {
+ content: "";
+}
+
+.fa-hand-peace-o:before {
+ content: "";
+}
+
+.fa-trademark:before {
+ content: "";
+}
+
+.fa-registered:before {
+ content: "";
+}
+
+.fa-creative-commons:before {
+ content: "";
+}
+
+.fa-gg:before {
+ content: "";
+}
+
+.fa-gg-circle:before {
+ content: "";
+}
+
+.fa-tripadvisor:before {
+ content: "";
+}
+
+.fa-odnoklassniki:before {
+ content: "";
+}
+
+.fa-odnoklassniki-square:before {
+ content: "";
+}
+
+.fa-get-pocket:before {
+ content: "";
+}
+
+.fa-wikipedia-w:before {
+ content: "";
+}
+
+.fa-safari:before {
+ content: "";
+}
+
+.fa-chrome:before {
+ content: "";
+}
+
+.fa-firefox:before {
+ content: "";
+}
+
+.fa-opera:before {
+ content: "";
+}
+
+.fa-internet-explorer:before {
+ content: "";
+}
+
+.fa-tv:before,
+.fa-television:before {
+ content: "";
+}
+
+.fa-contao:before {
+ content: "";
+}
+
+.fa-500px:before {
+ content: "";
+}
+
+.fa-amazon:before {
+ content: "";
+}
+
+.fa-calendar-plus-o:before {
+ content: "";
+}
+
+.fa-calendar-minus-o:before {
+ content: "";
+}
+
+.fa-calendar-times-o:before {
+ content: "";
+}
+
+.fa-calendar-check-o:before {
+ content: "";
+}
+
+.fa-industry:before {
+ content: "";
+}
+
+.fa-map-pin:before {
+ content: "";
+}
+
+.fa-map-signs:before {
+ content: "";
+}
+
+.fa-map-o:before {
+ content: "";
+}
+
+.fa-map:before {
+ content: "";
+}
+
+.fa-commenting:before {
+ content: "";
+}
+
+.fa-commenting-o:before {
+ content: "";
+}
+
+.fa-houzz:before {
+ content: "";
+}
+
+.fa-vimeo:before {
+ content: "";
+}
+
+.fa-black-tie:before {
+ content: "";
+}
+
+.fa-fonticons:before {
+ content: "";
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvbnRhd2Vzb21lLmNzcyIsImZvbnRhd2Vzb21lLnNjc3MiLCJ0aGVtZS1kZWZhdWx0L21vZHVsZXMvX3BhdGguc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvZm9udC1hd2Vzb21lL3Njc3MvX2NvcmUuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvZm9udC1hd2Vzb21lL3Njc3MvX2xhcmdlci5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9mb250LWF3ZXNvbWUvc2Nzcy9fZml4ZWQtd2lkdGguc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvZm9udC1hd2Vzb21lL3Njc3MvX2xpc3Quc2NzcyIsInRoZW1lLWRlZmF1bHQvbW9kdWxlcy9fdmFyaWFibGVzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ZvbnQtYXdlc29tZS9zY3NzL19ib3JkZXJlZC1wdWxsZWQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvZm9udC1hd2Vzb21lL3Njc3MvX2FuaW1hdGVkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2ZvbnQtYXdlc29tZS9zY3NzL19yb3RhdGVkLWZsaXBwZWQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvZm9udC1hd2Vzb21lL3Njc3MvX21peGlucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9mb250LWF3ZXNvbWUvc2Nzcy9fc3RhY2tlZC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9mb250LWF3ZXNvbWUvc2Nzcy9faWNvbnMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUNBakI7OztHQUdHO0FDSEg7Z0NBQ2dDO0FBRWhDO0VBQ0UsMkJBQTJCO0VBQzNCLDBFQUFtRDtFQUNuRCxvQkFBb0I7RUFDcEIsbUJBQW1CO0NGS3BCOztBR1pEO0VBQ0Usc0JBQXNCO0VBQ3RCLDhDQUFvRjtFQUNwRixtQkFBbUI7RUFDbkIscUJBQXFCO0VB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QjtFQUMzQixhTnlIWTtDTXpIYjs7QUFBMEI7OztFQUN6QixhTjZrQlk7Q003a0JiOztBQUEwQjtFQUN6QixhTitla0I7Q00vZW5COztBQUFnQztFQUMvQixhTjZlbUI7Q003ZXBCOztBQUFpQztFQUNoQyxhTnFjZ0I7Q01yY2pCOztBQUE4QjtFQUM3QixhTjhmYTtDTTlmZDs7QUFBMkI7O0VBQzFCLGFOa0pVO0NNbEpYOztBQUF3QjtFQUN2QixhTnNsQmM7Q010bEJmOztBQUE0QjtFQUMzQixhTmlUVztDTWpUWjs7QUFBeUI7RUFDeEIsYU42TmE7Q003TmQ7O0FBQTJCO0VBQzFCLGFObUljO0NNbklmOztBQUE0QjtFQUMzQixhTnVkVztDTXZkWjs7QUFBeUI7RUFDeEIsYU4rS2U7Q00vS2hCOztBQUE2QjtFQUM1QixhTlUwQjtDTVYzQjs7QUFBd0M7RUFDdkMsYU5Zd0I7Q01aekI7O0FBQXNDO0VBQ3JDLGFOMFRZO0NNMVRiOztBQUEwQjtFQUN6QixhTm1ib0I7Q01uYnJCOztBQUFrQzs7RUFDakMsYU40Y2E7Q001Y2Q7O0FBQTJCO0VBQzFCLGFOc2NjO0NNdGNmOztBQUE0QjtFQUMzQixhTjZWZTtDTTdWaEI7O0FBQTZCO0VBQzVCLGFOZ1dXO0NNaFdaOztBQUF5QjtFQUN4QixhTmtPVztDTWxPWjs7QUFBeUI7RUFDeEIsYU44UmlCO0NNOVJsQjs7QUFBK0I7RUFDOUIsYU4rbUJpQjtDTS9tQmxCOztBQUErQjtFQUM5QixhTjZtQmtCO0NNN21CbkI7O0FBQWdDO0VBQy9CLGFOOG1CZ0I7Q005bUJqQjs7QUFBOEI7RUFDN0IsYU5tYmE7Q01uYmQ7O0FBQTJCO0VBQzFCLGFObUJjO0NNbkJmOztBQUE0QjtFQUMzQixhTmdpQlU7Q01oaUJYOztBQUF3QjtFQUN2QixhTmdpQlc7Q01oaUJaOztBQUF5QjtFQUN4QixhTjhDVztDTTlDWjs7QUFBeUI7RUFDeEIsYU44Q2U7Q005Q2hCOztBQUE2QjtFQUM1QixhTjBhWTtDTTFhYjs7QUFBMEI7RUFDekIsYU4rRGE7Q00vRGQ7O0FBQTJCO0VBQzFCLGFOZ09XO0NNaE9aOztBQUF5QjtFQUN4QixhTnNDVztDTXRDWjs7QUFBeUI7RUFDeEIsYU5nVGE7Q01oVGQ7O0FBQTJCO0VBQzFCLGFOOGhCa0I7Q005aEJuQjs7QUFBZ0M7RUFDL0IsYU44aEJpQjtDTTloQmxCOztBQUErQjtFQUM5QixhTnBDaUI7Q01vQ2xCOztBQUErQjtFQUM5QixhTnZDbUI7Q011Q3BCOztBQUFpQztFQUNoQyxhTnJDa0I7Q01xQ25COztBQUFnQztFQUMvQixhTnhDb0I7Q013Q3JCOztBQUFrQztFQUNqQyxhTm9VVztDTXBVWjs7QUFBeUI7O0VBQ3hCLGFONFhjO0NNNVhmOztBQUE0QjtFQUMzQixhTjZSYTtDTTdSZDs7QUFBMkI7RUFDMUIsYU5rbEJtQjtDTWxsQnBCOztBQUFpQzs7O0VBQ2hDLGFOMFlnQjtDTTFZakI7O0FBQThCO0VBQzdCLGFObVlhO0NNbllkOztBQUEyQjtFQUMxQixhTitVaUI7Q00vVWxCOztBQUErQjtFQUM5QixhTm5EYTtDTW1EZDs7QUFBMkI7RUFDMUIsYU44aEJXO0NNOWhCWjs7QUFBeUI7O0VBQ3hCLGFOaVlzQjtDTWpZdkI7O0FBQW9DO0VBQ25DLGFOcWNxQjtDTXJjdEI7O0FBQW1DO0VBQ2xDLGFOdUVxQjtDTXZFdEI7O0FBQW1DO0VBQ2xDLGFOdEJhO0NNc0JkOztBQUEyQjtFQUMxQixhTmlmb0I7Q01qZnJCOztBQUFrQztFQUNqQyxhTmdLb0I7Q01oS3JCOztBQUFrQztFQUNqQyxhTmxCZTtDTWtCaEI7O0FBQTZCO0VBQzVCLGFOc1lXO0NNdFlaOztBQUF5QjtFQUN4QixhTm9YWTtDTXBYYjs7QUFBMEI7RUFDekIsYU5pZlc7Q01qZlo7O0FBQXlCO0VBQ3hCLGFOdU1jO0NNdk1mOztBQUE0QjtFQUMzQixhTjJKbUI7Q00zSnBCOztBQUFpQztFQUNoQyxhTjBlbUI7Q00xZXBCOztBQUFpQztFQUNoQyxhTitIWTtDTS9IYjs7QUFBMEI7RUFDekIsYU5pRW1CO0NNakVwQjs7QUFBaUM7RUFDaEMsYU5pRW9CO0NNakVyQjs7QUFBa0M7RUFDakMsYU5rWWtCO0NNbFluQjs7QUFBZ0M7RUFDL0IsYU42VW1CO0NNN1VwQjs7QUFBaUM7RUFDaEMsYU55Z0JtQjtDTXpnQnBCOztBQUFpQztFQUNoQyxhTm1EbUI7Q01uRHBCOztBQUFpQztFQUNoQyxhTnVZc0I7Q012WXZCOztBQUFvQztFQUNuQyxhTm9Ra0I7Q01wUW5COztBQUFnQztFQUMvQixhTmdHaUI7Q01oR2xCOztBQUErQjtFQUM5QixhTnFnQnFCO0NNcmdCdEI7O0FBQW1DO0VBQ2xDLGFOK0NxQjtDTS9DdEI7O0FBQW1DO0VBQ2xDLGFObkNVO0NNbUNYOztBQUF3QjtFQUN2QixhTmhEaUI7Q01nRGxCOztBQUErQjtFQUM5QixhTmhEa0I7Q01nRG5COztBQUFnQztFQUMvQixhTmhEZTtDTWdEaEI7O0FBQTZCO0VBQzVCLGFOcERpQjtDTW9EbEI7O0FBQStCOztFQUM5QixhTm9hWTtDTXBhYjs7QUFBMEI7RUFDekIsYU4ySGE7Q00zSGQ7O0FBQTJCO0VBQzFCLGFOOEVlO0NNOUVoQjs7QUFBNkI7RUFDNUIsYU5nWFc7Q01oWFo7O0FBQXlCO0VBQ3hCLGFOMlRZO0NNM1RiOztBQUEwQjtFQUN6QixhTmxEZTtDTWtEaEI7O0FBQTZCO0VBQzVCLGFOb0h5QjtDTXBIMUI7O0FBQXVDO0VBQ3RDLGFOMExXO0NNMUxaOztBQUF5QjtFQUN4QixhTnFRVztDTXJRWjs7QUFBeUI7RUFDeEIsYU55Slc7Q016Slo7O0FBQXlCO0VBQ3hCLGFOc0hVO0NNdEhYOztBQUF3QjtFQUN2QixhTnNIZ0I7Q010SGpCOztBQUE4Qjs7RUFDN0IsYU4rRzJCO0NNL0c1Qjs7QUFBeUM7RUFDeEMsYU5pV1k7Q01qV2I7O0FBQTBCO0VBQ3pCLGFOTmU7Q01NaEI7O0FBQTZCO0VBQzVCLGFOa1hhO0NNbFhkOztBQUEyQjtFQUMxQixhTnlEYztDTXpEZjs7QUFBNEI7RUFDM0IsYU51UmE7Q012UmQ7O0FBQTJCO0VBQzFCLGFOaUNpQjtDTWpDbEI7O0FBQStCO0VBQzlCLGFONkJtQjtDTTdCcEI7O0FBQWlDO0VBQ2hDLGFOMFhjO0NNMVhmOztBQUE0QjtFQUMzQixhTnlab0I7Q016WnJCOztBQUFrQztFQUNqQyxhTnNKYTtDTXRKZDs7QUFBMkI7RUFDMUIsYU51SmtCO0NNdkpuQjs7QUFBZ0M7RUFDL0IsYU50RWU7Q01zRWhCOztBQUE2QjtFQUM1QixhTnhFZTtDTXdFaEI7O0FBQTZCOztFQUM1QixhTmhFZ0I7Q01nRWpCOztBQUE4QjtFQUM3QixhTjhmcUI7Q005ZnRCOztBQUFtQztFQUNsQyxhTjBHc0I7Q00xR3ZCOztBQUFvQztFQUNuQyxhTmRtQjtDTWNwQjs7QUFBaUM7RUFDaEMsYU53T1U7Q014T1g7O0FBQXdCOztFQUN2QixhTndDVztDTXhDWjs7QUFBeUI7RUFDeEIsYU42Q2U7Q003Q2hCOztBQUE2QjtFQUM1QixhTndka0I7Q014ZG5COztBQUFnQztFQUMvQixhTnNkb0I7Q010ZHJCOztBQUFrQztFQUNqQyxhTjZhZ0I7Q003YWpCOztBQUE4QjtFQUM3QixhTmdNYztDTWhNZjs7QUFBNEI7RUFDM0IsYU4yWWU7Q00zWWhCOztBQUE2QjtFQUM1QixhTnFQc0I7Q01yUHZCOztBQUFvQztFQUNuQyxhTitjaUI7Q00vY2xCOztBQUErQjtFQUM5QixhTnNGb0I7Q010RnJCOztBQUFrQztFQUNqQyxhTnNZYztDTXRZZjs7QUFBNEI7RUFDM0IsYU5xZWE7Q01yZWQ7O0FBQTJCO0VBQzFCLGFOMkpvQjtDTTNKckI7O0FBQWtDO0VBQ2pDLGFOc2ZhO0NNdGZkOztBQUEyQjtFQUMxQixhTm1PYztDTW5PZjs7QUFBNEI7RUFDM0IsYU5zVFk7Q010VGI7O0FBQTBCO0VBQ3pCLGFONlplO0NNN1poQjs7QUFBNkI7RUFDNUIsYU5wRGlCO0NNb0RsQjs7QUFBK0I7RUFDOUIsYU5vVG1CO0NNcFRwQjs7QUFBaUM7RUFDaEMsYU5zZWM7Q010ZWY7O0FBQTRCOztFQUMzQixhTmdGZTtDTWhGaEI7O0FBQTZCO0VBQzVCLGFOZ0phO0NNaEpkOztBQUEyQjtFQUMxQixhTjBlYTtDTTFlZDs7QUFBMkI7RUFDMUIsYU5nQ2tCO0NNaENuQjs7QUFBZ0M7O0VBQy9CLGFOOFZVO0NNOVZYOztBQUF3QjtFQUN2QixhTndLWTtDTXhLYjs7QUFBMEI7RUFDekIsYU52RGU7Q011RGhCOztBQUE2QjtFQUM1QixhTjlFVztDTThFWjs7QUFBeUI7RUFDeEIsYU52QmtCO0NNdUJuQjs7QUFBZ0M7RUFDL0IsYU4ySm1CO0NNM0pwQjs7QUFBaUM7RUFDaEMsYU55SmtCO0NNekpuQjs7QUFBZ0M7RUFDL0IsYU4wSmdCO0NNMUpqQjs7QUFBOEI7RUFDN0IsYU5zSmtCO0NNdEpuQjs7QUFBZ0M7RUFDL0IsYU41SHdCO0NNNEh6Qjs7QUFBc0M7RUFDckMsYU54SHlCO0NNd0gxQjs7QUFBdUM7RUFDdEMsYU54SHNCO0NNd0h2Qjs7QUFBb0M7RUFDbkMsYU5oSXdCO0NNZ0l6Qjs7QUFBc0M7RUFDckMsYU5xSVk7Q01ySWI7O0FBQTBCO0VBQ3pCLGFONGZhO0NNNWZkOztBQUEyQjtFQUMxQixhTnNhWTtDTXRhYjs7QUFBMEI7RUFDekIsYU4wRmE7Q00xRmQ7O0FBQTJCO0VBQzFCLGFOM0VnQjtDTTJFakI7O0FBQThCO0VBQzdCLGFOekhpQjtDTXlIbEI7O0FBQStCOztFQUM5QixhTitkWTtDTS9kYjs7QUFBMEI7O0VBQ3pCLGFOOE1XO0NNOU1aOztBQUF5QjtFQUN4QixhTmRZO0NNY2I7O0FBQTBCO0VBQ3pCLGFONEZZO0NNNUZiOztBQUEwQjs7RUFDekIsYU44VWU7Q005VWhCOztBQUE2Qjs7RUFDNUIsYU5nRmM7Q01oRmY7O0FBQTRCO0VBQzNCLGFOMlFnQjtDTTNRakI7O0FBQThCOztFQUM3QixhTjBGZTtDTTFGaEI7O0FBQTZCO0VBQzVCLGFOeVhhO0NNelhkOztBQUEyQjs7O0VBQzFCLGFOdEhXO0NNc0haOztBQUF5QjtFQUN4QixhTjRNYztDTTVNZjs7QUFBNEI7RUFDM0IsYU4wTWM7Q00xTWY7O0FBQTRCO0VBQzNCLGFOd1lvQjtDTXhZckI7O0FBQWtDO0VBQ2pDLGFOb2NnQjtDTXBjakI7O0FBQThCO0VBQzdCLGFOK1lZO0NNL1liOztBQUEwQjtFQUN6QixhTjhNWTtDTTlNYjs7QUFBMEI7RUFDekIsYU5zYlk7Q010YmI7O0FBQTBCO0VBQ3pCLGFOZ1JnQjtDTWhSakI7O0FBQThCO0VBQzdCLGFOaVJ1QjtDTWpSeEI7O0FBQXFDO0VBQ3BDLGFOK0d5QjtDTS9HMUI7O0FBQXVDO0VBQ3RDLGFONkdrQjtDTTdHbkI7O0FBQWdDO0VBQy9CLGFOc09ZO0NNdE9iOztBQUEwQjtFQUN6QixhTi9FaUI7Q00rRWxCOztBQUErQjtFQUM5QixhTnpFZTtDTXlFaEI7O0FBQTZCO0VBQzVCLGFOaEZpQjtDTWdGbEI7O0FBQStCO0VBQzlCLGFOaEZrQjtDTWdGbkI7O0FBQWdDO0VBQy9CLGFONUJjO0NNNEJmOztBQUE0Qjs7RUFDM0IsYU5zVlc7Q010Vlo7O0FBQXlCOztFQUN4QixhTjJWZ0I7Q00zVmpCOztBQUE4Qjs7RUFDN0IsYU55VmU7Q016VmhCOztBQUE2QjtFQUM1QixhTlVlO0NNVmhCOztBQUE2QjtFQUM1QixhTmlMZTtDTWpMaEI7O0FBQTZCOztFQUM1QixhTmtiVztDTWxiWjs7QUFBeUI7O0VBQ3hCLGFONkVZO0NNN0ViOztBQUEwQjs7RUFDekIsYU42WGlCO0NNN1hsQjs7QUFBK0I7RUFDOUIsYU5uQ2dCO0NNbUNqQjs7QUFBOEI7RUFDN0IsYU5oQ2lCO0NNZ0NsQjs7QUFBK0I7O0VBQzlCLGFOdkhXO0NNdUhaOztBQUF5QjtFQUN4QixhTm1VYztDTW5VZjs7QUFBNEI7RUFDM0IsYU55YWU7Q016YWhCOztBQUE2Qjs7RUFDNUIsYU54RGdCO0NNd0RqQjs7QUFBOEI7RUFDN0IsYU5vS2tCO0NNcEtuQjs7QUFBZ0M7RUFDL0IsYU5JZTtDTUpoQjs7QUFBNkI7RUFDNUIsYU50RHFCO0NNc0R0Qjs7QUFBbUM7RUFDbEMsYU50RG1CO0NNc0RwQjs7QUFBaUM7RUFDaEMsYU44YWM7Q005YWY7O0FBQTRCO0VBQzNCLGFOaVdrQjtDTWpXbkI7O0FBQWdDO0VBQy9CLGFOMFdlO0NNMVdoQjs7QUFBNkI7RUFDNUIsYU43SWE7Q002SWQ7O0FBQTJCO0VBQzFCLGFOdERhO0NNc0RkOztBQUEyQjtFQUMxQixhTi9CYztDTStCZjs7QUFBNEI7RUFDM0IsYU44QmtCO0NNOUJuQjs7QUFBZ0M7RUFDL0IsYU43SGlCO0NNNkhsQjs7QUFBK0I7RUFDOUIsYU55R2lCO0NNekdsQjs7QUFBK0I7RUFDOUIsYU41TWdCO0NNNE1qQjs7QUFBOEI7RUFDN0IsYU55TGE7Q016TGQ7O0FBQTJCO0VBQzFCLGFOVWtCO0NNVm5COztBQUFnQztFQUMvQixhTjFKVztDTTBKWjs7QUFBeUI7RUFDeEIsYU42RWU7Q003RWhCOztBQUE2QjtFQUM1QixhTmdQa0I7Q01oUG5COztBQUFnQztFQUMvQixhTjdNd0I7Q002TXpCOztBQUFzQztFQUNyQyxhTjdNeUI7Q002TTFCOztBQUF1QztFQUN0QyxhTjdNc0I7Q002TXZCOztBQUFvQztFQUNuQyxhTmpOd0I7Q01pTnpCOztBQUFzQztFQUNyQyxhTjdNaUI7Q002TWxCOztBQUErQjtFQUM5QixhTjdNa0I7Q002TW5COztBQUFnQztFQUMvQixhTjdNZTtDTTZNaEI7O0FBQTZCO0VBQzVCLGFOak5pQjtDTWlObEI7O0FBQStCO0VBQzlCLGFOM0NjO0NNMkNmOztBQUE0QjtFQUMzQixhTjJIYTtDTTNIZDs7QUFBMkI7RUFDMUIsYU53VmE7Q014VmQ7O0FBQTJCOztFQUMxQixhTmtMYTtDTWxMZDs7QUFBMkI7RUFDMUIsYU4zRmU7Q00yRmhCOztBQUE2QjtFQUM1QixhTjJPaUI7Q00zT2xCOztBQUErQjtFQUM5QixhTjJPa0I7Q00zT25COztBQUFnQztFQUMvQixhTm1UYztDTW5UZjs7QUFBNEI7RUFDM0IsYU5oR2E7Q01nR2Q7O0FBQTJCOztFQUMxQixhTnFQWTtDTXJQYjs7QUFBMEI7RUFDekIsYU42Q2lCO0NNN0NsQjs7QUFBK0I7RUFDOUIsYU5vQmU7Q01wQmhCOztBQUE2QjtFQUM1QixhTnFCb0I7Q01yQnJCOztBQUFrQztFQUNqQyxhTjhSYztDTTlSZjs7QUFBNEI7RUFDM0IsYU55QmM7Q016QmY7O0FBQTRCO0VBQzNCLGFOOEpZO0NNOUpiOztBQUEwQjtFQUN6QixhTnlCYztDTXpCZjs7QUFBNEI7RUFDM0IsYU53R2lCO0NNeEdsQjs7QUFBK0I7RUFDOUIsYU5PYTtDTVBkOztBQUEyQjtFQUMxQixhTktxQjtDTUx0Qjs7QUFBbUM7RUFDbEMsYU44VWU7Q005VWhCOztBQUE2QjtFQUM1QixhTmpHVztDTWlHWjs7QUFBeUI7O0VBQ3hCLGFOeU9nQjtDTXpPakI7O0FBQThCOzs7RUFDN0IsYU44U2tCO0NNOVNuQjs7QUFBZ0M7RUFDL0IsYU4ySHFCO0NNM0h0Qjs7QUFBbUM7RUFDbEMsYU5oRlc7Q01nRlo7O0FBQXlCO0VBQ3hCLGFOckdnQjtDTXFHakI7O0FBQThCOztFQUM3QixhTm5JbUI7Q01tSXBCOztBQUFpQztFQUNoQyxhTmtOZTtDTWxOaEI7O0FBQTZCO0VBQzVCLGFOK0VXO0NNL0VaOztBQUF5QjtFQUN4QixhTm5Ea0I7Q01tRG5COztBQUFnQztFQUMvQixhTndUa0I7Q014VG5COztBQUFnQztFQUMvQixhTm1UZ0I7Q01uVGpCOztBQUE4QjtFQUM3QixhTjFEYTtDTTBEZDs7QUFBMkI7RUFDMUIsYU55TW1CO0NNek1wQjs7QUFBaUM7RUFDaEMsYU40SWlCO0NNNUlsQjs7QUFBK0I7RUFDOUIsYU40SXVCO0NNNUl4Qjs7QUFBcUM7RUFDcEMsYU53UGE7Q014UGQ7O0FBQTJCO0VBQzFCLGFOektpQjtDTXlLbEI7O0FBQStCO0VBQzlCLGFObEJ3QjtDTWtCekI7O0FBQXNDO0VBQ3JDLGFOMk5hO0NNM05kOztBQUEyQjtFQUMxQixhTmdJYTtDTWhJZDs7QUFBMkI7RUFDMUIsYU4zSTBCO0NNMkkzQjs7QUFBd0M7RUFDdkMsYU4zSTJCO0NNMkk1Qjs7QUFBeUM7RUFDeEMsYU4zSXdCO0NNMkl6Qjs7QUFBc0M7RUFDckMsYU4vSTBCO0NNK0kzQjs7QUFBd0M7RUFDdkMsYU51RFk7Q012RGI7O0FBQTBCO0VBQ3pCLGFOcEdXO0NNb0daOztBQUF5QjtFQUN4QixhTnpRYTtDTXlRZDs7QUFBMkI7RUFDMUIsYU5pV2lCO0NNaldsQjs7QUFBK0I7RUFDOUIsYU43TGU7Q002TGhCOztBQUE2QjtFQUM1QixhTmxGaUI7Q01rRmxCOztBQUErQjtFQUM5QixhTmxGaUI7Q01rRmxCOztBQUErQjtFQUM5QixhTm1OaUI7Q01uTmxCOztBQUErQjtFQUM5QixhTjRLa0I7Q001S25COztBQUFnQztFQUMvQixhTnNUYTtDTXRUZDs7QUFBMkI7RUFDMUIsYU4ySG1CO0NNM0hwQjs7QUFBaUM7RUFDaEMsYU4ySHFCO0NNM0h0Qjs7QUFBbUM7RUFDbEMsYU4wRWU7Q00xRWhCOztBQUE2QjtFQUM1QixhTndFaUI7Q014RWxCOztBQUErQjtFQUM5QixhTmhLbUI7Q01nS3BCOztBQUFpQztFQUNoQyxhTnVKb0I7Q012SnJCOztBQUFrQztFQUNqQyxhTjdFMkI7Q002RTVCOztBQUF5QztFQUN4QyxhTjBObUI7Q00xTnBCOztBQUFpQztFQUNoQyxhTi9IYztDTStIZjs7QUFBNEI7O0VBQzNCLGFOM0wwQjtDTTJMM0I7O0FBQXdDOztFQUN2QyxhTnpMd0I7Q015THpCOztBQUFzQzs7RUFDckMsYU4zTDJCO0NNMkw1Qjs7QUFBeUM7O0VBQ3hDLGFONUZVO0NNNEZYOztBQUF3QjtFQUN2QixhTjFCVTtDTTBCWDs7QUFBd0I7O0VBQ3ZCLGFOK1VVO0NNL1VYOztBQUF3Qjs7RUFDdkIsYU51Q1U7Q012Q1g7O0FBQXdCOzs7O0VBQ3ZCLGFOOENVO0NNOUNYOztBQUF3Qjs7O0VBQ3ZCLGFOZ01VO0NNaE1YOztBQUF3Qjs7RUFDdkIsYU5nRFU7Q01oRFg7O0FBQXdCOztFQUN2QixhTjNOVTtDTTJOWDs7QUFBd0I7RUFDdkIsYU43RVc7Q002RVo7O0FBQXlCO0VBQ3hCLGFOakVnQjtDTWlFakI7O0FBQThCO0VBQzdCLGFOZ09xQjtDTWhPdEI7O0FBQW1DO0VBQ2xDLGFOZ09zQjtDTWhPdkI7O0FBQW9DO0VBQ25DLGFOZ09zQjtDTWhPdkI7O0FBQW9DO0VBQ25DLGFOZ091QjtDTWhPeEI7O0FBQXFDO0VBQ3BDLGFObU91QjtDTW5PeEI7O0FBQXFDO0VBQ3BDLGFObU93QjtDTW5PekI7O0FBQXNDO0VBQ3JDLGFOd1JnQjtDTXhSakI7O0FBQThCO0VBQzdCLGFOb1JrQjtDTXBSbkI7O0FBQWdDO0VBQy9CLGFOeVdxQjtDTXpXdEI7O0FBQW1DO0VBQ2xDLGFOc1djO0NNdFdmOztBQUE0QjtFQUMzQixhTjRWVztDTTVWWjs7QUFBeUI7RUFDeEIsYU40VmtCO0NNNVZuQjs7QUFBZ0M7RUFDL0IsYU5vV21CO0NNcFdwQjs7QUFBaUM7RUFDaEMsYU45SGM7Q004SGY7O0FBQTRCO0VBQzNCLGFOb09xQjtDTXBPdEI7O0FBQW1DO0VBQ2xDLGFOa0JnQjtDTWxCakI7O0FBQThCO0VBQzdCLGFObEVhO0NNa0VkOztBQUEyQjtFQUMxQixhTi9UVTtDTStUWDs7QUFBd0I7RUFDdkIsYU4zUGdCO0NNMlBqQjs7QUFBOEI7RUFDN0IsYU4zUHVCO0NNMlB4Qjs7QUFBcUM7RUFDcEMsYU5tU2E7Q01uU2Q7O0FBQTJCO0VBQzFCLGFObVNvQjtDTW5TckI7O0FBQWtDO0VBQ2pDLGFOaURzQjtDTWpEdkI7O0FBQW9DO0VBQ25DLGFObURvQjtDTW5EckI7O0FBQWtDO0VBQ2pDLGFOZ0RzQjtDTWhEdkI7O0FBQW9DO0VBQ25DLGFOZ0R1QjtDTWhEeEI7O0FBQXFDO0VBQ3BDLGFOdFRZO0NNc1RiOztBQUEwQjtFQUN6QixhTnVVYztDTXZVZjs7QUFBNEI7RUFDM0IsYU5sVWM7Q01rVWY7O0FBQTRCO0VBQzNCLGFObUNZO0NNbkNiOztBQUEwQjtFQUN6QixhTmhKZTtDTWdKaEI7O0FBQTZCO0VBQzVCLGFOMExZO0NNMUxiOztBQUEwQjtFQUN6QixhTnhFaUI7Q013RWxCOztBQUErQjtFQUM5QixhTmdSYTtDTWhSZDs7QUFBMkI7RUFDMUIsYU5uSGE7Q01tSGQ7O0FBQTJCO0VBQzFCLGFONkNXO0NNN0NaOztBQUF5Qjs7RUFDeEIsYU5qRGU7Q01pRGhCOztBQUE2QjtFQUM1QixhTm1PWTtDTW5PYjs7QUFBMEI7RUFDekIsYU5vRWE7Q01wRWQ7O0FBQTJCO0VBQzFCLGFObFVjO0NNa1VmOztBQUE0QjtFQUMzQixhTnJRVTtDTXFRWDs7QUFBd0I7RUFDdkIsYU42U1M7Q003U1Y7O0FBQXVCO0VBQ3RCLGFOa1RZO0NNbFRiOztBQUEwQjtFQUN6QixhTmtJYTtDTWxJZDs7QUFBMkI7RUFDMUIsYU4rRWdCO0NNL0VqQjs7QUFBOEI7RUFDN0IsYU5vTXFCO0NNcE10Qjs7QUFBbUM7RUFDbEMsYU5uVTJCO0NNbVU1Qjs7QUFBeUM7RUFDeEMsYU5yVTBCO0NNcVUzQjs7QUFBd0M7O0VBQ3ZDLGFOdlAwQjtDTXVQM0I7O0FBQXdDO0VBQ3ZDLGFOckttQjtDTXFLcEI7O0FBQWlDO0VBQ2hDLGFONlNpQjtDTTdTbEI7O0FBQStCO0VBQzlCLGFOaVNtQjtDTWpTcEI7O0FBQWlDOztFQUNoQyxhTmlRVTtDTWpRWDs7QUFBd0I7RUFDdkIsYU5xR29CO0NNckdyQjs7QUFBa0M7RUFDakMsYU5xTG9CO0NNckxyQjs7QUFBa0M7RUFDakMsYU5tS1k7Q01uS2I7O0FBQTBCO0VBQ3pCLGFOaEtzQjtDTWdLdkI7O0FBQW9DO0VBQ25DLGFOMlNnQjtDTTNTakI7O0FBQThCO0VBQzdCLGFONkRhO0NNN0RkOztBQUEyQjs7O0VBQzFCLGFOc1FpQjtDTXRRbEI7O0FBQStCOztFQUM5QixhTjFFcUI7Q00wRXRCOztBQUFtQztFQUNsQyxhTjZTWTtDTTdTYjs7QUFBMEI7RUFDekIsYU5oRmE7Q01nRmQ7O0FBQTJCO0VBQzFCLGFOeUdhO0NNekdkOztBQUEyQjtFQUMxQixhTnlHb0I7Q016R3JCOztBQUFrQztFQUNqQyxhTm1NeUI7Q01uTTFCOztBQUF1QztFQUN0QyxhTmlNa0I7Q01qTW5COztBQUFnQztFQUMvQixhTjdMZ0I7Q002TGpCOztBQUE4QjtFQUM3QixhTjFMVztDTTBMWjs7QUFBeUI7RUFDeEIsYU53RWlCO0NNeEVsQjs7QUFBK0I7RUFDOUIsYU53RXFCO0NNeEV0Qjs7QUFBbUM7RUFDbEMsYU52TGE7Q011TGQ7O0FBQTJCO0VBQzFCLGFOakNhO0NNaUNkOztBQUEyQjtFQUMxQixhTjVCZTtDTTRCaEI7O0FBQTZCO0VBQzVCLGFON0pVO0NNNkpYOztBQUF3QjtFQUN2QixhTnZTZTtDTXVTaEI7O0FBQTZCO0VBQzVCLGFOcFBZO0NNb1BiOztBQUEwQjtFQUN6QixhTnNEVTtDTXREWDs7QUFBd0I7RUFDdkIsYU4rSlk7Q00vSmI7O0FBQTBCO0VBQ3pCLGFOak5XO0NNaU5aOztBQUF5QjtFQUN4QixhTmpOWTtDTWlOYjs7QUFBMEI7RUFDekIsYU5uVWM7Q01tVWY7O0FBQTRCO0VBQzNCLGFOblVxQjtDTW1VdEI7O0FBQW1DO0VBQ2xDLGFOc0tZO0NNdEtiOztBQUEwQjtFQUN6QixhTnNLbUI7Q010S3BCOztBQUFpQztFQUNoQyxhTmtGYztDTWxGZjs7QUFBNEI7O0VBQzNCLGFObFNVO0NNa1NYOztBQUF3Qjs7RUFDdkIsYU4wTFc7Q00xTFo7O0FBQXlCO0VBQ3hCLGFOd05XO0NNeE5aOztBQUF5QjtFQUN4QixhTnFKYztDTXJKZjs7QUFBNEI7RUFDM0IsYU5sTmlCO0NNa05sQjs7QUFBK0I7RUFDOUIsYU4rSWlCO0NNL0lsQjs7QUFBK0I7RUFDOUIsYU54TmU7Q013TmhCOztBQUE2QjtFQUM1QixhTnBLaUI7Q01vS2xCOztBQUErQjtFQUM5QixhTjdKa0I7Q002Sm5COztBQUFnQztFQUMvQixhTjFLbUI7Q00wS3BCOztBQUFpQztFQUNoQyxhTnBLd0I7Q01vS3pCOztBQUFzQzs7O0VBQ3JDLGFOM0ttQjtDTTJLcEI7O0FBQWlDOztFQUNoQyxhTmhMcUI7Q01nTHRCOztBQUFtQzs7RUFDbEMsYU5oTG1CO0NNZ0xwQjs7QUFBaUM7O0VBQ2hDLGFOcEttQjtDTW9LcEI7O0FBQWlDO0VBQ2hDLGFOakxrQjtDTWlMbkI7O0FBQWdDO0VBQy9CLGFOK09XO0NNL09aOztBQUF5QjtFQUN4QixhTi9QYztDTStQZjs7QUFBNEI7RUFDM0IsYU4vRGU7Q00rRGhCOztBQUE2Qjs7Ozs7RUFDNUIsYU5oRGdCO0NNZ0RqQjs7QUFBOEI7RUFDN0IsYU45UXFCO0NNOFF0Qjs7QUFBbUM7O0VBQ2xDLGFOMkRZO0NNM0RiOztBQUEwQjs7RUFDekIsYU52TmE7Q011TmQ7O0FBQTJCO0VBQzFCLGFOdElpQjtDTXNJbEI7O0FBQStCO0VBQzlCLGFOeElVO0NNd0lYOztBQUF3Qjs7O0VBQ3ZCLGFOekhrQjtDTXlIbkI7O0FBQWdDO0VBQy9CLGFObUtvQjtDTW5LckI7O0FBQWtDO0VBQ2pDLGFONkNTO0NNN0NWOztBQUF1Qjs7RUFDdEIsYU4yT2E7Q00zT2Q7O0FBQTJCOztFQUMxQixhTlVrQjtDTVZuQjs7QUFBZ0M7O0VBQy9CLGFOVW9CO0NNVnJCOztBQUFrQztFQUNqQyxhTjNHYztDTTJHZjs7QUFBNEI7RUFDM0IsYU56UmtCO0NNeVJuQjs7QUFBZ0M7RUFDL0IsYU5sSGE7Q01rSGQ7O0FBQTJCO0VBQzFCLGFOUWdCO0NNUmpCOztBQUE4QjtFQUM3QixhTmtHYztDTWxHZjs7QUFBNEI7RUFDM0IsYU4rRWdCO0NNL0VqQjs7QUFBOEI7RUFDN0IsYU4rRXVCO0NNL0V4Qjs7QUFBcUM7RUFDcEMsYU4vVlc7Q00rVlo7O0FBQXlCOztFQUN4QixhTm5LZTtDTW1LaEI7O0FBQTZCO0VBQzVCLGFOd0xVO0NNeExYOztBQUF3QjtFQUN2QixhTjFXaUI7Q00wV2xCOztBQUErQjtFQUM5QixhTnNCVztDTXRCWjs7QUFBeUI7RUFDeEIsYU4yRmlCO0NNM0ZsQjs7QUFBK0I7RUFDOUIsYU55TGE7Q016TGQ7O0FBQTJCO0VBQzFCLGFOME9XO0NNMU9aOztBQUF5QjtFQUN4QixhTm5Ca0I7Q01tQm5COztBQUFnQztFQUMvQixhTjJOVztDTTNOWjs7QUFBeUI7RUFDeEIsYU4zVmlCO0NNMlZsQjs7QUFBK0I7RUFDOUIsYU5IYTtDTUdkOztBQUEyQjtFQUMxQixhTnZKb0I7Q011SnJCOztBQUFrQztFQUNqQyxhTmxVYztDTWtVZjs7QUFBNEI7RUFDM0IsYU50VW9CO0NNc1VyQjs7QUFBa0M7RUFDakMsYU56VWtCO0NNeVVuQjs7QUFBZ0M7RUFDL0IsYU41VWM7Q000VWY7O0FBQTRCO0VBQzNCLGFOeFVnQjtDTXdVakI7O0FBQThCO0VBQzdCLGFOeFVnQjtDTXdVakI7O0FBQThCO0VBQzdCLGFON1hpQjtDTTZYbEI7O0FBQStCO0VBQzlCLGFON1htQjtDTTZYcEI7O0FBQWlDO0VBQ2hDLGFONkpZO0NNN0piOztBQUEwQjtFQUN6QixhTjFSZ0I7Q00wUmpCOztBQUE4QjtFQUM3QixhTjNaUztDTTJaVjs7QUFBdUI7RUFDdEIsYU45T2lCO0NNOE9sQjs7QUFBK0I7RUFDOUIsYU56QmtCO0NNeUJuQjs7QUFBZ0M7RUFDL0IsYU5oWW9CO0NNZ1lyQjs7QUFBa0M7RUFDakMsYU5qYmlCO0NNaWJsQjs7QUFBK0I7RUFDOUIsYU5aZ0I7Q01ZakI7O0FBQThCO0VBQzdCLGFON0ZpQjtDTTZGbEI7O0FBQStCO0VBQzlCLGFOM0dhO0NNMkdkOztBQUEyQjtFQUMxQixhTjNHb0I7Q00yR3JCOztBQUFrQztFQUNqQyxhTjBJaUI7Q00xSWxCOztBQUErQjtFQUM5QixhTjBJZ0I7Q00xSWpCOztBQUE4QjtFQUM3QixhTjFZYztDTTBZZjs7QUFBNEI7RUFDM0IsYU52WFU7Q011WFg7O0FBQXdCO0VBQ3ZCLGFOM0hjO0NNMkhmOztBQUE0QjtFQUMzQixhTnRjZ0I7Q01zY2pCOztBQUE4QjtFQUM3QixhTm5XUztDTW1XVjs7QUFBdUI7OztFQUN0QixhTjFJVTtDTTBJWDs7QUFBd0I7RUFDdkIsYU54RWU7Q013RWhCOztBQUE2QjtFQUM1QixhTjVYaUI7Q000WGxCOztBQUErQjtFQUM5QixhTmpUcUI7Q01pVHRCOztBQUFtQztFQUNsQyxhTnBTZTtDTW9TaEI7O0FBQTZCO0VBQzVCLGFObE5lO0NNa05oQjs7QUFBNkI7RUFDNUIsYU52SGM7Q011SGY7O0FBQTRCO0VBQzNCLGFOMEJhO0NNMUJkOztBQUEyQjtFQUMxQixhTnNDbUI7Q010Q3BCOztBQUFpQztFQUNoQyxhTjBDa0I7Q00xQ25COztBQUFnQztFQUMvQixhTjJDZTtDTTNDaEI7O0FBQTZCO0VBQzVCLGFOaFhnQjtDTWdYakI7O0FBQThCO0VBQzdCLGFObFhzQjtDTWtYdkI7O0FBQW9DO0VBQ25DLGFOdlNjO0NNdVNmOztBQUE0QjtFQUMzQixhTitCVztDTS9CWjs7QUFBeUI7RUFDeEIsYU55SmtCO0NNekpuQjs7QUFBZ0M7RUFDL0IsYU52RWlCO0NNdUVsQjs7QUFBK0I7RUFDOUIsYU42RWtCO0NNN0VuQjs7QUFBZ0M7RUFDL0IsYU41S2dCO0NNNEtqQjs7QUFBOEI7RUFDN0IsYU53Slk7Q014SmI7O0FBQTBCO0VBQ3pCLGFOakdXO0NNaUdaOztBQUF5QjtFQUN4QixhTnhGYztDTXdGZjs7QUFBNEI7O0VBQzNCLGFObUhrQjtDTW5IbkI7O0FBQWdDO0VBQy9CLGFObUhzQjtDTW5IdkI7O0FBQW9DO0VBQ25DLGFOb0ptQjtDTXBKcEI7O0FBQWlDO0VBQ2hDLGFOckdrQjtDTXFHbkI7O0FBQWdDO0VBQy9CLGFObUppQjtDTW5KbEI7O0FBQStCO0VBQzlCLGFOdEdrQjtDTXNHbkI7O0FBQWdDO0VBQy9CLGFOckdvQjtDTXFHckI7O0FBQWtDO0VBQ2pDLGFOdkdvQjtDTXVHckI7O0FBQWtDO0VBQ2pDLGFOakZhO0NNaUZkOztBQUEyQjtFQUMxQixhTmpPaUI7Q01pT2xCOztBQUErQjtFQUM5QixhTjFSd0I7Q00wUnpCOztBQUFzQztFQUNyQyxhTnBEa0I7Q01vRG5COztBQUFnQztFQUMvQixhTnlKZTtDTXpKaEI7O0FBQTZCO0VBQzVCLGFOQ2E7Q01EZDs7QUFBMkI7RUFDMUIsYU5tSWdCO0NNbklqQjs7QUFBOEI7RUFDN0IsYU5vSWlCO0NNcElsQjs7QUFBK0I7O0VBQzlCLGFON2JVO0NNNmJYOztBQUF3QjtFQUN2QixhTnVJYztDTXZJZjs7QUFBNEI7RUFDM0IsYU5nR1k7Q01oR2I7O0FBQTBCO0VBQ3pCLGFOMERhO0NNMURkOztBQUEyQjtFQUMxQixhTmhIYTtDTWdIZDs7QUFBMkI7O0VBQzFCLGFOMEptQjtDTTFKcEI7O0FBQWlDO0VBQ2hDLGFOdEZvQjtDTXNGckI7O0FBQWtDO0VBQ2pDLGFOMUZlO0NNMEZoQjs7QUFBNkI7RUFDNUIsYU5oVG1CO0NNZ1RwQjs7QUFBaUM7O0VBQ2hDLGFOMWNtQjtDTTBjcEI7O0FBQWlDOztFQUNoQyxhTnhjNkI7Q013YzlCOztBQUEyQzs7RUFDMUMsYU4zY21CO0NNMmNwQjs7QUFBaUM7O0VBQ2hDLGFOM2NzQjtDTTJjdkI7O0FBQW9DOztFQUNuQyxhTi9jb0I7Q00rY3JCOztBQUFrQztFQUNqQyxhTjFHb0I7Q00wR3JCOztBQUFrQztFQUNqQyxhTmhNZTtDTWdNaEI7O0FBQTZCO0VBQzVCLGFOdkdtQjtDTXVHcEI7O0FBQWlDO0VBQ2hDLGFOdkdxQjtDTXVHdEI7O0FBQW1DO0VBQ2xDLGFObUNrQjtDTW5DbkI7O0FBQWdDO0VBQy9CLGFObUNvQjtDTW5DckI7O0FBQWtDO0VBQ2pDLGFOMVphO0NNMFpkOztBQUEyQjtFQUMxQixhTjdacUI7Q002WnRCOztBQUFtQztFQUNsQyxhTi9YWTtDTStYYjs7QUFBMEI7RUFDekIsYU5yZW9CO0NNcWVyQjs7QUFBa0M7RUFDakMsYU43TWtCO0NNNk1uQjs7QUFBZ0M7O0VBQy9CLGFON01zQjtDTTZNdkI7O0FBQW9DOztFQUNuQyxhTmhOcUI7Q01nTnRCOztBQUFtQzs7RUFDbEMsYU5sTm9CO0NNa05yQjs7QUFBa0M7RUFDakMsYU52TmdCO0NNdU5qQjs7QUFBOEI7O0VBQzdCLGFOdE9rQjtDTXNPbkI7O0FBQWdDOztFQUMvQixhTjFPbUI7Q00wT3BCOztBQUFpQztFQUNoQyxhTnZPc0I7Q011T3ZCOztBQUFvQztFQUNuQyxhTmpQb0I7Q01pUHJCOztBQUFrQztFQUNqQyxhTnhPbUI7Q013T3BCOztBQUFpQztFQUNoQyxhTjVPcUI7Q000T3RCOztBQUFtQztFQUNsQyxhTjlPbUI7Q004T3BCOztBQUFpQztFQUNoQyxhTjZEZ0I7Q003RGpCOztBQUE4QjtFQUM3QixhTm5FaUI7Q01tRWxCOztBQUErQjtFQUM5QixhTnRYdUI7Q01zWHhCOztBQUFxQztFQUNwQyxhTjdRUztDTTZRVjs7QUFBdUI7RUFDdEIsYU43UWdCO0NNNlFqQjs7QUFBOEI7RUFDN0IsYU5nRWtCO0NNaEVuQjs7QUFBZ0M7RUFDL0IsYU4vSG9CO0NNK0hyQjs7QUFBa0M7RUFDakMsYU4vSDJCO0NNK0g1Qjs7QUFBeUM7RUFDeEMsYU5uUmlCO0NNbVJsQjs7QUFBK0I7RUFDOUIsYU4yR2tCO0NNM0duQjs7QUFBZ0M7RUFDL0IsYU56RGE7Q015RGQ7O0FBQTJCO0VBQzFCLGFOL1phO0NNK1pkOztBQUEyQjtFQUMxQixhTmpUYztDTWlUZjs7QUFBNEI7RUFDM0IsYU5sSVk7Q01rSWI7O0FBQTBCO0VBQ3pCLGFOeE53QjtDTXdOekI7O0FBQXNDOztFQUNyQyxhTnNCaUI7Q010QmxCOztBQUErQjtFQUM5QixhTnZZYTtDTXVZZDs7QUFBMkI7RUFDMUIsYU45aUJZO0NNOGlCYjs7QUFBMEI7RUFDekIsYU54aUJhO0NNd2lCZDs7QUFBMkI7RUFDMUIsYU5oZHNCO0NNZ2R2Qjs7QUFBb0M7RUFDbkMsYU5uZHVCO0NNbWR4Qjs7QUFBcUM7RUFDcEMsYU5qZHVCO0NNaWR4Qjs7QUFBcUM7RUFDcEMsYU50ZHVCO0NNc2R4Qjs7QUFBcUM7RUFDcEMsYU52T2U7Q011T2hCOztBQUE2QjtFQUM1QixhTmpMYztDTWlMZjs7QUFBNEI7RUFDM0IsYU5qTGdCO0NNaUxqQjs7QUFBOEI7RUFDN0IsYU5wTFk7Q01vTGI7O0FBQTBCO0VBQ3pCLGFOdkxVO0NNdUxYOztBQUF3QjtFQUN2QixhTjFaaUI7Q00wWmxCOztBQUErQjtFQUM5QixhTjFabUI7Q00wWnBCOztBQUFpQztFQUNoQyxhTnJQWTtDTXFQYjs7QUFBMEI7RUFDekIsYU51RVk7Q012RWI7O0FBQTBCO0VBQ3pCLGFObmZnQjtDTW1makI7O0FBQThCO0VBQzdCLGFOelRnQjtDTXlUakIiLCJmaWxlIjoiZm9udGF3ZXNvbWUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyohXG4gKiAgRm9udCBBd2Vzb21lIDQuMy4wIGJ5IEBkYXZlZ2FuZHkgLSBodHRwOi8vZm9udGF3ZXNvbWUuaW8gLSBAZm9udGF3ZXNvbWVcbiAqICBMaWNlbnNlIC0gaHR0cDovL2ZvbnRhd2Vzb21lLmlvL2xpY2Vuc2UgKEZvbnQ6IFNJTCBPRkwgMS4xLCBDU1M6IE1JVCBMaWNlbnNlKVxuICovXG4vKiBGT05UIFBBVEhcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdGb250QXdlc29tZSc7XG4gIHNyYzogdXJsKFwiLi4vLi4vLi4vZm9udGF3ZXNvbWUvZm9udC8vZm9udGF3ZXNvbWUudHRmXCIpIGZvcm1hdChcInRydWV0eXBlXCIpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbi5mYSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBhdXRvO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuLyogbWFrZXMgdGhlIGZvbnQgMzMlIGxhcmdlciByZWxhdGl2ZSB0byB0aGUgaWNvbiBjb250YWluZXIgKi9cbi5mYS1sZyB7XG4gIGZvbnQtc2l6ZTogMS4zMzMzMzMzMzMzZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjc1ZW07XG4gIHZlcnRpY2FsLWFsaWduOiAtMTUlO1xufVxuXG4uZmEtMngge1xuICBmb250LXNpemU6IDJlbTtcbn1cblxuLmZhLTN4IHtcbiAgZm9udC1zaXplOiAzZW07XG59XG5cbi5mYS00eCB7XG4gIGZvbnQtc2l6ZTogNGVtO1xufVxuXG4uZmEtNXgge1xuICBmb250LXNpemU6IDVlbTtcbn1cblxuLmZhLWZ3IHtcbiAgd2lkdGg6IDEuMjg1NzE0Mjg1N2VtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5mYS11bCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luLWxlZnQ6IDIuMTQyODU3MTQyOWVtO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG5cbi5mYS11bCA+IGxpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZmEtbGkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC0yLjE0Mjg1NzE0MjllbTtcbiAgd2lkdGg6IDIuMTQyODU3MTQyOWVtO1xuICB0b3A6IDAuMTQyODU3MTQyOWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5mYS1saS5mYS1sZyB7XG4gIGxlZnQ6IC0xLjg1NzE0Mjg1NzFlbTtcbn1cblxuLmZhLWJvcmRlciB7XG4gIHBhZGRpbmc6IDAuMmVtIDAuMjVlbSAwLjE1ZW07XG4gIGJvcmRlcjogc29saWQgMC4wOGVtICNlZWU7XG4gIGJvcmRlci1yYWRpdXM6IC4xZW07XG59XG5cbi5mYS1wdWxsLWxlZnQge1xuICBmbG9hdDogbGVmdDtcbn1cblxuLmZhLXB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG59XG5cbi5mYS5mYS1wdWxsLWxlZnQge1xuICBtYXJnaW4tcmlnaHQ6IC4zZW07XG59XG5cbi5mYS5mYS1wdWxsLXJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IC4zZW07XG59XG5cbi8qIERlcHJlY2F0ZWQgYXMgb2YgNC40LjAgKi9cbi5wdWxsLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5mYS5wdWxsLWxlZnQge1xuICBtYXJnaW4tcmlnaHQ6IC4zZW07XG59XG5cbi5mYS5wdWxsLXJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IC4zZW07XG59XG5cbi5mYS1zcGluIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICBhbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xufVxuXG4uZmEtcHVsc2Uge1xuICAtd2Via2l0LWFuaW1hdGlvbjogZmEtc3BpbiAxcyBpbmZpbml0ZSBzdGVwcyg4KTtcbiAgYW5pbWF0aW9uOiBmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO1xufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgZmEtc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZmEtc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG59XG5cbi5mYS1yb3RhdGUtOTAge1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTEpO1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xufVxuXG4uZmEtcm90YXRlLTE4MCB7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249Mik7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG5cbi5mYS1yb3RhdGUtMjcwIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0zKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xuICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbn1cblxuLmZhLWZsaXAtaG9yaXpvbnRhbCB7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MCk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG4gIC1tcy10cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG59XG5cbi5mYS1mbGlwLXZlcnRpY2FsIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0yKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcbiAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMSwgLTEpO1xuICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcbn1cblxuOnJvb3QgLmZhLXJvdGF0ZS05MCxcbjpyb290IC5mYS1yb3RhdGUtMTgwLFxuOnJvb3QgLmZhLXJvdGF0ZS0yNzAsXG46cm9vdCAuZmEtZmxpcC1ob3Jpem9udGFsLFxuOnJvb3QgLmZhLWZsaXAtdmVydGljYWwge1xuICBmaWx0ZXI6IG5vbmU7XG59XG5cbi5mYS1zdGFjayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMmVtO1xuICBoZWlnaHQ6IDJlbTtcbiAgbGluZS1oZWlnaHQ6IDJlbTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmZhLXN0YWNrLTF4LCAuZmEtc3RhY2stMngge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5mYS1zdGFjay0xeCB7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuXG4uZmEtc3RhY2stMngge1xuICBmb250LXNpemU6IDJlbTtcbn1cblxuLmZhLWludmVyc2Uge1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLyogRm9udCBBd2Vzb21lIHVzZXMgdGhlIFVuaWNvZGUgUHJpdmF0ZSBVc2UgQXJlYSAoUFVBKSB0byBlbnN1cmUgc2NyZWVuXG4gICByZWFkZXJzIGRvIG5vdCByZWFkIG9mZiByYW5kb20gY2hhcmFjdGVycyB0aGF0IHJlcHJlc2VudCBpY29ucyAqL1xuLmZhLWdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CAXCI7XG59XG5cbi5mYS1tdXNpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AgVwiO1xufVxuXG4uZmEtc2VhcmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CCXCI7XG59XG5cbi5mYS1lbnZlbG9wZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CDXCI7XG59XG5cbi5mYS1oZWFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AhFwiO1xufVxuXG4uZmEtc3RhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AhVwiO1xufVxuXG4uZmEtc3Rhci1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CGXCI7XG59XG5cbi5mYS11c2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CHXCI7XG59XG5cbi5mYS1maWxtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CIXCI7XG59XG5cbi5mYS10aC1sYXJnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AiVwiO1xufVxuXG4uZmEtdGg6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgIpcIjtcbn1cblxuLmZhLXRoLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgItcIjtcbn1cblxuLmZhLWNoZWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CMXCI7XG59XG5cbi5mYS1yZW1vdmU6YmVmb3JlLFxuLmZhLWNsb3NlOmJlZm9yZSxcbi5mYS10aW1lczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AjVwiO1xufVxuXG4uZmEtc2VhcmNoLXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgI5cIjtcbn1cblxuLmZhLXNlYXJjaC1taW51czpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AkFwiO1xufVxuXG4uZmEtcG93ZXItb2ZmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CRXCI7XG59XG5cbi5mYS1zaWduYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgJJcIjtcbn1cblxuLmZhLWdlYXI6YmVmb3JlLFxuLmZhLWNvZzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Ak1wiO1xufVxuXG4uZmEtdHJhc2gtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AlFwiO1xufVxuXG4uZmEtaG9tZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AlVwiO1xufVxuXG4uZmEtZmlsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CWXCI7XG59XG5cbi5mYS1jbG9jay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CXXCI7XG59XG5cbi5mYS1yb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CYXCI7XG59XG5cbi5mYS1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AmVwiO1xufVxuXG4uZmEtYXJyb3ctY2lyY2xlLW8tZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AmlwiO1xufVxuXG4uZmEtYXJyb3ctY2lyY2xlLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgJtcIjtcbn1cblxuLmZhLWluYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CcXCI7XG59XG5cbi5mYS1wbGF5LWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CdXCI7XG59XG5cbi5mYS1yb3RhdGUtcmlnaHQ6YmVmb3JlLFxuLmZhLXJlcGVhdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AnlwiO1xufVxuXG4uZmEtcmVmcmVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AoVwiO1xufVxuXG4uZmEtbGlzdC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgKJcIjtcbn1cblxuLmZhLWxvY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgKNcIjtcbn1cblxuLmZhLWZsYWc6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgKRcIjtcbn1cblxuLmZhLWhlYWRwaG9uZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgKVcIjtcbn1cblxuLmZhLXZvbHVtZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgKZcIjtcbn1cblxuLmZhLXZvbHVtZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CnXCI7XG59XG5cbi5mYS12b2x1bWUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgKhcIjtcbn1cblxuLmZhLXFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AqVwiO1xufVxuXG4uZmEtYmFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AqlwiO1xufVxuXG4uZmEtdGFnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CrXCI7XG59XG5cbi5mYS10YWdzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CsXCI7XG59XG5cbi5mYS1ib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CtXCI7XG59XG5cbi5mYS1ib29rbWFyazpiZWZvcmUge1xuICBjb250ZW50OiBcIu+ArlwiO1xufVxuXG4uZmEtcHJpbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgK9cIjtcbn1cblxuLmZhLWNhbWVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AsFwiO1xufVxuXG4uZmEtZm9udDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AsVwiO1xufVxuXG4uZmEtYm9sZDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AslwiO1xufVxuXG4uZmEtaXRhbGljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74CzXCI7XG59XG5cbi5mYS10ZXh0LWhlaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AtFwiO1xufVxuXG4uZmEtdGV4dC13aWR0aDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AtVwiO1xufVxuXG4uZmEtYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AtlwiO1xufVxuXG4uZmEtYWxpZ24tY2VudGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74C3XCI7XG59XG5cbi5mYS1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AuFwiO1xufVxuXG4uZmEtYWxpZ24tanVzdGlmeTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AuVwiO1xufVxuXG4uZmEtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AulwiO1xufVxuXG4uZmEtZGVkZW50OmJlZm9yZSxcbi5mYS1vdXRkZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74C7XCI7XG59XG5cbi5mYS1pbmRlbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgLxcIjtcbn1cblxuLmZhLXZpZGVvLWNhbWVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+AvVwiO1xufVxuXG4uZmEtcGhvdG86YmVmb3JlLFxuLmZhLWltYWdlOmJlZm9yZSxcbi5mYS1waWN0dXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvgL5cIjtcbn1cblxuLmZhLXBlbmNpbDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BgFwiO1xufVxuXG4uZmEtbWFwLW1hcmtlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BgVwiO1xufVxuXG4uZmEtYWRqdXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GCXCI7XG59XG5cbi5mYS10aW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GDXCI7XG59XG5cbi5mYS1lZGl0OmJlZm9yZSxcbi5mYS1wZW5jaWwtc3F1YXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvgYRcIjtcbn1cblxuLmZhLXNoYXJlLXNxdWFyZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GFXCI7XG59XG5cbi5mYS1jaGVjay1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BhlwiO1xufVxuXG4uZmEtYXJyb3dzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GHXCI7XG59XG5cbi5mYS1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GIXCI7XG59XG5cbi5mYS1mYXN0LWJhY2t3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GJXCI7XG59XG5cbi5mYS1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BilwiO1xufVxuXG4uZmEtcGxheTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Bi1wiO1xufVxuXG4uZmEtcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgYxcIjtcbn1cblxuLmZhLXN0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgY1cIjtcbn1cblxuLmZhLWZvcndhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgY5cIjtcbn1cblxuLmZhLWZhc3QtZm9yd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BkFwiO1xufVxuXG4uZmEtc3RlcC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GRXCI7XG59XG5cbi5mYS1lamVjdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BklwiO1xufVxuXG4uZmEtY2hldnJvbi1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GTXCI7XG59XG5cbi5mYS1jaGV2cm9uLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GUXCI7XG59XG5cbi5mYS1wbHVzLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BlVwiO1xufVxuXG4uZmEtbWludXMtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GWXCI7XG59XG5cbi5mYS10aW1lcy1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgZdcIjtcbn1cblxuLmZhLWNoZWNrLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BmFwiO1xufVxuXG4uZmEtcXVlc3Rpb24tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GZXCI7XG59XG5cbi5mYS1pbmZvLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BmlwiO1xufVxuXG4uZmEtY3Jvc3NoYWlyczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Bm1wiO1xufVxuXG4uZmEtdGltZXMtY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvgZxcIjtcbn1cblxuLmZhLWNoZWNrLWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GdXCI7XG59XG5cbi5mYS1iYW46YmVmb3JlIHtcbiAgY29udGVudDogXCLvgZ5cIjtcbn1cblxuLmZhLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgaBcIjtcbn1cblxuLmZhLWFycm93LXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GhXCI7XG59XG5cbi5mYS1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BolwiO1xufVxuXG4uZmEtYXJyb3ctZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Bo1wiO1xufVxuXG4uZmEtbWFpbC1mb3J3YXJkOmJlZm9yZSxcbi5mYS1zaGFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BpFwiO1xufVxuXG4uZmEtZXhwYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GlXCI7XG59XG5cbi5mYS1jb21wcmVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BplwiO1xufVxuXG4uZmEtcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Bp1wiO1xufVxuXG4uZmEtbWludXM6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgahcIjtcbn1cblxuLmZhLWFzdGVyaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GpXCI7XG59XG5cbi5mYS1leGNsYW1hdGlvbi1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgapcIjtcbn1cblxuLmZhLWdpZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgatcIjtcbn1cblxuLmZhLWxlYWY6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgaxcIjtcbn1cblxuLmZhLWZpcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvga1cIjtcbn1cblxuLmZhLWV5ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BrlwiO1xufVxuXG4uZmEtZXllLXNsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GwXCI7XG59XG5cbi5mYS13YXJuaW5nOmJlZm9yZSxcbi5mYS1leGNsYW1hdGlvbi10cmlhbmdsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BsVwiO1xufVxuXG4uZmEtcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgbJcIjtcbn1cblxuLmZhLWNhbGVuZGFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74GzXCI7XG59XG5cbi5mYS1yYW5kb206YmVmb3JlIHtcbiAgY29udGVudDogXCLvgbRcIjtcbn1cblxuLmZhLWNvbW1lbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgbVcIjtcbn1cblxuLmZhLW1hZ25ldDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BtlwiO1xufVxuXG4uZmEtY2hldnJvbi11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Bt1wiO1xufVxuXG4uZmEtY2hldnJvbi1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74G4XCI7XG59XG5cbi5mYS1yZXR3ZWV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74G5XCI7XG59XG5cbi5mYS1zaG9wcGluZy1jYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74G6XCI7XG59XG5cbi5mYS1mb2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgbtcIjtcbn1cblxuLmZhLWZvbGRlci1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74G8XCI7XG59XG5cbi5mYS1hcnJvd3MtdjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+BvVwiO1xufVxuXG4uZmEtYXJyb3dzLWg6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgb5cIjtcbn1cblxuLmZhLWJhci1jaGFydC1vOmJlZm9yZSxcbi5mYS1iYXItY2hhcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgoBcIjtcbn1cblxuLmZhLXR3aXR0ZXItc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KBXCI7XG59XG5cbi5mYS1mYWNlYm9vay1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgoJcIjtcbn1cblxuLmZhLWNhbWVyYS1yZXRybzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Cg1wiO1xufVxuXG4uZmEta2V5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KEXCI7XG59XG5cbi5mYS1nZWFyczpiZWZvcmUsXG4uZmEtY29nczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+ChVwiO1xufVxuXG4uZmEtY29tbWVudHM6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgoZcIjtcbn1cblxuLmZhLXRodW1icy1vLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KHXCI7XG59XG5cbi5mYS10aHVtYnMtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KIXCI7XG59XG5cbi5mYS1zdGFyLWhhbGY6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgolcIjtcbn1cblxuLmZhLWhlYXJ0LW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvgopcIjtcbn1cblxuLmZhLXNpZ24tb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KLXCI7XG59XG5cbi5mYS1saW5rZWRpbi1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgoxcIjtcbn1cblxuLmZhLXRodW1iLXRhY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgo1cIjtcbn1cblxuLmZhLWV4dGVybmFsLWxpbms6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgo5cIjtcbn1cblxuLmZhLXNpZ24taW46YmVmb3JlIHtcbiAgY29udGVudDogXCLvgpBcIjtcbn1cblxuLmZhLXRyb3BoeTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CkVwiO1xufVxuXG4uZmEtZ2l0aHViLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CklwiO1xufVxuXG4uZmEtdXBsb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KTXCI7XG59XG5cbi5mYS1sZW1vbi1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KUXCI7XG59XG5cbi5mYS1waG9uZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+ClVwiO1xufVxuXG4uZmEtc3F1YXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvgpZcIjtcbn1cblxuLmZhLWJvb2ttYXJrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvgpdcIjtcbn1cblxuLmZhLXBob25lLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CmFwiO1xufVxuXG4uZmEtdHdpdHRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CmVwiO1xufVxuXG4uZmEtZmFjZWJvb2stZjpiZWZvcmUsXG4uZmEtZmFjZWJvb2s6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgppcIjtcbn1cblxuLmZhLWdpdGh1YjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Cm1wiO1xufVxuXG4uZmEtdW5sb2NrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KcXCI7XG59XG5cbi5mYS1jcmVkaXQtY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CnVwiO1xufVxuXG4uZmEtZmVlZDpiZWZvcmUsXG4uZmEtcnNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KeXCI7XG59XG5cbi5mYS1oZGQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CoFwiO1xufVxuXG4uZmEtYnVsbGhvcm46YmVmb3JlIHtcbiAgY29udGVudDogXCLvgqFcIjtcbn1cblxuLmZhLWJlbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg7NcIjtcbn1cblxuLmZhLWNlcnRpZmljYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KjXCI7XG59XG5cbi5mYS1oYW5kLW8tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgqRcIjtcbn1cblxuLmZhLWhhbmQtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KlXCI7XG59XG5cbi5mYS1oYW5kLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgqZcIjtcbn1cblxuLmZhLWhhbmQtby1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KnXCI7XG59XG5cbi5mYS1hcnJvdy1jaXJjbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CqFwiO1xufVxuXG4uZmEtYXJyb3ctY2lyY2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KpXCI7XG59XG5cbi5mYS1hcnJvdy1jaXJjbGUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgqpcIjtcbn1cblxuLmZhLWFycm93LWNpcmNsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KrXCI7XG59XG5cbi5mYS1nbG9iZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CrFwiO1xufVxuXG4uZmEtd3JlbmNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KtXCI7XG59XG5cbi5mYS10YXNrczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+CrlwiO1xufVxuXG4uZmEtZmlsdGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KwXCI7XG59XG5cbi5mYS1icmllZmNhc2U6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgrFcIjtcbn1cblxuLmZhLWFycm93cy1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvgrJcIjtcbn1cblxuLmZhLWdyb3VwOmJlZm9yZSxcbi5mYS11c2VyczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DgFwiO1xufVxuXG4uZmEtY2hhaW46YmVmb3JlLFxuLmZhLWxpbms6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg4FcIjtcbn1cblxuLmZhLWNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OCXCI7XG59XG5cbi5mYS1mbGFzazpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Dg1wiO1xufVxuXG4uZmEtY3V0OmJlZm9yZSxcbi5mYS1zY2lzc29yczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DhFwiO1xufVxuXG4uZmEtY29weTpiZWZvcmUsXG4uZmEtZmlsZXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DhVwiO1xufVxuXG4uZmEtcGFwZXJjbGlwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OGXCI7XG59XG5cbi5mYS1zYXZlOmJlZm9yZSxcbi5mYS1mbG9wcHktbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Dh1wiO1xufVxuXG4uZmEtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OIXCI7XG59XG5cbi5mYS1uYXZpY29uOmJlZm9yZSxcbi5mYS1yZW9yZGVyOmJlZm9yZSxcbi5mYS1iYXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OJXCI7XG59XG5cbi5mYS1saXN0LXVsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OKXCI7XG59XG5cbi5mYS1saXN0LW9sOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OLXCI7XG59XG5cbi5mYS1zdHJpa2V0aHJvdWdoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OMXCI7XG59XG5cbi5mYS11bmRlcmxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg41cIjtcbn1cblxuLmZhLXRhYmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OOXCI7XG59XG5cbi5mYS1tYWdpYzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DkFwiO1xufVxuXG4uZmEtdHJ1Y2s6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg5FcIjtcbn1cblxuLmZhLXBpbnRlcmVzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DklwiO1xufVxuXG4uZmEtcGludGVyZXN0LXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Dk1wiO1xufVxuXG4uZmEtZ29vZ2xlLXBsdXMtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OUXCI7XG59XG5cbi5mYS1nb29nbGUtcGx1czpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DlVwiO1xufVxuXG4uZmEtbW9uZXk6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg5ZcIjtcbn1cblxuLmZhLWNhcmV0LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCLvg5dcIjtcbn1cblxuLmZhLWNhcmV0LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OYXCI7XG59XG5cbi5mYS1jYXJldC1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OZXCI7XG59XG5cbi5mYS1jYXJldC1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DmlwiO1xufVxuXG4uZmEtY29sdW1uczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Dm1wiO1xufVxuXG4uZmEtdW5zb3J0ZWQ6YmVmb3JlLFxuLmZhLXNvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg5xcIjtcbn1cblxuLmZhLXNvcnQtZG93bjpiZWZvcmUsXG4uZmEtc29ydC1kZXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OdXCI7XG59XG5cbi5mYS1zb3J0LXVwOmJlZm9yZSxcbi5mYS1zb3J0LWFzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DnlwiO1xufVxuXG4uZmEtZW52ZWxvcGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg6BcIjtcbn1cblxuLmZhLWxpbmtlZGluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OhXCI7XG59XG5cbi5mYS1yb3RhdGUtbGVmdDpiZWZvcmUsXG4uZmEtdW5kbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DolwiO1xufVxuXG4uZmEtbGVnYWw6YmVmb3JlLFxuLmZhLWdhdmVsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OjXCI7XG59XG5cbi5mYS1kYXNoYm9hcmQ6YmVmb3JlLFxuLmZhLXRhY2hvbWV0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg6RcIjtcbn1cblxuLmZhLWNvbW1lbnQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DpVwiO1xufVxuXG4uZmEtY29tbWVudHMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DplwiO1xufVxuXG4uZmEtZmxhc2g6YmVmb3JlLFxuLmZhLWJvbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg6dcIjtcbn1cblxuLmZhLXNpdGVtYXA6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg6hcIjtcbn1cblxuLmZhLXVtYnJlbGxhOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OpXCI7XG59XG5cbi5mYS1wYXN0ZTpiZWZvcmUsXG4uZmEtY2xpcGJvYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OqXCI7XG59XG5cbi5mYS1saWdodGJ1bGItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Dq1wiO1xufVxuXG4uZmEtZXhjaGFuZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg6xcIjtcbn1cblxuLmZhLWNsb3VkLWRvd25sb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OtXCI7XG59XG5cbi5mYS1jbG91ZC11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg65cIjtcbn1cblxuLmZhLXVzZXItbWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg7BcIjtcbn1cblxuLmZhLXN0ZXRob3Njb3BlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74OxXCI7XG59XG5cbi5mYS1zdWl0Y2FzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DslwiO1xufVxuXG4uZmEtYmVsbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74KiXCI7XG59XG5cbi5mYS1jb2ZmZWU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg7RcIjtcbn1cblxuLmZhLWN1dGxlcnk6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg7VcIjtcbn1cblxuLmZhLWZpbGUtdGV4dC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74O2XCI7XG59XG5cbi5mYS1idWlsZGluZy1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74O3XCI7XG59XG5cbi5mYS1ob3NwaXRhbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74O4XCI7XG59XG5cbi5mYS1hbWJ1bGFuY2U6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg7lcIjtcbn1cblxuLmZhLW1lZGtpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DulwiO1xufVxuXG4uZmEtZmlnaHRlci1qZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg7tcIjtcbn1cblxuLmZhLWJlZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLvg7xcIjtcbn1cblxuLmZhLWgtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74O9XCI7XG59XG5cbi5mYS1wbHVzLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+DvlwiO1xufVxuXG4uZmEtYW5nbGUtZG91YmxlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhIBcIjtcbn1cblxuLmZhLWFuZ2xlLWRvdWJsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EgVwiO1xufVxuXG4uZmEtYW5nbGUtZG91YmxlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SCXCI7XG59XG5cbi5mYS1hbmdsZS1kb3VibGUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Eg1wiO1xufVxuXG4uZmEtYW5nbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EhFwiO1xufVxuXG4uZmEtYW5nbGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhIVcIjtcbn1cblxuLmZhLWFuZ2xlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SGXCI7XG59XG5cbi5mYS1hbmdsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SHXCI7XG59XG5cbi5mYS1kZXNrdG9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SIXCI7XG59XG5cbi5mYS1sYXB0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhIlcIjtcbn1cblxuLmZhLXRhYmxldDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EilwiO1xufVxuXG4uZmEtbW9iaWxlLXBob25lOmJlZm9yZSxcbi5mYS1tb2JpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhItcIjtcbn1cblxuLmZhLWNpcmNsZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SMXCI7XG59XG5cbi5mYS1xdW90ZS1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SNXCI7XG59XG5cbi5mYS1xdW90ZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EjlwiO1xufVxuXG4uZmEtc3Bpbm5lcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EkFwiO1xufVxuXG4uZmEtY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SRXCI7XG59XG5cbi5mYS1tYWlsLXJlcGx5OmJlZm9yZSxcbi5mYS1yZXBseTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EklwiO1xufVxuXG4uZmEtZ2l0aHViLWFsdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Ek1wiO1xufVxuXG4uZmEtZm9sZGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhJRcIjtcbn1cblxuLmZhLWZvbGRlci1vcGVuLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhJVcIjtcbn1cblxuLmZhLXNtaWxlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhJhcIjtcbn1cblxuLmZhLWZyb3duLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhJlcIjtcbn1cblxuLmZhLW1laC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SaXCI7XG59XG5cbi5mYS1nYW1lcGFkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SbXCI7XG59XG5cbi5mYS1rZXlib2FyZC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74ScXCI7XG59XG5cbi5mYS1mbGFnLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhJ1cIjtcbn1cblxuLmZhLWZsYWctY2hlY2tlcmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SeXCI7XG59XG5cbi5mYS10ZXJtaW5hbDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EoFwiO1xufVxuXG4uZmEtY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EoVwiO1xufVxuXG4uZmEtbWFpbC1yZXBseS1hbGw6YmVmb3JlLFxuLmZhLXJlcGx5LWFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EolwiO1xufVxuXG4uZmEtc3Rhci1oYWxmLWVtcHR5OmJlZm9yZSxcbi5mYS1zdGFyLWhhbGYtZnVsbDpiZWZvcmUsXG4uZmEtc3Rhci1oYWxmLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhKNcIjtcbn1cblxuLmZhLWxvY2F0aW9uLWFycm93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SkXCI7XG59XG5cbi5mYS1jcm9wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SlXCI7XG59XG5cbi5mYS1jb2RlLWZvcms6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhKZcIjtcbn1cblxuLmZhLXVubGluazpiZWZvcmUsXG4uZmEtY2hhaW4tYnJva2VuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SnXCI7XG59XG5cbi5mYS1xdWVzdGlvbjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EqFwiO1xufVxuXG4uZmEtaW5mbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EqVwiO1xufVxuXG4uZmEtZXhjbGFtYXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCLvhKpcIjtcbn1cblxuLmZhLXN1cGVyc2NyaXB0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SrXCI7XG59XG5cbi5mYS1zdWJzY3JpcHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhKxcIjtcbn1cblxuLmZhLWVyYXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+ErVwiO1xufVxuXG4uZmEtcHV6emxlLXBpZWNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SuXCI7XG59XG5cbi5mYS1taWNyb3Bob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SwXCI7XG59XG5cbi5mYS1taWNyb3Bob25lLXNsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74SxXCI7XG59XG5cbi5mYS1zaGllbGQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhLJcIjtcbn1cblxuLmZhLWNhbGVuZGFyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhLNcIjtcbn1cblxuLmZhLWZpcmUtZXh0aW5ndWlzaGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74S0XCI7XG59XG5cbi5mYS1yb2NrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhLVcIjtcbn1cblxuLmZhLW1heGNkbjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EtlwiO1xufVxuXG4uZmEtY2hldnJvbi1jaXJjbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Et1wiO1xufVxuXG4uZmEtY2hldnJvbi1jaXJjbGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhLhcIjtcbn1cblxuLmZhLWNoZXZyb24tY2lyY2xlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74S5XCI7XG59XG5cbi5mYS1jaGV2cm9uLWNpcmNsZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74S6XCI7XG59XG5cbi5mYS1odG1sNTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Eu1wiO1xufVxuXG4uZmEtY3NzMzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+EvFwiO1xufVxuXG4uZmEtYW5jaG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74S9XCI7XG59XG5cbi5mYS11bmxvY2stYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74S+XCI7XG59XG5cbi5mYS1idWxsc2V5ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FgFwiO1xufVxuXG4uZmEtZWxsaXBzaXMtaDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FgVwiO1xufVxuXG4uZmEtZWxsaXBzaXMtdjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FglwiO1xufVxuXG4uZmEtcnNzLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Fg1wiO1xufVxuXG4uZmEtcGxheS1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhYRcIjtcbn1cblxuLmZhLXRpY2tldDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FhVwiO1xufVxuXG4uZmEtbWludXMtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WGXCI7XG59XG5cbi5mYS1taW51cy1zcXVhcmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Fh1wiO1xufVxuXG4uZmEtbGV2ZWwtdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhYhcIjtcbn1cblxuLmZhLWxldmVsLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCLvhYlcIjtcbn1cblxuLmZhLWNoZWNrLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FilwiO1xufVxuXG4uZmEtcGVuY2lsLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Fi1wiO1xufVxuXG4uZmEtZXh0ZXJuYWwtbGluay1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhYxcIjtcbn1cblxuLmZhLXNoYXJlLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FjVwiO1xufVxuXG4uZmEtY29tcGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FjlwiO1xufVxuXG4uZmEtdG9nZ2xlLWRvd246YmVmb3JlLFxuLmZhLWNhcmV0LXNxdWFyZS1vLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCLvhZBcIjtcbn1cblxuLmZhLXRvZ2dsZS11cDpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tdXA6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhZFcIjtcbn1cblxuLmZhLXRvZ2dsZS1yaWdodDpiZWZvcmUsXG4uZmEtY2FyZXQtc3F1YXJlLW8tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhZJcIjtcbn1cblxuLmZhLWV1cm86YmVmb3JlLFxuLmZhLWV1cjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Fk1wiO1xufVxuXG4uZmEtZ2JwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WUXCI7XG59XG5cbi5mYS1kb2xsYXI6YmVmb3JlLFxuLmZhLXVzZDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FlVwiO1xufVxuXG4uZmEtcnVwZWU6YmVmb3JlLFxuLmZhLWlucjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FllwiO1xufVxuXG4uZmEtY255OmJlZm9yZSxcbi5mYS1ybWI6YmVmb3JlLFxuLmZhLXllbjpiZWZvcmUsXG4uZmEtanB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WXXCI7XG59XG5cbi5mYS1ydWJsZTpiZWZvcmUsXG4uZmEtcm91YmxlOmJlZm9yZSxcbi5mYS1ydWI6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhZhcIjtcbn1cblxuLmZhLXdvbjpiZWZvcmUsXG4uZmEta3J3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WZXCI7XG59XG5cbi5mYS1iaXRjb2luOmJlZm9yZSxcbi5mYS1idGM6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhZpcIjtcbn1cblxuLmZhLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhZtcIjtcbn1cblxuLmZhLWZpbGUtdGV4dDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FnFwiO1xufVxuXG4uZmEtc29ydC1hbHBoYS1hc2M6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhZ1cIjtcbn1cblxuLmZhLXNvcnQtYWxwaGEtZGVzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FnlwiO1xufVxuXG4uZmEtc29ydC1hbW91bnQtYXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WgXCI7XG59XG5cbi5mYS1zb3J0LWFtb3VudC1kZXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WhXCI7XG59XG5cbi5mYS1zb3J0LW51bWVyaWMtYXNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WiXCI7XG59XG5cbi5mYS1zb3J0LW51bWVyaWMtZGVzYzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Fo1wiO1xufVxuXG4uZmEtdGh1bWJzLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WkXCI7XG59XG5cbi5mYS10aHVtYnMtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FpVwiO1xufVxuXG4uZmEteW91dHViZS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhaZcIjtcbn1cblxuLmZhLXlvdXR1YmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhadcIjtcbn1cblxuLmZhLXhpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhahcIjtcbn1cblxuLmZhLXhpbmctc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WpXCI7XG59XG5cbi5mYS15b3V0dWJlLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhapcIjtcbn1cblxuLmZhLWRyb3Bib3g6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhatcIjtcbn1cblxuLmZhLXN0YWNrLW92ZXJmbG93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WsXCI7XG59XG5cbi5mYS1pbnN0YWdyYW06YmVmb3JlIHtcbiAgY29udGVudDogXCLvha1cIjtcbn1cblxuLmZhLWZsaWNrcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FrlwiO1xufVxuXG4uZmEtYWRuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74WwXCI7XG59XG5cbi5mYS1iaXRidWNrZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhbFcIjtcbn1cblxuLmZhLWJpdGJ1Y2tldC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhbJcIjtcbn1cblxuLmZhLXR1bWJscjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Fs1wiO1xufVxuXG4uZmEtdHVtYmxyLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FtFwiO1xufVxuXG4uZmEtbG9uZy1hcnJvdy1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74W1XCI7XG59XG5cbi5mYS1sb25nLWFycm93LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74W2XCI7XG59XG5cbi5mYS1sb25nLWFycm93LWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhbdcIjtcbn1cblxuLmZhLWxvbmctYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhbhcIjtcbn1cblxuLmZhLWFwcGxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74W5XCI7XG59XG5cbi5mYS13aW5kb3dzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74W6XCI7XG59XG5cbi5mYS1hbmRyb2lkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74W7XCI7XG59XG5cbi5mYS1saW51eDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+FvFwiO1xufVxuXG4uZmEtZHJpYmJibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhb1cIjtcbn1cblxuLmZhLXNreXBlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74W+XCI7XG59XG5cbi5mYS1mb3Vyc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74aAXCI7XG59XG5cbi5mYS10cmVsbG86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhoFcIjtcbn1cblxuLmZhLWZlbWFsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GglwiO1xufVxuXG4uZmEtbWFsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Gg1wiO1xufVxuXG4uZmEtZ2l0dGlwOmJlZm9yZSxcbi5mYS1ncmF0aXBheTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GhFwiO1xufVxuXG4uZmEtc3VuLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhoVcIjtcbn1cblxuLmZhLW1vb24tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GhlwiO1xufVxuXG4uZmEtYXJjaGl2ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Gh1wiO1xufVxuXG4uZmEtYnVnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74aIXCI7XG59XG5cbi5mYS12azpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GiVwiO1xufVxuXG4uZmEtd2VpYm86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhopcIjtcbn1cblxuLmZhLXJlbnJlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Gi1wiO1xufVxuXG4uZmEtcGFnZWxpbmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74aMXCI7XG59XG5cbi5mYS1zdGFjay1leGNoYW5nZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GjVwiO1xufVxuXG4uZmEtYXJyb3ctY2lyY2xlLW8tcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvho5cIjtcbn1cblxuLmZhLWFycm93LWNpcmNsZS1vLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhpBcIjtcbn1cblxuLmZhLXRvZ2dsZS1sZWZ0OmJlZm9yZSxcbi5mYS1jYXJldC1zcXVhcmUtby1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74aRXCI7XG59XG5cbi5mYS1kb3QtY2lyY2xlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhpJcIjtcbn1cblxuLmZhLXdoZWVsY2hhaXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhpNcIjtcbn1cblxuLmZhLXZpbWVvLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GlFwiO1xufVxuXG4uZmEtdHVya2lzaC1saXJhOmJlZm9yZSxcbi5mYS10cnk6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhpVcIjtcbn1cblxuLmZhLXBsdXMtc3F1YXJlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvhpZcIjtcbn1cblxuLmZhLXNwYWNlLXNodXR0bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhpdcIjtcbn1cblxuLmZhLXNsYWNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74aYXCI7XG59XG5cbi5mYS1lbnZlbG9wZS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhplcIjtcbn1cblxuLmZhLXdvcmRwcmVzczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GmlwiO1xufVxuXG4uZmEtb3BlbmlkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74abXCI7XG59XG5cbi5mYS1pbnN0aXR1dGlvbjpiZWZvcmUsXG4uZmEtYmFuazpiZWZvcmUsXG4uZmEtdW5pdmVyc2l0eTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GnFwiO1xufVxuXG4uZmEtbW9ydGFyLWJvYXJkOmJlZm9yZSxcbi5mYS1ncmFkdWF0aW9uLWNhcDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GnVwiO1xufVxuXG4uZmEteWFob286YmVmb3JlIHtcbiAgY29udGVudDogXCLvhp5cIjtcbn1cblxuLmZhLWdvb2dsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GoFwiO1xufVxuXG4uZmEtcmVkZGl0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74ahXCI7XG59XG5cbi5mYS1yZWRkaXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74aiXCI7XG59XG5cbi5mYS1zdHVtYmxldXBvbi1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhqNcIjtcbn1cblxuLmZhLXN0dW1ibGV1cG9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74akXCI7XG59XG5cbi5mYS1kZWxpY2lvdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhqVcIjtcbn1cblxuLmZhLWRpZ2c6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhqZcIjtcbn1cblxuLmZhLXBpZWQtcGlwZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhqdcIjtcbn1cblxuLmZhLXBpZWQtcGlwZXItYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74aoXCI7XG59XG5cbi5mYS1kcnVwYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhqlcIjtcbn1cblxuLmZhLWpvb21sYTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GqlwiO1xufVxuXG4uZmEtbGFuZ3VhZ2U6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhqtcIjtcbn1cblxuLmZhLWZheDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GrFwiO1xufVxuXG4uZmEtYnVpbGRpbmc6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhq1cIjtcbn1cblxuLmZhLWNoaWxkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74auXCI7XG59XG5cbi5mYS1wYXc6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhrBcIjtcbn1cblxuLmZhLXNwb29uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74axXCI7XG59XG5cbi5mYS1jdWJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74ayXCI7XG59XG5cbi5mYS1jdWJlczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Gs1wiO1xufVxuXG4uZmEtYmVoYW5jZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GtFwiO1xufVxuXG4uZmEtYmVoYW5jZS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhrVcIjtcbn1cblxuLmZhLXN0ZWFtOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74a2XCI7XG59XG5cbi5mYS1zdGVhbS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhrdcIjtcbn1cblxuLmZhLXJlY3ljbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvhrhcIjtcbn1cblxuLmZhLWF1dG9tb2JpbGU6YmVmb3JlLFxuLmZhLWNhcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+GuVwiO1xufVxuXG4uZmEtY2FiOmJlZm9yZSxcbi5mYS10YXhpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74a6XCI7XG59XG5cbi5mYS10cmVlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74a7XCI7XG59XG5cbi5mYS1zcG90aWZ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74a8XCI7XG59XG5cbi5mYS1kZXZpYW50YXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74a9XCI7XG59XG5cbi5mYS1zb3VuZGNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74a+XCI7XG59XG5cbi5mYS1kYXRhYmFzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HgFwiO1xufVxuXG4uZmEtZmlsZS1wZGYtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HgVwiO1xufVxuXG4uZmEtZmlsZS13b3JkLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvh4JcIjtcbn1cblxuLmZhLWZpbGUtZXhjZWwtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Hg1wiO1xufVxuXG4uZmEtZmlsZS1wb3dlcnBvaW50LW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvh4RcIjtcbn1cblxuLmZhLWZpbGUtcGhvdG8tbzpiZWZvcmUsXG4uZmEtZmlsZS1waWN0dXJlLW86YmVmb3JlLFxuLmZhLWZpbGUtaW1hZ2UtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HhVwiO1xufVxuXG4uZmEtZmlsZS16aXAtbzpiZWZvcmUsXG4uZmEtZmlsZS1hcmNoaXZlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvh4ZcIjtcbn1cblxuLmZhLWZpbGUtc291bmQtbzpiZWZvcmUsXG4uZmEtZmlsZS1hdWRpby1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74eHXCI7XG59XG5cbi5mYS1maWxlLW1vdmllLW86YmVmb3JlLFxuLmZhLWZpbGUtdmlkZW8tbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HiFwiO1xufVxuXG4uZmEtZmlsZS1jb2RlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvh4lcIjtcbn1cblxuLmZhLXZpbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh4pcIjtcbn1cblxuLmZhLWNvZGVwZW46YmVmb3JlIHtcbiAgY29udGVudDogXCLvh4tcIjtcbn1cblxuLmZhLWpzZmlkZGxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74eMXCI7XG59XG5cbi5mYS1saWZlLWJvdXk6YmVmb3JlLFxuLmZhLWxpZmUtYnVveTpiZWZvcmUsXG4uZmEtbGlmZS1zYXZlcjpiZWZvcmUsXG4uZmEtc3VwcG9ydDpiZWZvcmUsXG4uZmEtbGlmZS1yaW5nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74eNXCI7XG59XG5cbi5mYS1jaXJjbGUtby1ub3RjaDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HjlwiO1xufVxuXG4uZmEtcmE6YmVmb3JlLFxuLmZhLXJlYmVsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74eQXCI7XG59XG5cbi5mYS1nZTpiZWZvcmUsXG4uZmEtZW1waXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74eRXCI7XG59XG5cbi5mYS1naXQtc3F1YXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74eSXCI7XG59XG5cbi5mYS1naXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh5NcIjtcbn1cblxuLmZhLXktY29tYmluYXRvci1zcXVhcmU6YmVmb3JlLFxuLmZhLXljLXNxdWFyZTpiZWZvcmUsXG4uZmEtaGFja2VyLW5ld3M6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh5RcIjtcbn1cblxuLmZhLXRlbmNlbnQtd2VpYm86YmVmb3JlIHtcbiAgY29udGVudDogXCLvh5VcIjtcbn1cblxuLmZhLXFxOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74eWXCI7XG59XG5cbi5mYS13ZWNoYXQ6YmVmb3JlLFxuLmZhLXdlaXhpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Hl1wiO1xufVxuXG4uZmEtc2VuZDpiZWZvcmUsXG4uZmEtcGFwZXItcGxhbmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh5hcIjtcbn1cblxuLmZhLXNlbmQtbzpiZWZvcmUsXG4uZmEtcGFwZXItcGxhbmUtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HmVwiO1xufVxuXG4uZmEtaGlzdG9yeTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HmlwiO1xufVxuXG4uZmEtY2lyY2xlLXRoaW46YmVmb3JlIHtcbiAgY29udGVudDogXCLvh5tcIjtcbn1cblxuLmZhLWhlYWRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HnFwiO1xufVxuXG4uZmEtcGFyYWdyYXBoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74edXCI7XG59XG5cbi5mYS1zbGlkZXJzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74eeXCI7XG59XG5cbi5mYS1zaGFyZS1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6BcIjtcbn1cblxuLmZhLXNoYXJlLWFsdC1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6FcIjtcbn1cblxuLmZhLWJvbWI6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6JcIjtcbn1cblxuLmZhLXNvY2Nlci1iYWxsLW86YmVmb3JlLFxuLmZhLWZ1dGJvbC1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74ejXCI7XG59XG5cbi5mYS10dHk6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6RcIjtcbn1cblxuLmZhLWJpbm9jdWxhcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6VcIjtcbn1cblxuLmZhLXBsdWc6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6ZcIjtcbn1cblxuLmZhLXNsaWRlc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6dcIjtcbn1cblxuLmZhLXR3aXRjaDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HqFwiO1xufVxuXG4uZmEteWVscDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HqVwiO1xufVxuXG4uZmEtbmV3c3BhcGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6pcIjtcbn1cblxuLmZhLXdpZmk6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6tcIjtcbn1cblxuLmZhLWNhbGN1bGF0b3I6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh6xcIjtcbn1cblxuLmZhLXBheXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HrVwiO1xufVxuXG4uZmEtZ29vZ2xlLXdhbGxldDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HrlwiO1xufVxuXG4uZmEtY2MtdmlzYTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HsFwiO1xufVxuXG4uZmEtY2MtbWFzdGVyY2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HsVwiO1xufVxuXG4uZmEtY2MtZGlzY292ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh7JcIjtcbn1cblxuLmZhLWNjLWFtZXg6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh7NcIjtcbn1cblxuLmZhLWNjLXBheXBhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HtFwiO1xufVxuXG4uZmEtY2Mtc3RyaXBlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74e1XCI7XG59XG5cbi5mYS1iZWxsLXNsYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74e2XCI7XG59XG5cbi5mYS1iZWxsLXNsYXNoLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvh7dcIjtcbn1cblxuLmZhLXRyYXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74e4XCI7XG59XG5cbi5mYS1jb3B5cmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLvh7lcIjtcbn1cblxuLmZhLWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74e6XCI7XG59XG5cbi5mYS1leWVkcm9wcGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74e7XCI7XG59XG5cbi5mYS1wYWludC1icnVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HvFwiO1xufVxuXG4uZmEtYmlydGhkYXktY2FrZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HvVwiO1xufVxuXG4uZmEtYXJlYS1jaGFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+HvlwiO1xufVxuXG4uZmEtcGllLWNoYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iAXCI7XG59XG5cbi5mYS1saW5lLWNoYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iBXCI7XG59XG5cbi5mYS1sYXN0Zm06YmVmb3JlIHtcbiAgY29udGVudDogXCLviIJcIjtcbn1cblxuLmZhLWxhc3RmbS1zcXVhcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCLviINcIjtcbn1cblxuLmZhLXRvZ2dsZS1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogXCLviIRcIjtcbn1cblxuLmZhLXRvZ2dsZS1vbjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IhVwiO1xufVxuXG4uZmEtYmljeWNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IhlwiO1xufVxuXG4uZmEtYnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iHXCI7XG59XG5cbi5mYS1pb3hob3N0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iIXCI7XG59XG5cbi5mYS1hbmdlbGxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCLviIlcIjtcbn1cblxuLmZhLWNjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iKXCI7XG59XG5cbi5mYS1zaGVrZWw6YmVmb3JlLFxuLmZhLXNoZXFlbDpiZWZvcmUsXG4uZmEtaWxzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iLXCI7XG59XG5cbi5mYS1tZWFucGF0aDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IjFwiO1xufVxuXG4uZmEtYnV5c2VsbGFkczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IjVwiO1xufVxuXG4uZmEtY29ubmVjdGRldmVsb3A6YmVmb3JlIHtcbiAgY29udGVudDogXCLviI5cIjtcbn1cblxuLmZhLWRhc2hjdWJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iQXCI7XG59XG5cbi5mYS1mb3J1bWJlZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IkVwiO1xufVxuXG4uZmEtbGVhbnB1YjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IklwiO1xufVxuXG4uZmEtc2VsbHN5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iTXCI7XG59XG5cbi5mYS1zaGlydHNpbmJ1bGs6YmVmb3JlIHtcbiAgY29udGVudDogXCLviJRcIjtcbn1cblxuLmZhLXNpbXBseWJ1aWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iVXCI7XG59XG5cbi5mYS1za3lhdGxhczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IllwiO1xufVxuXG4uZmEtY2FydC1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iXXCI7XG59XG5cbi5mYS1jYXJ0LWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCLviJhcIjtcbn1cblxuLmZhLWRpYW1vbmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLviJlcIjtcbn1cblxuLmZhLXNoaXA6YmVmb3JlIHtcbiAgY29udGVudDogXCLviJpcIjtcbn1cblxuLmZhLXVzZXItc2VjcmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74ibXCI7XG59XG5cbi5mYS1tb3RvcmN5Y2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74icXCI7XG59XG5cbi5mYS1zdHJlZXQtdmlldzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+InVwiO1xufVxuXG4uZmEtaGVhcnRiZWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74ieXCI7XG59XG5cbi5mYS12ZW51czpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IoVwiO1xufVxuXG4uZmEtbWFyczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IolwiO1xufVxuXG4uZmEtbWVyY3VyeTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Io1wiO1xufVxuXG4uZmEtaW50ZXJzZXg6YmVmb3JlLFxuLmZhLXRyYW5zZ2VuZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74ikXCI7XG59XG5cbi5mYS10cmFuc2dlbmRlci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLviKVcIjtcbn1cblxuLmZhLXZlbnVzLWRvdWJsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IplwiO1xufVxuXG4uZmEtbWFycy1kb3VibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLviKdcIjtcbn1cblxuLmZhLXZlbnVzLW1hcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCLviKhcIjtcbn1cblxuLmZhLW1hcnMtc3Ryb2tlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74ipXCI7XG59XG5cbi5mYS1tYXJzLXN0cm9rZS12OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iqXCI7XG59XG5cbi5mYS1tYXJzLXN0cm9rZS1oOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74irXCI7XG59XG5cbi5mYS1uZXV0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLviKxcIjtcbn1cblxuLmZhLWdlbmRlcmxlc3M6YmVmb3JlIHtcbiAgY29udGVudDogXCLviK1cIjtcbn1cblxuLmZhLWZhY2Vib29rLW9mZmljaWFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74iwXCI7XG59XG5cbi5mYS1waW50ZXJlc3QtcDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IsVwiO1xufVxuXG4uZmEtd2hhdHNhcHA6YmVmb3JlIHtcbiAgY29udGVudDogXCLviLJcIjtcbn1cblxuLmZhLXNlcnZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Is1wiO1xufVxuXG4uZmEtdXNlci1wbHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74i0XCI7XG59XG5cbi5mYS11c2VyLXRpbWVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74i1XCI7XG59XG5cbi5mYS1ob3RlbDpiZWZvcmUsXG4uZmEtYmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74i2XCI7XG59XG5cbi5mYS12aWFjb2luOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74i3XCI7XG59XG5cbi5mYS10cmFpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+IuFwiO1xufVxuXG4uZmEtc3Vid2F5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74i5XCI7XG59XG5cbi5mYS1tZWRpdW06YmVmb3JlIHtcbiAgY29udGVudDogXCLviLpcIjtcbn1cblxuLmZhLXljOmJlZm9yZSxcbi5mYS15LWNvbWJpbmF0b3I6YmVmb3JlIHtcbiAgY29udGVudDogXCLviLtcIjtcbn1cblxuLmZhLW9wdGluLW1vbnN0ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLviLxcIjtcbn1cblxuLmZhLW9wZW5jYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74i9XCI7XG59XG5cbi5mYS1leHBlZGl0ZWRzc2w6YmVmb3JlIHtcbiAgY29udGVudDogXCLviL5cIjtcbn1cblxuLmZhLWJhdHRlcnktNDpiZWZvcmUsXG4uZmEtYmF0dGVyeS1mdWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mAXCI7XG59XG5cbi5mYS1iYXR0ZXJ5LTM6YmVmb3JlLFxuLmZhLWJhdHRlcnktdGhyZWUtcXVhcnRlcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCLviYFcIjtcbn1cblxuLmZhLWJhdHRlcnktMjpiZWZvcmUsXG4uZmEtYmF0dGVyeS1oYWxmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mCXCI7XG59XG5cbi5mYS1iYXR0ZXJ5LTE6YmVmb3JlLFxuLmZhLWJhdHRlcnktcXVhcnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Jg1wiO1xufVxuXG4uZmEtYmF0dGVyeS0wOmJlZm9yZSxcbi5mYS1iYXR0ZXJ5LWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mEXCI7XG59XG5cbi5mYS1tb3VzZS1wb2ludGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mFXCI7XG59XG5cbi5mYS1pLWN1cnNvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JhlwiO1xufVxuXG4uZmEtb2JqZWN0LWdyb3VwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mHXCI7XG59XG5cbi5mYS1vYmplY3QtdW5ncm91cDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JiFwiO1xufVxuXG4uZmEtc3RpY2t5LW5vdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLviYlcIjtcbn1cblxuLmZhLXN0aWNreS1ub3RlLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLviYpcIjtcbn1cblxuLmZhLWNjLWpjYjpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Ji1wiO1xufVxuXG4uZmEtY2MtZGluZXJzLWNsdWI6YmVmb3JlIHtcbiAgY29udGVudDogXCLviYxcIjtcbn1cblxuLmZhLWNsb25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mNXCI7XG59XG5cbi5mYS1iYWxhbmNlLXNjYWxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mOXCI7XG59XG5cbi5mYS1ob3VyZ2xhc3MtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JkFwiO1xufVxuXG4uZmEtaG91cmdsYXNzLTE6YmVmb3JlLFxuLmZhLWhvdXJnbGFzcy1zdGFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JkVwiO1xufVxuXG4uZmEtaG91cmdsYXNzLTI6YmVmb3JlLFxuLmZhLWhvdXJnbGFzcy1oYWxmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mSXCI7XG59XG5cbi5mYS1ob3VyZ2xhc3MtMzpiZWZvcmUsXG4uZmEtaG91cmdsYXNzLWVuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Jk1wiO1xufVxuXG4uZmEtaG91cmdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mUXCI7XG59XG5cbi5mYS1oYW5kLWdyYWItbzpiZWZvcmUsXG4uZmEtaGFuZC1yb2NrLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLviZVcIjtcbn1cblxuLmZhLWhhbmQtc3RvcC1vOmJlZm9yZSxcbi5mYS1oYW5kLXBhcGVyLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLviZZcIjtcbn1cblxuLmZhLWhhbmQtc2Npc3NvcnMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Jl1wiO1xufVxuXG4uZmEtaGFuZC1saXphcmQtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JmFwiO1xufVxuXG4uZmEtaGFuZC1zcG9jay1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mZXCI7XG59XG5cbi5mYS1oYW5kLXBvaW50ZXItbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JmlwiO1xufVxuXG4uZmEtaGFuZC1wZWFjZS1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mbXCI7XG59XG5cbi5mYS10cmFkZW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCLviZxcIjtcbn1cblxuLmZhLXJlZ2lzdGVyZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCLviZ1cIjtcbn1cblxuLmZhLWNyZWF0aXZlLWNvbW1vbnM6YmVmb3JlIHtcbiAgY29udGVudDogXCLviZ5cIjtcbn1cblxuLmZhLWdnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mgXCI7XG59XG5cbi5mYS1nZy1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCLviaFcIjtcbn1cblxuLmZhLXRyaXBhZHZpc29yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74miXCI7XG59XG5cbi5mYS1vZG5va2xhc3NuaWtpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mjXCI7XG59XG5cbi5mYS1vZG5va2xhc3NuaWtpLXNxdWFyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JpFwiO1xufVxuXG4uZmEtZ2V0LXBvY2tldDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JpVwiO1xufVxuXG4uZmEtd2lraXBlZGlhLXc6YmVmb3JlIHtcbiAgY29udGVudDogXCLviaZcIjtcbn1cblxuLmZhLXNhZmFyaTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Jp1wiO1xufVxuXG4uZmEtY2hyb21lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74moXCI7XG59XG5cbi5mYS1maXJlZm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74mpXCI7XG59XG5cbi5mYS1vcGVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JqlwiO1xufVxuXG4uZmEtaW50ZXJuZXQtZXhwbG9yZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCLviatcIjtcbn1cblxuLmZhLXR2OmJlZm9yZSxcbi5mYS10ZWxldmlzaW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74msXCI7XG59XG5cbi5mYS1jb250YW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvia1cIjtcbn1cblxuLmZhLTUwMHB4OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74muXCI7XG59XG5cbi5mYS1hbWF6b246YmVmb3JlIHtcbiAgY29udGVudDogXCLvibBcIjtcbn1cblxuLmZhLWNhbGVuZGFyLXBsdXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JsVwiO1xufVxuXG4uZmEtY2FsZW5kYXItbWludXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JslwiO1xufVxuXG4uZmEtY2FsZW5kYXItdGltZXMtbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Js1wiO1xufVxuXG4uZmEtY2FsZW5kYXItY2hlY2stbzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JtFwiO1xufVxuXG4uZmEtaW5kdXN0cnk6YmVmb3JlIHtcbiAgY29udGVudDogXCLvibVcIjtcbn1cblxuLmZhLW1hcC1waW46YmVmb3JlIHtcbiAgY29udGVudDogXCLvibZcIjtcbn1cblxuLmZhLW1hcC1zaWduczpiZWZvcmUge1xuICBjb250ZW50OiBcIu+Jt1wiO1xufVxuXG4uZmEtbWFwLW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvibhcIjtcbn1cblxuLmZhLW1hcDpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JuVwiO1xufVxuXG4uZmEtY29tbWVudGluZzpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JulwiO1xufVxuXG4uZmEtY29tbWVudGluZy1vOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74m7XCI7XG59XG5cbi5mYS1ob3V6ejpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JvFwiO1xufVxuXG4uZmEtdmltZW86YmVmb3JlIHtcbiAgY29udGVudDogXCLvib1cIjtcbn1cblxuLmZhLWJsYWNrLXRpZTpiZWZvcmUge1xuICBjb250ZW50OiBcIu+JvlwiO1xufVxuXG4uZmEtZm9udGljb25zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi74qAXCI7XG59XG4iLCIvKiFcbiAqICBGb250IEF3ZXNvbWUgNC4zLjAgYnkgQGRhdmVnYW5keSAtIGh0dHA6Ly9mb250YXdlc29tZS5pbyAtIEBmb250YXdlc29tZVxuICogIExpY2Vuc2UgLSBodHRwOi8vZm9udGF3ZXNvbWUuaW8vbGljZW5zZSAoRm9udDogU0lMIE9GTCAxLjEsIENTUzogTUlUIExpY2Vuc2UpXG4gKi9cblxuQGltcG9ydCBcInRoZW1lLWRlZmF1bHQvbW9kdWxlcy92YXJpYWJsZXNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ZvbnQtYXdlc29tZS9zY3NzL21peGluc1wiO1xuQGltcG9ydCBcInRoZW1lLWRlZmF1bHQvbW9kdWxlcy9wYXRoXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9mb250LWF3ZXNvbWUvc2Nzcy9jb3JlXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9mb250LWF3ZXNvbWUvc2Nzcy9sYXJnZXJcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ZvbnQtYXdlc29tZS9zY3NzL2ZpeGVkLXdpZHRoXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9mb250LWF3ZXNvbWUvc2Nzcy9saXN0XCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9mb250LWF3ZXNvbWUvc2Nzcy9ib3JkZXJlZC1wdWxsZWRcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ZvbnQtYXdlc29tZS9zY3NzL2FuaW1hdGVkXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9mb250LWF3ZXNvbWUvc2Nzcy9yb3RhdGVkLWZsaXBwZWRcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ZvbnQtYXdlc29tZS9zY3NzL3N0YWNrZWRcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2ZvbnQtYXdlc29tZS9zY3NzL2ljb25zXCI7XG4iLCIvKiBGT05UIFBBVEhcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0ZvbnRBd2Vzb21lJztcbiAgc3JjOiB1cmwoJyN7JGZhLWZvbnQtcGF0aH0vZm9udGF3ZXNvbWUudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG4iLCIvLyBCYXNlIENsYXNzIERlZmluaXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLiN7JGZhLWNzcy1wcmVmaXh9IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAjeyRmYS1mb250LXNpemUtYmFzZX0vI3skZmEtbGluZS1oZWlnaHQtYmFzZX0gRm9udEF3ZXNvbWU7IC8vIHNob3J0ZW5pbmcgZm9udCBkZWNsYXJhdGlvblxuICBmb250LXNpemU6IGluaGVyaXQ7IC8vIGNhbid0IGhhdmUgZm9udC1zaXplIGluaGVyaXQgb24gbGluZSBhYm92ZSwgc28gbmVlZCB0byBvdmVycmlkZVxuICB0ZXh0LXJlbmRlcmluZzogYXV0bzsgLy8gb3B0aW1pemVsZWdpYmlsaXR5IHRocm93cyB0aGluZ3Mgb2ZmICMxMDk0XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXG59XG4iLCIvLyBJY29uIFNpemVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qIG1ha2VzIHRoZSBmb250IDMzJSBsYXJnZXIgcmVsYXRpdmUgdG8gdGhlIGljb24gY29udGFpbmVyICovXG4uI3skZmEtY3NzLXByZWZpeH0tbGcge1xuICBmb250LXNpemU6ICg0ZW0gLyAzKTtcbiAgbGluZS1oZWlnaHQ6ICgzZW0gLyA0KTtcbiAgdmVydGljYWwtYWxpZ246IC0xNSU7XG59XG4uI3skZmEtY3NzLXByZWZpeH0tMnggeyBmb250LXNpemU6IDJlbTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LTN4IHsgZm9udC1zaXplOiAzZW07IH1cbi4jeyRmYS1jc3MtcHJlZml4fS00eCB7IGZvbnQtc2l6ZTogNGVtOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tNXggeyBmb250LXNpemU6IDVlbTsgfVxuIiwiLy8gRml4ZWQgV2lkdGggSWNvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi4jeyRmYS1jc3MtcHJlZml4fS1mdyB7XG4gIHdpZHRoOiAoMThlbSAvIDE0KTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuIiwiLy8gTGlzdCBJY29uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uI3skZmEtY3NzLXByZWZpeH0tdWwge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAkZmEtbGktd2lkdGg7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgPiBsaSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxufVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtJGZhLWxpLXdpZHRoO1xuICB3aWR0aDogJGZhLWxpLXdpZHRoO1xuICB0b3A6ICgyZW0gLyAxNCk7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgJi4jeyRmYS1jc3MtcHJlZml4fS1sZyB7XG4gICAgbGVmdDogLSRmYS1saS13aWR0aCArICg0ZW0gLyAxNCk7XG4gIH1cbn1cbiIsIi8vIFZhcmlhYmxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGZhLWZvbnQtcGF0aDogICAgICAgIFwiLi4vLi4vLi4vZm9udGF3ZXNvbWUvZm9udC9cIiAhZGVmYXVsdDtcbiRmYS1mb250LXNpemUtYmFzZTogICAxNHB4ICFkZWZhdWx0O1xuJGZhLWxpbmUtaGVpZ2h0LWJhc2U6IDEgIWRlZmF1bHQ7XG4vLyRmYS1mb250LXBhdGg6ICAgICAgICBcIi8vbmV0ZG5hLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNC4wL2ZvbnRzXCIgIWRlZmF1bHQ7IC8vIGZvciByZWZlcmVuY2luZyBCb290c3RyYXAgQ0ROIGZvbnQgZmlsZXMgZGlyZWN0bHlcbiRmYS1jc3MtcHJlZml4OiAgICAgICBmYSAhZGVmYXVsdDtcbiRmYS12ZXJzaW9uOiAgICAgICAgICBcIjQuNC4wXCIgIWRlZmF1bHQ7XG4kZmEtYm9yZGVyLWNvbG9yOiAgICAgI2VlZSAhZGVmYXVsdDtcbiRmYS1pbnZlcnNlOiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGZhLWxpLXdpZHRoOiAgICAgICAgICgzMGVtIC8gMTQpICFkZWZhdWx0O1xuXG4kZmEtdmFyLTUwMHB4OiBcIlxcZjI2ZVwiO1xuJGZhLXZhci1hZGp1c3Q6IFwiXFxmMDQyXCI7XG4kZmEtdmFyLWFkbjogXCJcXGYxNzBcIjtcbiRmYS12YXItYWxpZ24tY2VudGVyOiBcIlxcZjAzN1wiO1xuJGZhLXZhci1hbGlnbi1qdXN0aWZ5OiBcIlxcZjAzOVwiO1xuJGZhLXZhci1hbGlnbi1sZWZ0OiBcIlxcZjAzNlwiO1xuJGZhLXZhci1hbGlnbi1yaWdodDogXCJcXGYwMzhcIjtcbiRmYS12YXItYW1hem9uOiBcIlxcZjI3MFwiO1xuJGZhLXZhci1hbWJ1bGFuY2U6IFwiXFxmMGY5XCI7XG4kZmEtdmFyLWFuY2hvcjogXCJcXGYxM2RcIjtcbiRmYS12YXItYW5kcm9pZDogXCJcXGYxN2JcIjtcbiRmYS12YXItYW5nZWxsaXN0OiBcIlxcZjIwOVwiO1xuJGZhLXZhci1hbmdsZS1kb3VibGUtZG93bjogXCJcXGYxMDNcIjtcbiRmYS12YXItYW5nbGUtZG91YmxlLWxlZnQ6IFwiXFxmMTAwXCI7XG4kZmEtdmFyLWFuZ2xlLWRvdWJsZS1yaWdodDogXCJcXGYxMDFcIjtcbiRmYS12YXItYW5nbGUtZG91YmxlLXVwOiBcIlxcZjEwMlwiO1xuJGZhLXZhci1hbmdsZS1kb3duOiBcIlxcZjEwN1wiO1xuJGZhLXZhci1hbmdsZS1sZWZ0OiBcIlxcZjEwNFwiO1xuJGZhLXZhci1hbmdsZS1yaWdodDogXCJcXGYxMDVcIjtcbiRmYS12YXItYW5nbGUtdXA6IFwiXFxmMTA2XCI7XG4kZmEtdmFyLWFwcGxlOiBcIlxcZjE3OVwiO1xuJGZhLXZhci1hcmNoaXZlOiBcIlxcZjE4N1wiO1xuJGZhLXZhci1hcmVhLWNoYXJ0OiBcIlxcZjFmZVwiO1xuJGZhLXZhci1hcnJvdy1jaXJjbGUtZG93bjogXCJcXGYwYWJcIjtcbiRmYS12YXItYXJyb3ctY2lyY2xlLWxlZnQ6IFwiXFxmMGE4XCI7XG4kZmEtdmFyLWFycm93LWNpcmNsZS1vLWRvd246IFwiXFxmMDFhXCI7XG4kZmEtdmFyLWFycm93LWNpcmNsZS1vLWxlZnQ6IFwiXFxmMTkwXCI7XG4kZmEtdmFyLWFycm93LWNpcmNsZS1vLXJpZ2h0OiBcIlxcZjE4ZVwiO1xuJGZhLXZhci1hcnJvdy1jaXJjbGUtby11cDogXCJcXGYwMWJcIjtcbiRmYS12YXItYXJyb3ctY2lyY2xlLXJpZ2h0OiBcIlxcZjBhOVwiO1xuJGZhLXZhci1hcnJvdy1jaXJjbGUtdXA6IFwiXFxmMGFhXCI7XG4kZmEtdmFyLWFycm93LWRvd246IFwiXFxmMDYzXCI7XG4kZmEtdmFyLWFycm93LWxlZnQ6IFwiXFxmMDYwXCI7XG4kZmEtdmFyLWFycm93LXJpZ2h0OiBcIlxcZjA2MVwiO1xuJGZhLXZhci1hcnJvdy11cDogXCJcXGYwNjJcIjtcbiRmYS12YXItYXJyb3dzOiBcIlxcZjA0N1wiO1xuJGZhLXZhci1hcnJvd3MtYWx0OiBcIlxcZjBiMlwiO1xuJGZhLXZhci1hcnJvd3MtaDogXCJcXGYwN2VcIjtcbiRmYS12YXItYXJyb3dzLXY6IFwiXFxmMDdkXCI7XG4kZmEtdmFyLWFzdGVyaXNrOiBcIlxcZjA2OVwiO1xuJGZhLXZhci1hdDogXCJcXGYxZmFcIjtcbiRmYS12YXItYXV0b21vYmlsZTogXCJcXGYxYjlcIjtcbiRmYS12YXItYmFja3dhcmQ6IFwiXFxmMDRhXCI7XG4kZmEtdmFyLWJhbGFuY2Utc2NhbGU6IFwiXFxmMjRlXCI7XG4kZmEtdmFyLWJhbjogXCJcXGYwNWVcIjtcbiRmYS12YXItYmFuazogXCJcXGYxOWNcIjtcbiRmYS12YXItYmFyLWNoYXJ0OiBcIlxcZjA4MFwiO1xuJGZhLXZhci1iYXItY2hhcnQtbzogXCJcXGYwODBcIjtcbiRmYS12YXItYmFyY29kZTogXCJcXGYwMmFcIjtcbiRmYS12YXItYmFyczogXCJcXGYwYzlcIjtcbiRmYS12YXItYmF0dGVyeS0wOiBcIlxcZjI0NFwiO1xuJGZhLXZhci1iYXR0ZXJ5LTE6IFwiXFxmMjQzXCI7XG4kZmEtdmFyLWJhdHRlcnktMjogXCJcXGYyNDJcIjtcbiRmYS12YXItYmF0dGVyeS0zOiBcIlxcZjI0MVwiO1xuJGZhLXZhci1iYXR0ZXJ5LTQ6IFwiXFxmMjQwXCI7XG4kZmEtdmFyLWJhdHRlcnktZW1wdHk6IFwiXFxmMjQ0XCI7XG4kZmEtdmFyLWJhdHRlcnktZnVsbDogXCJcXGYyNDBcIjtcbiRmYS12YXItYmF0dGVyeS1oYWxmOiBcIlxcZjI0MlwiO1xuJGZhLXZhci1iYXR0ZXJ5LXF1YXJ0ZXI6IFwiXFxmMjQzXCI7XG4kZmEtdmFyLWJhdHRlcnktdGhyZWUtcXVhcnRlcnM6IFwiXFxmMjQxXCI7XG4kZmEtdmFyLWJlZDogXCJcXGYyMzZcIjtcbiRmYS12YXItYmVlcjogXCJcXGYwZmNcIjtcbiRmYS12YXItYmVoYW5jZTogXCJcXGYxYjRcIjtcbiRmYS12YXItYmVoYW5jZS1zcXVhcmU6IFwiXFxmMWI1XCI7XG4kZmEtdmFyLWJlbGw6IFwiXFxmMGYzXCI7XG4kZmEtdmFyLWJlbGwtbzogXCJcXGYwYTJcIjtcbiRmYS12YXItYmVsbC1zbGFzaDogXCJcXGYxZjZcIjtcbiRmYS12YXItYmVsbC1zbGFzaC1vOiBcIlxcZjFmN1wiO1xuJGZhLXZhci1iaWN5Y2xlOiBcIlxcZjIwNlwiO1xuJGZhLXZhci1iaW5vY3VsYXJzOiBcIlxcZjFlNVwiO1xuJGZhLXZhci1iaXJ0aGRheS1jYWtlOiBcIlxcZjFmZFwiO1xuJGZhLXZhci1iaXRidWNrZXQ6IFwiXFxmMTcxXCI7XG4kZmEtdmFyLWJpdGJ1Y2tldC1zcXVhcmU6IFwiXFxmMTcyXCI7XG4kZmEtdmFyLWJpdGNvaW46IFwiXFxmMTVhXCI7XG4kZmEtdmFyLWJsYWNrLXRpZTogXCJcXGYyN2VcIjtcbiRmYS12YXItYm9sZDogXCJcXGYwMzJcIjtcbiRmYS12YXItYm9sdDogXCJcXGYwZTdcIjtcbiRmYS12YXItYm9tYjogXCJcXGYxZTJcIjtcbiRmYS12YXItYm9vazogXCJcXGYwMmRcIjtcbiRmYS12YXItYm9va21hcms6IFwiXFxmMDJlXCI7XG4kZmEtdmFyLWJvb2ttYXJrLW86IFwiXFxmMDk3XCI7XG4kZmEtdmFyLWJyaWVmY2FzZTogXCJcXGYwYjFcIjtcbiRmYS12YXItYnRjOiBcIlxcZjE1YVwiO1xuJGZhLXZhci1idWc6IFwiXFxmMTg4XCI7XG4kZmEtdmFyLWJ1aWxkaW5nOiBcIlxcZjFhZFwiO1xuJGZhLXZhci1idWlsZGluZy1vOiBcIlxcZjBmN1wiO1xuJGZhLXZhci1idWxsaG9ybjogXCJcXGYwYTFcIjtcbiRmYS12YXItYnVsbHNleWU6IFwiXFxmMTQwXCI7XG4kZmEtdmFyLWJ1czogXCJcXGYyMDdcIjtcbiRmYS12YXItYnV5c2VsbGFkczogXCJcXGYyMGRcIjtcbiRmYS12YXItY2FiOiBcIlxcZjFiYVwiO1xuJGZhLXZhci1jYWxjdWxhdG9yOiBcIlxcZjFlY1wiO1xuJGZhLXZhci1jYWxlbmRhcjogXCJcXGYwNzNcIjtcbiRmYS12YXItY2FsZW5kYXItY2hlY2stbzogXCJcXGYyNzRcIjtcbiRmYS12YXItY2FsZW5kYXItbWludXMtbzogXCJcXGYyNzJcIjtcbiRmYS12YXItY2FsZW5kYXItbzogXCJcXGYxMzNcIjtcbiRmYS12YXItY2FsZW5kYXItcGx1cy1vOiBcIlxcZjI3MVwiO1xuJGZhLXZhci1jYWxlbmRhci10aW1lcy1vOiBcIlxcZjI3M1wiO1xuJGZhLXZhci1jYW1lcmE6IFwiXFxmMDMwXCI7XG4kZmEtdmFyLWNhbWVyYS1yZXRybzogXCJcXGYwODNcIjtcbiRmYS12YXItY2FyOiBcIlxcZjFiOVwiO1xuJGZhLXZhci1jYXJldC1kb3duOiBcIlxcZjBkN1wiO1xuJGZhLXZhci1jYXJldC1sZWZ0OiBcIlxcZjBkOVwiO1xuJGZhLXZhci1jYXJldC1yaWdodDogXCJcXGYwZGFcIjtcbiRmYS12YXItY2FyZXQtc3F1YXJlLW8tZG93bjogXCJcXGYxNTBcIjtcbiRmYS12YXItY2FyZXQtc3F1YXJlLW8tbGVmdDogXCJcXGYxOTFcIjtcbiRmYS12YXItY2FyZXQtc3F1YXJlLW8tcmlnaHQ6IFwiXFxmMTUyXCI7XG4kZmEtdmFyLWNhcmV0LXNxdWFyZS1vLXVwOiBcIlxcZjE1MVwiO1xuJGZhLXZhci1jYXJldC11cDogXCJcXGYwZDhcIjtcbiRmYS12YXItY2FydC1hcnJvdy1kb3duOiBcIlxcZjIxOFwiO1xuJGZhLXZhci1jYXJ0LXBsdXM6IFwiXFxmMjE3XCI7XG4kZmEtdmFyLWNjOiBcIlxcZjIwYVwiO1xuJGZhLXZhci1jYy1hbWV4OiBcIlxcZjFmM1wiO1xuJGZhLXZhci1jYy1kaW5lcnMtY2x1YjogXCJcXGYyNGNcIjtcbiRmYS12YXItY2MtZGlzY292ZXI6IFwiXFxmMWYyXCI7XG4kZmEtdmFyLWNjLWpjYjogXCJcXGYyNGJcIjtcbiRmYS12YXItY2MtbWFzdGVyY2FyZDogXCJcXGYxZjFcIjtcbiRmYS12YXItY2MtcGF5cGFsOiBcIlxcZjFmNFwiO1xuJGZhLXZhci1jYy1zdHJpcGU6IFwiXFxmMWY1XCI7XG4kZmEtdmFyLWNjLXZpc2E6IFwiXFxmMWYwXCI7XG4kZmEtdmFyLWNlcnRpZmljYXRlOiBcIlxcZjBhM1wiO1xuJGZhLXZhci1jaGFpbjogXCJcXGYwYzFcIjtcbiRmYS12YXItY2hhaW4tYnJva2VuOiBcIlxcZjEyN1wiO1xuJGZhLXZhci1jaGVjazogXCJcXGYwMGNcIjtcbiRmYS12YXItY2hlY2stY2lyY2xlOiBcIlxcZjA1OFwiO1xuJGZhLXZhci1jaGVjay1jaXJjbGUtbzogXCJcXGYwNWRcIjtcbiRmYS12YXItY2hlY2stc3F1YXJlOiBcIlxcZjE0YVwiO1xuJGZhLXZhci1jaGVjay1zcXVhcmUtbzogXCJcXGYwNDZcIjtcbiRmYS12YXItY2hldnJvbi1jaXJjbGUtZG93bjogXCJcXGYxM2FcIjtcbiRmYS12YXItY2hldnJvbi1jaXJjbGUtbGVmdDogXCJcXGYxMzdcIjtcbiRmYS12YXItY2hldnJvbi1jaXJjbGUtcmlnaHQ6IFwiXFxmMTM4XCI7XG4kZmEtdmFyLWNoZXZyb24tY2lyY2xlLXVwOiBcIlxcZjEzOVwiO1xuJGZhLXZhci1jaGV2cm9uLWRvd246IFwiXFxmMDc4XCI7XG4kZmEtdmFyLWNoZXZyb24tbGVmdDogXCJcXGYwNTNcIjtcbiRmYS12YXItY2hldnJvbi1yaWdodDogXCJcXGYwNTRcIjtcbiRmYS12YXItY2hldnJvbi11cDogXCJcXGYwNzdcIjtcbiRmYS12YXItY2hpbGQ6IFwiXFxmMWFlXCI7XG4kZmEtdmFyLWNocm9tZTogXCJcXGYyNjhcIjtcbiRmYS12YXItY2lyY2xlOiBcIlxcZjExMVwiO1xuJGZhLXZhci1jaXJjbGUtbzogXCJcXGYxMGNcIjtcbiRmYS12YXItY2lyY2xlLW8tbm90Y2g6IFwiXFxmMWNlXCI7XG4kZmEtdmFyLWNpcmNsZS10aGluOiBcIlxcZjFkYlwiO1xuJGZhLXZhci1jbGlwYm9hcmQ6IFwiXFxmMGVhXCI7XG4kZmEtdmFyLWNsb2NrLW86IFwiXFxmMDE3XCI7XG4kZmEtdmFyLWNsb25lOiBcIlxcZjI0ZFwiO1xuJGZhLXZhci1jbG9zZTogXCJcXGYwMGRcIjtcbiRmYS12YXItY2xvdWQ6IFwiXFxmMGMyXCI7XG4kZmEtdmFyLWNsb3VkLWRvd25sb2FkOiBcIlxcZjBlZFwiO1xuJGZhLXZhci1jbG91ZC11cGxvYWQ6IFwiXFxmMGVlXCI7XG4kZmEtdmFyLWNueTogXCJcXGYxNTdcIjtcbiRmYS12YXItY29kZTogXCJcXGYxMjFcIjtcbiRmYS12YXItY29kZS1mb3JrOiBcIlxcZjEyNlwiO1xuJGZhLXZhci1jb2RlcGVuOiBcIlxcZjFjYlwiO1xuJGZhLXZhci1jb2ZmZWU6IFwiXFxmMGY0XCI7XG4kZmEtdmFyLWNvZzogXCJcXGYwMTNcIjtcbiRmYS12YXItY29nczogXCJcXGYwODVcIjtcbiRmYS12YXItY29sdW1uczogXCJcXGYwZGJcIjtcbiRmYS12YXItY29tbWVudDogXCJcXGYwNzVcIjtcbiRmYS12YXItY29tbWVudC1vOiBcIlxcZjBlNVwiO1xuJGZhLXZhci1jb21tZW50aW5nOiBcIlxcZjI3YVwiO1xuJGZhLXZhci1jb21tZW50aW5nLW86IFwiXFxmMjdiXCI7XG4kZmEtdmFyLWNvbW1lbnRzOiBcIlxcZjA4NlwiO1xuJGZhLXZhci1jb21tZW50cy1vOiBcIlxcZjBlNlwiO1xuJGZhLXZhci1jb21wYXNzOiBcIlxcZjE0ZVwiO1xuJGZhLXZhci1jb21wcmVzczogXCJcXGYwNjZcIjtcbiRmYS12YXItY29ubmVjdGRldmVsb3A6IFwiXFxmMjBlXCI7XG4kZmEtdmFyLWNvbnRhbzogXCJcXGYyNmRcIjtcbiRmYS12YXItY29weTogXCJcXGYwYzVcIjtcbiRmYS12YXItY29weXJpZ2h0OiBcIlxcZjFmOVwiO1xuJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zOiBcIlxcZjI1ZVwiO1xuJGZhLXZhci1jcmVkaXQtY2FyZDogXCJcXGYwOWRcIjtcbiRmYS12YXItY3JvcDogXCJcXGYxMjVcIjtcbiRmYS12YXItY3Jvc3NoYWlyczogXCJcXGYwNWJcIjtcbiRmYS12YXItY3NzMzogXCJcXGYxM2NcIjtcbiRmYS12YXItY3ViZTogXCJcXGYxYjJcIjtcbiRmYS12YXItY3ViZXM6IFwiXFxmMWIzXCI7XG4kZmEtdmFyLWN1dDogXCJcXGYwYzRcIjtcbiRmYS12YXItY3V0bGVyeTogXCJcXGYwZjVcIjtcbiRmYS12YXItZGFzaGJvYXJkOiBcIlxcZjBlNFwiO1xuJGZhLXZhci1kYXNoY3ViZTogXCJcXGYyMTBcIjtcbiRmYS12YXItZGF0YWJhc2U6IFwiXFxmMWMwXCI7XG4kZmEtdmFyLWRlZGVudDogXCJcXGYwM2JcIjtcbiRmYS12YXItZGVsaWNpb3VzOiBcIlxcZjFhNVwiO1xuJGZhLXZhci1kZXNrdG9wOiBcIlxcZjEwOFwiO1xuJGZhLXZhci1kZXZpYW50YXJ0OiBcIlxcZjFiZFwiO1xuJGZhLXZhci1kaWFtb25kOiBcIlxcZjIxOVwiO1xuJGZhLXZhci1kaWdnOiBcIlxcZjFhNlwiO1xuJGZhLXZhci1kb2xsYXI6IFwiXFxmMTU1XCI7XG4kZmEtdmFyLWRvdC1jaXJjbGUtbzogXCJcXGYxOTJcIjtcbiRmYS12YXItZG93bmxvYWQ6IFwiXFxmMDE5XCI7XG4kZmEtdmFyLWRyaWJiYmxlOiBcIlxcZjE3ZFwiO1xuJGZhLXZhci1kcm9wYm94OiBcIlxcZjE2YlwiO1xuJGZhLXZhci1kcnVwYWw6IFwiXFxmMWE5XCI7XG4kZmEtdmFyLWVkaXQ6IFwiXFxmMDQ0XCI7XG4kZmEtdmFyLWVqZWN0OiBcIlxcZjA1MlwiO1xuJGZhLXZhci1lbGxpcHNpcy1oOiBcIlxcZjE0MVwiO1xuJGZhLXZhci1lbGxpcHNpcy12OiBcIlxcZjE0MlwiO1xuJGZhLXZhci1lbXBpcmU6IFwiXFxmMWQxXCI7XG4kZmEtdmFyLWVudmVsb3BlOiBcIlxcZjBlMFwiO1xuJGZhLXZhci1lbnZlbG9wZS1vOiBcIlxcZjAwM1wiO1xuJGZhLXZhci1lbnZlbG9wZS1zcXVhcmU6IFwiXFxmMTk5XCI7XG4kZmEtdmFyLWVyYXNlcjogXCJcXGYxMmRcIjtcbiRmYS12YXItZXVyOiBcIlxcZjE1M1wiO1xuJGZhLXZhci1ldXJvOiBcIlxcZjE1M1wiO1xuJGZhLXZhci1leGNoYW5nZTogXCJcXGYwZWNcIjtcbiRmYS12YXItZXhjbGFtYXRpb246IFwiXFxmMTJhXCI7XG4kZmEtdmFyLWV4Y2xhbWF0aW9uLWNpcmNsZTogXCJcXGYwNmFcIjtcbiRmYS12YXItZXhjbGFtYXRpb24tdHJpYW5nbGU6IFwiXFxmMDcxXCI7XG4kZmEtdmFyLWV4cGFuZDogXCJcXGYwNjVcIjtcbiRmYS12YXItZXhwZWRpdGVkc3NsOiBcIlxcZjIzZVwiO1xuJGZhLXZhci1leHRlcm5hbC1saW5rOiBcIlxcZjA4ZVwiO1xuJGZhLXZhci1leHRlcm5hbC1saW5rLXNxdWFyZTogXCJcXGYxNGNcIjtcbiRmYS12YXItZXllOiBcIlxcZjA2ZVwiO1xuJGZhLXZhci1leWUtc2xhc2g6IFwiXFxmMDcwXCI7XG4kZmEtdmFyLWV5ZWRyb3BwZXI6IFwiXFxmMWZiXCI7XG4kZmEtdmFyLWZhY2Vib29rOiBcIlxcZjA5YVwiO1xuJGZhLXZhci1mYWNlYm9vay1mOiBcIlxcZjA5YVwiO1xuJGZhLXZhci1mYWNlYm9vay1vZmZpY2lhbDogXCJcXGYyMzBcIjtcbiRmYS12YXItZmFjZWJvb2stc3F1YXJlOiBcIlxcZjA4MlwiO1xuJGZhLXZhci1mYXN0LWJhY2t3YXJkOiBcIlxcZjA0OVwiO1xuJGZhLXZhci1mYXN0LWZvcndhcmQ6IFwiXFxmMDUwXCI7XG4kZmEtdmFyLWZheDogXCJcXGYxYWNcIjtcbiRmYS12YXItZmVlZDogXCJcXGYwOWVcIjtcbiRmYS12YXItZmVtYWxlOiBcIlxcZjE4MlwiO1xuJGZhLXZhci1maWdodGVyLWpldDogXCJcXGYwZmJcIjtcbiRmYS12YXItZmlsZTogXCJcXGYxNWJcIjtcbiRmYS12YXItZmlsZS1hcmNoaXZlLW86IFwiXFxmMWM2XCI7XG4kZmEtdmFyLWZpbGUtYXVkaW8tbzogXCJcXGYxYzdcIjtcbiRmYS12YXItZmlsZS1jb2RlLW86IFwiXFxmMWM5XCI7XG4kZmEtdmFyLWZpbGUtZXhjZWwtbzogXCJcXGYxYzNcIjtcbiRmYS12YXItZmlsZS1pbWFnZS1vOiBcIlxcZjFjNVwiO1xuJGZhLXZhci1maWxlLW1vdmllLW86IFwiXFxmMWM4XCI7XG4kZmEtdmFyLWZpbGUtbzogXCJcXGYwMTZcIjtcbiRmYS12YXItZmlsZS1wZGYtbzogXCJcXGYxYzFcIjtcbiRmYS12YXItZmlsZS1waG90by1vOiBcIlxcZjFjNVwiO1xuJGZhLXZhci1maWxlLXBpY3R1cmUtbzogXCJcXGYxYzVcIjtcbiRmYS12YXItZmlsZS1wb3dlcnBvaW50LW86IFwiXFxmMWM0XCI7XG4kZmEtdmFyLWZpbGUtc291bmQtbzogXCJcXGYxYzdcIjtcbiRmYS12YXItZmlsZS10ZXh0OiBcIlxcZjE1Y1wiO1xuJGZhLXZhci1maWxlLXRleHQtbzogXCJcXGYwZjZcIjtcbiRmYS12YXItZmlsZS12aWRlby1vOiBcIlxcZjFjOFwiO1xuJGZhLXZhci1maWxlLXdvcmQtbzogXCJcXGYxYzJcIjtcbiRmYS12YXItZmlsZS16aXAtbzogXCJcXGYxYzZcIjtcbiRmYS12YXItZmlsZXMtbzogXCJcXGYwYzVcIjtcbiRmYS12YXItZmlsbTogXCJcXGYwMDhcIjtcbiRmYS12YXItZmlsdGVyOiBcIlxcZjBiMFwiO1xuJGZhLXZhci1maXJlOiBcIlxcZjA2ZFwiO1xuJGZhLXZhci1maXJlLWV4dGluZ3Vpc2hlcjogXCJcXGYxMzRcIjtcbiRmYS12YXItZmlyZWZveDogXCJcXGYyNjlcIjtcbiRmYS12YXItZmxhZzogXCJcXGYwMjRcIjtcbiRmYS12YXItZmxhZy1jaGVja2VyZWQ6IFwiXFxmMTFlXCI7XG4kZmEtdmFyLWZsYWctbzogXCJcXGYxMWRcIjtcbiRmYS12YXItZmxhc2g6IFwiXFxmMGU3XCI7XG4kZmEtdmFyLWZsYXNrOiBcIlxcZjBjM1wiO1xuJGZhLXZhci1mbGlja3I6IFwiXFxmMTZlXCI7XG4kZmEtdmFyLWZsb3BweS1vOiBcIlxcZjBjN1wiO1xuJGZhLXZhci1mb2xkZXI6IFwiXFxmMDdiXCI7XG4kZmEtdmFyLWZvbGRlci1vOiBcIlxcZjExNFwiO1xuJGZhLXZhci1mb2xkZXItb3BlbjogXCJcXGYwN2NcIjtcbiRmYS12YXItZm9sZGVyLW9wZW4tbzogXCJcXGYxMTVcIjtcbiRmYS12YXItZm9udDogXCJcXGYwMzFcIjtcbiRmYS12YXItZm9udGljb25zOiBcIlxcZjI4MFwiO1xuJGZhLXZhci1mb3J1bWJlZTogXCJcXGYyMTFcIjtcbiRmYS12YXItZm9yd2FyZDogXCJcXGYwNGVcIjtcbiRmYS12YXItZm91cnNxdWFyZTogXCJcXGYxODBcIjtcbiRmYS12YXItZnJvd24tbzogXCJcXGYxMTlcIjtcbiRmYS12YXItZnV0Ym9sLW86IFwiXFxmMWUzXCI7XG4kZmEtdmFyLWdhbWVwYWQ6IFwiXFxmMTFiXCI7XG4kZmEtdmFyLWdhdmVsOiBcIlxcZjBlM1wiO1xuJGZhLXZhci1nYnA6IFwiXFxmMTU0XCI7XG4kZmEtdmFyLWdlOiBcIlxcZjFkMVwiO1xuJGZhLXZhci1nZWFyOiBcIlxcZjAxM1wiO1xuJGZhLXZhci1nZWFyczogXCJcXGYwODVcIjtcbiRmYS12YXItZ2VuZGVybGVzczogXCJcXGYyMmRcIjtcbiRmYS12YXItZ2V0LXBvY2tldDogXCJcXGYyNjVcIjtcbiRmYS12YXItZ2c6IFwiXFxmMjYwXCI7XG4kZmEtdmFyLWdnLWNpcmNsZTogXCJcXGYyNjFcIjtcbiRmYS12YXItZ2lmdDogXCJcXGYwNmJcIjtcbiRmYS12YXItZ2l0OiBcIlxcZjFkM1wiO1xuJGZhLXZhci1naXQtc3F1YXJlOiBcIlxcZjFkMlwiO1xuJGZhLXZhci1naXRodWI6IFwiXFxmMDliXCI7XG4kZmEtdmFyLWdpdGh1Yi1hbHQ6IFwiXFxmMTEzXCI7XG4kZmEtdmFyLWdpdGh1Yi1zcXVhcmU6IFwiXFxmMDkyXCI7XG4kZmEtdmFyLWdpdHRpcDogXCJcXGYxODRcIjtcbiRmYS12YXItZ2xhc3M6IFwiXFxmMDAwXCI7XG4kZmEtdmFyLWdsb2JlOiBcIlxcZjBhY1wiO1xuJGZhLXZhci1nb29nbGU6IFwiXFxmMWEwXCI7XG4kZmEtdmFyLWdvb2dsZS1wbHVzOiBcIlxcZjBkNVwiO1xuJGZhLXZhci1nb29nbGUtcGx1cy1zcXVhcmU6IFwiXFxmMGQ0XCI7XG4kZmEtdmFyLWdvb2dsZS13YWxsZXQ6IFwiXFxmMWVlXCI7XG4kZmEtdmFyLWdyYWR1YXRpb24tY2FwOiBcIlxcZjE5ZFwiO1xuJGZhLXZhci1ncmF0aXBheTogXCJcXGYxODRcIjtcbiRmYS12YXItZ3JvdXA6IFwiXFxmMGMwXCI7XG4kZmEtdmFyLWgtc3F1YXJlOiBcIlxcZjBmZFwiO1xuJGZhLXZhci1oYWNrZXItbmV3czogXCJcXGYxZDRcIjtcbiRmYS12YXItaGFuZC1ncmFiLW86IFwiXFxmMjU1XCI7XG4kZmEtdmFyLWhhbmQtbGl6YXJkLW86IFwiXFxmMjU4XCI7XG4kZmEtdmFyLWhhbmQtby1kb3duOiBcIlxcZjBhN1wiO1xuJGZhLXZhci1oYW5kLW8tbGVmdDogXCJcXGYwYTVcIjtcbiRmYS12YXItaGFuZC1vLXJpZ2h0OiBcIlxcZjBhNFwiO1xuJGZhLXZhci1oYW5kLW8tdXA6IFwiXFxmMGE2XCI7XG4kZmEtdmFyLWhhbmQtcGFwZXItbzogXCJcXGYyNTZcIjtcbiRmYS12YXItaGFuZC1wZWFjZS1vOiBcIlxcZjI1YlwiO1xuJGZhLXZhci1oYW5kLXBvaW50ZXItbzogXCJcXGYyNWFcIjtcbiRmYS12YXItaGFuZC1yb2NrLW86IFwiXFxmMjU1XCI7XG4kZmEtdmFyLWhhbmQtc2Npc3NvcnMtbzogXCJcXGYyNTdcIjtcbiRmYS12YXItaGFuZC1zcG9jay1vOiBcIlxcZjI1OVwiO1xuJGZhLXZhci1oYW5kLXN0b3AtbzogXCJcXGYyNTZcIjtcbiRmYS12YXItaGRkLW86IFwiXFxmMGEwXCI7XG4kZmEtdmFyLWhlYWRlcjogXCJcXGYxZGNcIjtcbiRmYS12YXItaGVhZHBob25lczogXCJcXGYwMjVcIjtcbiRmYS12YXItaGVhcnQ6IFwiXFxmMDA0XCI7XG4kZmEtdmFyLWhlYXJ0LW86IFwiXFxmMDhhXCI7XG4kZmEtdmFyLWhlYXJ0YmVhdDogXCJcXGYyMWVcIjtcbiRmYS12YXItaGlzdG9yeTogXCJcXGYxZGFcIjtcbiRmYS12YXItaG9tZTogXCJcXGYwMTVcIjtcbiRmYS12YXItaG9zcGl0YWwtbzogXCJcXGYwZjhcIjtcbiRmYS12YXItaG90ZWw6IFwiXFxmMjM2XCI7XG4kZmEtdmFyLWhvdXJnbGFzczogXCJcXGYyNTRcIjtcbiRmYS12YXItaG91cmdsYXNzLTE6IFwiXFxmMjUxXCI7XG4kZmEtdmFyLWhvdXJnbGFzcy0yOiBcIlxcZjI1MlwiO1xuJGZhLXZhci1ob3VyZ2xhc3MtMzogXCJcXGYyNTNcIjtcbiRmYS12YXItaG91cmdsYXNzLWVuZDogXCJcXGYyNTNcIjtcbiRmYS12YXItaG91cmdsYXNzLWhhbGY6IFwiXFxmMjUyXCI7XG4kZmEtdmFyLWhvdXJnbGFzcy1vOiBcIlxcZjI1MFwiO1xuJGZhLXZhci1ob3VyZ2xhc3Mtc3RhcnQ6IFwiXFxmMjUxXCI7XG4kZmEtdmFyLWhvdXp6OiBcIlxcZjI3Y1wiO1xuJGZhLXZhci1odG1sNTogXCJcXGYxM2JcIjtcbiRmYS12YXItaS1jdXJzb3I6IFwiXFxmMjQ2XCI7XG4kZmEtdmFyLWlsczogXCJcXGYyMGJcIjtcbiRmYS12YXItaW1hZ2U6IFwiXFxmMDNlXCI7XG4kZmEtdmFyLWluYm94OiBcIlxcZjAxY1wiO1xuJGZhLXZhci1pbmRlbnQ6IFwiXFxmMDNjXCI7XG4kZmEtdmFyLWluZHVzdHJ5OiBcIlxcZjI3NVwiO1xuJGZhLXZhci1pbmZvOiBcIlxcZjEyOVwiO1xuJGZhLXZhci1pbmZvLWNpcmNsZTogXCJcXGYwNWFcIjtcbiRmYS12YXItaW5yOiBcIlxcZjE1NlwiO1xuJGZhLXZhci1pbnN0YWdyYW06IFwiXFxmMTZkXCI7XG4kZmEtdmFyLWluc3RpdHV0aW9uOiBcIlxcZjE5Y1wiO1xuJGZhLXZhci1pbnRlcm5ldC1leHBsb3JlcjogXCJcXGYyNmJcIjtcbiRmYS12YXItaW50ZXJzZXg6IFwiXFxmMjI0XCI7XG4kZmEtdmFyLWlveGhvc3Q6IFwiXFxmMjA4XCI7XG4kZmEtdmFyLWl0YWxpYzogXCJcXGYwMzNcIjtcbiRmYS12YXItam9vbWxhOiBcIlxcZjFhYVwiO1xuJGZhLXZhci1qcHk6IFwiXFxmMTU3XCI7XG4kZmEtdmFyLWpzZmlkZGxlOiBcIlxcZjFjY1wiO1xuJGZhLXZhci1rZXk6IFwiXFxmMDg0XCI7XG4kZmEtdmFyLWtleWJvYXJkLW86IFwiXFxmMTFjXCI7XG4kZmEtdmFyLWtydzogXCJcXGYxNTlcIjtcbiRmYS12YXItbGFuZ3VhZ2U6IFwiXFxmMWFiXCI7XG4kZmEtdmFyLWxhcHRvcDogXCJcXGYxMDlcIjtcbiRmYS12YXItbGFzdGZtOiBcIlxcZjIwMlwiO1xuJGZhLXZhci1sYXN0Zm0tc3F1YXJlOiBcIlxcZjIwM1wiO1xuJGZhLXZhci1sZWFmOiBcIlxcZjA2Y1wiO1xuJGZhLXZhci1sZWFucHViOiBcIlxcZjIxMlwiO1xuJGZhLXZhci1sZWdhbDogXCJcXGYwZTNcIjtcbiRmYS12YXItbGVtb24tbzogXCJcXGYwOTRcIjtcbiRmYS12YXItbGV2ZWwtZG93bjogXCJcXGYxNDlcIjtcbiRmYS12YXItbGV2ZWwtdXA6IFwiXFxmMTQ4XCI7XG4kZmEtdmFyLWxpZmUtYm91eTogXCJcXGYxY2RcIjtcbiRmYS12YXItbGlmZS1idW95OiBcIlxcZjFjZFwiO1xuJGZhLXZhci1saWZlLXJpbmc6IFwiXFxmMWNkXCI7XG4kZmEtdmFyLWxpZmUtc2F2ZXI6IFwiXFxmMWNkXCI7XG4kZmEtdmFyLWxpZ2h0YnVsYi1vOiBcIlxcZjBlYlwiO1xuJGZhLXZhci1saW5lLWNoYXJ0OiBcIlxcZjIwMVwiO1xuJGZhLXZhci1saW5rOiBcIlxcZjBjMVwiO1xuJGZhLXZhci1saW5rZWRpbjogXCJcXGYwZTFcIjtcbiRmYS12YXItbGlua2VkaW4tc3F1YXJlOiBcIlxcZjA4Y1wiO1xuJGZhLXZhci1saW51eDogXCJcXGYxN2NcIjtcbiRmYS12YXItbGlzdDogXCJcXGYwM2FcIjtcbiRmYS12YXItbGlzdC1hbHQ6IFwiXFxmMDIyXCI7XG4kZmEtdmFyLWxpc3Qtb2w6IFwiXFxmMGNiXCI7XG4kZmEtdmFyLWxpc3QtdWw6IFwiXFxmMGNhXCI7XG4kZmEtdmFyLWxvY2F0aW9uLWFycm93OiBcIlxcZjEyNFwiO1xuJGZhLXZhci1sb2NrOiBcIlxcZjAyM1wiO1xuJGZhLXZhci1sb25nLWFycm93LWRvd246IFwiXFxmMTc1XCI7XG4kZmEtdmFyLWxvbmctYXJyb3ctbGVmdDogXCJcXGYxNzdcIjtcbiRmYS12YXItbG9uZy1hcnJvdy1yaWdodDogXCJcXGYxNzhcIjtcbiRmYS12YXItbG9uZy1hcnJvdy11cDogXCJcXGYxNzZcIjtcbiRmYS12YXItbWFnaWM6IFwiXFxmMGQwXCI7XG4kZmEtdmFyLW1hZ25ldDogXCJcXGYwNzZcIjtcbiRmYS12YXItbWFpbC1mb3J3YXJkOiBcIlxcZjA2NFwiO1xuJGZhLXZhci1tYWlsLXJlcGx5OiBcIlxcZjExMlwiO1xuJGZhLXZhci1tYWlsLXJlcGx5LWFsbDogXCJcXGYxMjJcIjtcbiRmYS12YXItbWFsZTogXCJcXGYxODNcIjtcbiRmYS12YXItbWFwOiBcIlxcZjI3OVwiO1xuJGZhLXZhci1tYXAtbWFya2VyOiBcIlxcZjA0MVwiO1xuJGZhLXZhci1tYXAtbzogXCJcXGYyNzhcIjtcbiRmYS12YXItbWFwLXBpbjogXCJcXGYyNzZcIjtcbiRmYS12YXItbWFwLXNpZ25zOiBcIlxcZjI3N1wiO1xuJGZhLXZhci1tYXJzOiBcIlxcZjIyMlwiO1xuJGZhLXZhci1tYXJzLWRvdWJsZTogXCJcXGYyMjdcIjtcbiRmYS12YXItbWFycy1zdHJva2U6IFwiXFxmMjI5XCI7XG4kZmEtdmFyLW1hcnMtc3Ryb2tlLWg6IFwiXFxmMjJiXCI7XG4kZmEtdmFyLW1hcnMtc3Ryb2tlLXY6IFwiXFxmMjJhXCI7XG4kZmEtdmFyLW1heGNkbjogXCJcXGYxMzZcIjtcbiRmYS12YXItbWVhbnBhdGg6IFwiXFxmMjBjXCI7XG4kZmEtdmFyLW1lZGl1bTogXCJcXGYyM2FcIjtcbiRmYS12YXItbWVka2l0OiBcIlxcZjBmYVwiO1xuJGZhLXZhci1tZWgtbzogXCJcXGYxMWFcIjtcbiRmYS12YXItbWVyY3VyeTogXCJcXGYyMjNcIjtcbiRmYS12YXItbWljcm9waG9uZTogXCJcXGYxMzBcIjtcbiRmYS12YXItbWljcm9waG9uZS1zbGFzaDogXCJcXGYxMzFcIjtcbiRmYS12YXItbWludXM6IFwiXFxmMDY4XCI7XG4kZmEtdmFyLW1pbnVzLWNpcmNsZTogXCJcXGYwNTZcIjtcbiRmYS12YXItbWludXMtc3F1YXJlOiBcIlxcZjE0NlwiO1xuJGZhLXZhci1taW51cy1zcXVhcmUtbzogXCJcXGYxNDdcIjtcbiRmYS12YXItbW9iaWxlOiBcIlxcZjEwYlwiO1xuJGZhLXZhci1tb2JpbGUtcGhvbmU6IFwiXFxmMTBiXCI7XG4kZmEtdmFyLW1vbmV5OiBcIlxcZjBkNlwiO1xuJGZhLXZhci1tb29uLW86IFwiXFxmMTg2XCI7XG4kZmEtdmFyLW1vcnRhci1ib2FyZDogXCJcXGYxOWRcIjtcbiRmYS12YXItbW90b3JjeWNsZTogXCJcXGYyMWNcIjtcbiRmYS12YXItbW91c2UtcG9pbnRlcjogXCJcXGYyNDVcIjtcbiRmYS12YXItbXVzaWM6IFwiXFxmMDAxXCI7XG4kZmEtdmFyLW5hdmljb246IFwiXFxmMGM5XCI7XG4kZmEtdmFyLW5ldXRlcjogXCJcXGYyMmNcIjtcbiRmYS12YXItbmV3c3BhcGVyLW86IFwiXFxmMWVhXCI7XG4kZmEtdmFyLW9iamVjdC1ncm91cDogXCJcXGYyNDdcIjtcbiRmYS12YXItb2JqZWN0LXVuZ3JvdXA6IFwiXFxmMjQ4XCI7XG4kZmEtdmFyLW9kbm9rbGFzc25pa2k6IFwiXFxmMjYzXCI7XG4kZmEtdmFyLW9kbm9rbGFzc25pa2ktc3F1YXJlOiBcIlxcZjI2NFwiO1xuJGZhLXZhci1vcGVuY2FydDogXCJcXGYyM2RcIjtcbiRmYS12YXItb3BlbmlkOiBcIlxcZjE5YlwiO1xuJGZhLXZhci1vcGVyYTogXCJcXGYyNmFcIjtcbiRmYS12YXItb3B0aW4tbW9uc3RlcjogXCJcXGYyM2NcIjtcbiRmYS12YXItb3V0ZGVudDogXCJcXGYwM2JcIjtcbiRmYS12YXItcGFnZWxpbmVzOiBcIlxcZjE4Y1wiO1xuJGZhLXZhci1wYWludC1icnVzaDogXCJcXGYxZmNcIjtcbiRmYS12YXItcGFwZXItcGxhbmU6IFwiXFxmMWQ4XCI7XG4kZmEtdmFyLXBhcGVyLXBsYW5lLW86IFwiXFxmMWQ5XCI7XG4kZmEtdmFyLXBhcGVyY2xpcDogXCJcXGYwYzZcIjtcbiRmYS12YXItcGFyYWdyYXBoOiBcIlxcZjFkZFwiO1xuJGZhLXZhci1wYXN0ZTogXCJcXGYwZWFcIjtcbiRmYS12YXItcGF1c2U6IFwiXFxmMDRjXCI7XG4kZmEtdmFyLXBhdzogXCJcXGYxYjBcIjtcbiRmYS12YXItcGF5cGFsOiBcIlxcZjFlZFwiO1xuJGZhLXZhci1wZW5jaWw6IFwiXFxmMDQwXCI7XG4kZmEtdmFyLXBlbmNpbC1zcXVhcmU6IFwiXFxmMTRiXCI7XG4kZmEtdmFyLXBlbmNpbC1zcXVhcmUtbzogXCJcXGYwNDRcIjtcbiRmYS12YXItcGhvbmU6IFwiXFxmMDk1XCI7XG4kZmEtdmFyLXBob25lLXNxdWFyZTogXCJcXGYwOThcIjtcbiRmYS12YXItcGhvdG86IFwiXFxmMDNlXCI7XG4kZmEtdmFyLXBpY3R1cmUtbzogXCJcXGYwM2VcIjtcbiRmYS12YXItcGllLWNoYXJ0OiBcIlxcZjIwMFwiO1xuJGZhLXZhci1waWVkLXBpcGVyOiBcIlxcZjFhN1wiO1xuJGZhLXZhci1waWVkLXBpcGVyLWFsdDogXCJcXGYxYThcIjtcbiRmYS12YXItcGludGVyZXN0OiBcIlxcZjBkMlwiO1xuJGZhLXZhci1waW50ZXJlc3QtcDogXCJcXGYyMzFcIjtcbiRmYS12YXItcGludGVyZXN0LXNxdWFyZTogXCJcXGYwZDNcIjtcbiRmYS12YXItcGxhbmU6IFwiXFxmMDcyXCI7XG4kZmEtdmFyLXBsYXk6IFwiXFxmMDRiXCI7XG4kZmEtdmFyLXBsYXktY2lyY2xlOiBcIlxcZjE0NFwiO1xuJGZhLXZhci1wbGF5LWNpcmNsZS1vOiBcIlxcZjAxZFwiO1xuJGZhLXZhci1wbHVnOiBcIlxcZjFlNlwiO1xuJGZhLXZhci1wbHVzOiBcIlxcZjA2N1wiO1xuJGZhLXZhci1wbHVzLWNpcmNsZTogXCJcXGYwNTVcIjtcbiRmYS12YXItcGx1cy1zcXVhcmU6IFwiXFxmMGZlXCI7XG4kZmEtdmFyLXBsdXMtc3F1YXJlLW86IFwiXFxmMTk2XCI7XG4kZmEtdmFyLXBvd2VyLW9mZjogXCJcXGYwMTFcIjtcbiRmYS12YXItcHJpbnQ6IFwiXFxmMDJmXCI7XG4kZmEtdmFyLXB1enpsZS1waWVjZTogXCJcXGYxMmVcIjtcbiRmYS12YXItcXE6IFwiXFxmMWQ2XCI7XG4kZmEtdmFyLXFyY29kZTogXCJcXGYwMjlcIjtcbiRmYS12YXItcXVlc3Rpb246IFwiXFxmMTI4XCI7XG4kZmEtdmFyLXF1ZXN0aW9uLWNpcmNsZTogXCJcXGYwNTlcIjtcbiRmYS12YXItcXVvdGUtbGVmdDogXCJcXGYxMGRcIjtcbiRmYS12YXItcXVvdGUtcmlnaHQ6IFwiXFxmMTBlXCI7XG4kZmEtdmFyLXJhOiBcIlxcZjFkMFwiO1xuJGZhLXZhci1yYW5kb206IFwiXFxmMDc0XCI7XG4kZmEtdmFyLXJlYmVsOiBcIlxcZjFkMFwiO1xuJGZhLXZhci1yZWN5Y2xlOiBcIlxcZjFiOFwiO1xuJGZhLXZhci1yZWRkaXQ6IFwiXFxmMWExXCI7XG4kZmEtdmFyLXJlZGRpdC1zcXVhcmU6IFwiXFxmMWEyXCI7XG4kZmEtdmFyLXJlZnJlc2g6IFwiXFxmMDIxXCI7XG4kZmEtdmFyLXJlZ2lzdGVyZWQ6IFwiXFxmMjVkXCI7XG4kZmEtdmFyLXJlbW92ZTogXCJcXGYwMGRcIjtcbiRmYS12YXItcmVucmVuOiBcIlxcZjE4YlwiO1xuJGZhLXZhci1yZW9yZGVyOiBcIlxcZjBjOVwiO1xuJGZhLXZhci1yZXBlYXQ6IFwiXFxmMDFlXCI7XG4kZmEtdmFyLXJlcGx5OiBcIlxcZjExMlwiO1xuJGZhLXZhci1yZXBseS1hbGw6IFwiXFxmMTIyXCI7XG4kZmEtdmFyLXJldHdlZXQ6IFwiXFxmMDc5XCI7XG4kZmEtdmFyLXJtYjogXCJcXGYxNTdcIjtcbiRmYS12YXItcm9hZDogXCJcXGYwMThcIjtcbiRmYS12YXItcm9ja2V0OiBcIlxcZjEzNVwiO1xuJGZhLXZhci1yb3RhdGUtbGVmdDogXCJcXGYwZTJcIjtcbiRmYS12YXItcm90YXRlLXJpZ2h0OiBcIlxcZjAxZVwiO1xuJGZhLXZhci1yb3VibGU6IFwiXFxmMTU4XCI7XG4kZmEtdmFyLXJzczogXCJcXGYwOWVcIjtcbiRmYS12YXItcnNzLXNxdWFyZTogXCJcXGYxNDNcIjtcbiRmYS12YXItcnViOiBcIlxcZjE1OFwiO1xuJGZhLXZhci1ydWJsZTogXCJcXGYxNThcIjtcbiRmYS12YXItcnVwZWU6IFwiXFxmMTU2XCI7XG4kZmEtdmFyLXNhZmFyaTogXCJcXGYyNjdcIjtcbiRmYS12YXItc2F2ZTogXCJcXGYwYzdcIjtcbiRmYS12YXItc2Npc3NvcnM6IFwiXFxmMGM0XCI7XG4kZmEtdmFyLXNlYXJjaDogXCJcXGYwMDJcIjtcbiRmYS12YXItc2VhcmNoLW1pbnVzOiBcIlxcZjAxMFwiO1xuJGZhLXZhci1zZWFyY2gtcGx1czogXCJcXGYwMGVcIjtcbiRmYS12YXItc2VsbHN5OiBcIlxcZjIxM1wiO1xuJGZhLXZhci1zZW5kOiBcIlxcZjFkOFwiO1xuJGZhLXZhci1zZW5kLW86IFwiXFxmMWQ5XCI7XG4kZmEtdmFyLXNlcnZlcjogXCJcXGYyMzNcIjtcbiRmYS12YXItc2hhcmU6IFwiXFxmMDY0XCI7XG4kZmEtdmFyLXNoYXJlLWFsdDogXCJcXGYxZTBcIjtcbiRmYS12YXItc2hhcmUtYWx0LXNxdWFyZTogXCJcXGYxZTFcIjtcbiRmYS12YXItc2hhcmUtc3F1YXJlOiBcIlxcZjE0ZFwiO1xuJGZhLXZhci1zaGFyZS1zcXVhcmUtbzogXCJcXGYwNDVcIjtcbiRmYS12YXItc2hla2VsOiBcIlxcZjIwYlwiO1xuJGZhLXZhci1zaGVxZWw6IFwiXFxmMjBiXCI7XG4kZmEtdmFyLXNoaWVsZDogXCJcXGYxMzJcIjtcbiRmYS12YXItc2hpcDogXCJcXGYyMWFcIjtcbiRmYS12YXItc2hpcnRzaW5idWxrOiBcIlxcZjIxNFwiO1xuJGZhLXZhci1zaG9wcGluZy1jYXJ0OiBcIlxcZjA3YVwiO1xuJGZhLXZhci1zaWduLWluOiBcIlxcZjA5MFwiO1xuJGZhLXZhci1zaWduLW91dDogXCJcXGYwOGJcIjtcbiRmYS12YXItc2lnbmFsOiBcIlxcZjAxMlwiO1xuJGZhLXZhci1zaW1wbHlidWlsdDogXCJcXGYyMTVcIjtcbiRmYS12YXItc2l0ZW1hcDogXCJcXGYwZThcIjtcbiRmYS12YXItc2t5YXRsYXM6IFwiXFxmMjE2XCI7XG4kZmEtdmFyLXNreXBlOiBcIlxcZjE3ZVwiO1xuJGZhLXZhci1zbGFjazogXCJcXGYxOThcIjtcbiRmYS12YXItc2xpZGVyczogXCJcXGYxZGVcIjtcbiRmYS12YXItc2xpZGVzaGFyZTogXCJcXGYxZTdcIjtcbiRmYS12YXItc21pbGUtbzogXCJcXGYxMThcIjtcbiRmYS12YXItc29jY2VyLWJhbGwtbzogXCJcXGYxZTNcIjtcbiRmYS12YXItc29ydDogXCJcXGYwZGNcIjtcbiRmYS12YXItc29ydC1hbHBoYS1hc2M6IFwiXFxmMTVkXCI7XG4kZmEtdmFyLXNvcnQtYWxwaGEtZGVzYzogXCJcXGYxNWVcIjtcbiRmYS12YXItc29ydC1hbW91bnQtYXNjOiBcIlxcZjE2MFwiO1xuJGZhLXZhci1zb3J0LWFtb3VudC1kZXNjOiBcIlxcZjE2MVwiO1xuJGZhLXZhci1zb3J0LWFzYzogXCJcXGYwZGVcIjtcbiRmYS12YXItc29ydC1kZXNjOiBcIlxcZjBkZFwiO1xuJGZhLXZhci1zb3J0LWRvd246IFwiXFxmMGRkXCI7XG4kZmEtdmFyLXNvcnQtbnVtZXJpYy1hc2M6IFwiXFxmMTYyXCI7XG4kZmEtdmFyLXNvcnQtbnVtZXJpYy1kZXNjOiBcIlxcZjE2M1wiO1xuJGZhLXZhci1zb3J0LXVwOiBcIlxcZjBkZVwiO1xuJGZhLXZhci1zb3VuZGNsb3VkOiBcIlxcZjFiZVwiO1xuJGZhLXZhci1zcGFjZS1zaHV0dGxlOiBcIlxcZjE5N1wiO1xuJGZhLXZhci1zcGlubmVyOiBcIlxcZjExMFwiO1xuJGZhLXZhci1zcG9vbjogXCJcXGYxYjFcIjtcbiRmYS12YXItc3BvdGlmeTogXCJcXGYxYmNcIjtcbiRmYS12YXItc3F1YXJlOiBcIlxcZjBjOFwiO1xuJGZhLXZhci1zcXVhcmUtbzogXCJcXGYwOTZcIjtcbiRmYS12YXItc3RhY2stZXhjaGFuZ2U6IFwiXFxmMThkXCI7XG4kZmEtdmFyLXN0YWNrLW92ZXJmbG93OiBcIlxcZjE2Y1wiO1xuJGZhLXZhci1zdGFyOiBcIlxcZjAwNVwiO1xuJGZhLXZhci1zdGFyLWhhbGY6IFwiXFxmMDg5XCI7XG4kZmEtdmFyLXN0YXItaGFsZi1lbXB0eTogXCJcXGYxMjNcIjtcbiRmYS12YXItc3Rhci1oYWxmLWZ1bGw6IFwiXFxmMTIzXCI7XG4kZmEtdmFyLXN0YXItaGFsZi1vOiBcIlxcZjEyM1wiO1xuJGZhLXZhci1zdGFyLW86IFwiXFxmMDA2XCI7XG4kZmEtdmFyLXN0ZWFtOiBcIlxcZjFiNlwiO1xuJGZhLXZhci1zdGVhbS1zcXVhcmU6IFwiXFxmMWI3XCI7XG4kZmEtdmFyLXN0ZXAtYmFja3dhcmQ6IFwiXFxmMDQ4XCI7XG4kZmEtdmFyLXN0ZXAtZm9yd2FyZDogXCJcXGYwNTFcIjtcbiRmYS12YXItc3RldGhvc2NvcGU6IFwiXFxmMGYxXCI7XG4kZmEtdmFyLXN0aWNreS1ub3RlOiBcIlxcZjI0OVwiO1xuJGZhLXZhci1zdGlja3ktbm90ZS1vOiBcIlxcZjI0YVwiO1xuJGZhLXZhci1zdG9wOiBcIlxcZjA0ZFwiO1xuJGZhLXZhci1zdHJlZXQtdmlldzogXCJcXGYyMWRcIjtcbiRmYS12YXItc3RyaWtldGhyb3VnaDogXCJcXGYwY2NcIjtcbiRmYS12YXItc3R1bWJsZXVwb246IFwiXFxmMWE0XCI7XG4kZmEtdmFyLXN0dW1ibGV1cG9uLWNpcmNsZTogXCJcXGYxYTNcIjtcbiRmYS12YXItc3Vic2NyaXB0OiBcIlxcZjEyY1wiO1xuJGZhLXZhci1zdWJ3YXk6IFwiXFxmMjM5XCI7XG4kZmEtdmFyLXN1aXRjYXNlOiBcIlxcZjBmMlwiO1xuJGZhLXZhci1zdW4tbzogXCJcXGYxODVcIjtcbiRmYS12YXItc3VwZXJzY3JpcHQ6IFwiXFxmMTJiXCI7XG4kZmEtdmFyLXN1cHBvcnQ6IFwiXFxmMWNkXCI7XG4kZmEtdmFyLXRhYmxlOiBcIlxcZjBjZVwiO1xuJGZhLXZhci10YWJsZXQ6IFwiXFxmMTBhXCI7XG4kZmEtdmFyLXRhY2hvbWV0ZXI6IFwiXFxmMGU0XCI7XG4kZmEtdmFyLXRhZzogXCJcXGYwMmJcIjtcbiRmYS12YXItdGFnczogXCJcXGYwMmNcIjtcbiRmYS12YXItdGFza3M6IFwiXFxmMGFlXCI7XG4kZmEtdmFyLXRheGk6IFwiXFxmMWJhXCI7XG4kZmEtdmFyLXRlbGV2aXNpb246IFwiXFxmMjZjXCI7XG4kZmEtdmFyLXRlbmNlbnQtd2VpYm86IFwiXFxmMWQ1XCI7XG4kZmEtdmFyLXRlcm1pbmFsOiBcIlxcZjEyMFwiO1xuJGZhLXZhci10ZXh0LWhlaWdodDogXCJcXGYwMzRcIjtcbiRmYS12YXItdGV4dC13aWR0aDogXCJcXGYwMzVcIjtcbiRmYS12YXItdGg6IFwiXFxmMDBhXCI7XG4kZmEtdmFyLXRoLWxhcmdlOiBcIlxcZjAwOVwiO1xuJGZhLXZhci10aC1saXN0OiBcIlxcZjAwYlwiO1xuJGZhLXZhci10aHVtYi10YWNrOiBcIlxcZjA4ZFwiO1xuJGZhLXZhci10aHVtYnMtZG93bjogXCJcXGYxNjVcIjtcbiRmYS12YXItdGh1bWJzLW8tZG93bjogXCJcXGYwODhcIjtcbiRmYS12YXItdGh1bWJzLW8tdXA6IFwiXFxmMDg3XCI7XG4kZmEtdmFyLXRodW1icy11cDogXCJcXGYxNjRcIjtcbiRmYS12YXItdGlja2V0OiBcIlxcZjE0NVwiO1xuJGZhLXZhci10aW1lczogXCJcXGYwMGRcIjtcbiRmYS12YXItdGltZXMtY2lyY2xlOiBcIlxcZjA1N1wiO1xuJGZhLXZhci10aW1lcy1jaXJjbGUtbzogXCJcXGYwNWNcIjtcbiRmYS12YXItdGludDogXCJcXGYwNDNcIjtcbiRmYS12YXItdG9nZ2xlLWRvd246IFwiXFxmMTUwXCI7XG4kZmEtdmFyLXRvZ2dsZS1sZWZ0OiBcIlxcZjE5MVwiO1xuJGZhLXZhci10b2dnbGUtb2ZmOiBcIlxcZjIwNFwiO1xuJGZhLXZhci10b2dnbGUtb246IFwiXFxmMjA1XCI7XG4kZmEtdmFyLXRvZ2dsZS1yaWdodDogXCJcXGYxNTJcIjtcbiRmYS12YXItdG9nZ2xlLXVwOiBcIlxcZjE1MVwiO1xuJGZhLXZhci10cmFkZW1hcms6IFwiXFxmMjVjXCI7XG4kZmEtdmFyLXRyYWluOiBcIlxcZjIzOFwiO1xuJGZhLXZhci10cmFuc2dlbmRlcjogXCJcXGYyMjRcIjtcbiRmYS12YXItdHJhbnNnZW5kZXItYWx0OiBcIlxcZjIyNVwiO1xuJGZhLXZhci10cmFzaDogXCJcXGYxZjhcIjtcbiRmYS12YXItdHJhc2gtbzogXCJcXGYwMTRcIjtcbiRmYS12YXItdHJlZTogXCJcXGYxYmJcIjtcbiRmYS12YXItdHJlbGxvOiBcIlxcZjE4MVwiO1xuJGZhLXZhci10cmlwYWR2aXNvcjogXCJcXGYyNjJcIjtcbiRmYS12YXItdHJvcGh5OiBcIlxcZjA5MVwiO1xuJGZhLXZhci10cnVjazogXCJcXGYwZDFcIjtcbiRmYS12YXItdHJ5OiBcIlxcZjE5NVwiO1xuJGZhLXZhci10dHk6IFwiXFxmMWU0XCI7XG4kZmEtdmFyLXR1bWJscjogXCJcXGYxNzNcIjtcbiRmYS12YXItdHVtYmxyLXNxdWFyZTogXCJcXGYxNzRcIjtcbiRmYS12YXItdHVya2lzaC1saXJhOiBcIlxcZjE5NVwiO1xuJGZhLXZhci10djogXCJcXGYyNmNcIjtcbiRmYS12YXItdHdpdGNoOiBcIlxcZjFlOFwiO1xuJGZhLXZhci10d2l0dGVyOiBcIlxcZjA5OVwiO1xuJGZhLXZhci10d2l0dGVyLXNxdWFyZTogXCJcXGYwODFcIjtcbiRmYS12YXItdW1icmVsbGE6IFwiXFxmMGU5XCI7XG4kZmEtdmFyLXVuZGVybGluZTogXCJcXGYwY2RcIjtcbiRmYS12YXItdW5kbzogXCJcXGYwZTJcIjtcbiRmYS12YXItdW5pdmVyc2l0eTogXCJcXGYxOWNcIjtcbiRmYS12YXItdW5saW5rOiBcIlxcZjEyN1wiO1xuJGZhLXZhci11bmxvY2s6IFwiXFxmMDljXCI7XG4kZmEtdmFyLXVubG9jay1hbHQ6IFwiXFxmMTNlXCI7XG4kZmEtdmFyLXVuc29ydGVkOiBcIlxcZjBkY1wiO1xuJGZhLXZhci11cGxvYWQ6IFwiXFxmMDkzXCI7XG4kZmEtdmFyLXVzZDogXCJcXGYxNTVcIjtcbiRmYS12YXItdXNlcjogXCJcXGYwMDdcIjtcbiRmYS12YXItdXNlci1tZDogXCJcXGYwZjBcIjtcbiRmYS12YXItdXNlci1wbHVzOiBcIlxcZjIzNFwiO1xuJGZhLXZhci11c2VyLXNlY3JldDogXCJcXGYyMWJcIjtcbiRmYS12YXItdXNlci10aW1lczogXCJcXGYyMzVcIjtcbiRmYS12YXItdXNlcnM6IFwiXFxmMGMwXCI7XG4kZmEtdmFyLXZlbnVzOiBcIlxcZjIyMVwiO1xuJGZhLXZhci12ZW51cy1kb3VibGU6IFwiXFxmMjI2XCI7XG4kZmEtdmFyLXZlbnVzLW1hcnM6IFwiXFxmMjI4XCI7XG4kZmEtdmFyLXZpYWNvaW46IFwiXFxmMjM3XCI7XG4kZmEtdmFyLXZpZGVvLWNhbWVyYTogXCJcXGYwM2RcIjtcbiRmYS12YXItdmltZW86IFwiXFxmMjdkXCI7XG4kZmEtdmFyLXZpbWVvLXNxdWFyZTogXCJcXGYxOTRcIjtcbiRmYS12YXItdmluZTogXCJcXGYxY2FcIjtcbiRmYS12YXItdms6IFwiXFxmMTg5XCI7XG4kZmEtdmFyLXZvbHVtZS1kb3duOiBcIlxcZjAyN1wiO1xuJGZhLXZhci12b2x1bWUtb2ZmOiBcIlxcZjAyNlwiO1xuJGZhLXZhci12b2x1bWUtdXA6IFwiXFxmMDI4XCI7XG4kZmEtdmFyLXdhcm5pbmc6IFwiXFxmMDcxXCI7XG4kZmEtdmFyLXdlY2hhdDogXCJcXGYxZDdcIjtcbiRmYS12YXItd2VpYm86IFwiXFxmMThhXCI7XG4kZmEtdmFyLXdlaXhpbjogXCJcXGYxZDdcIjtcbiRmYS12YXItd2hhdHNhcHA6IFwiXFxmMjMyXCI7XG4kZmEtdmFyLXdoZWVsY2hhaXI6IFwiXFxmMTkzXCI7XG4kZmEtdmFyLXdpZmk6IFwiXFxmMWViXCI7XG4kZmEtdmFyLXdpa2lwZWRpYS13OiBcIlxcZjI2NlwiO1xuJGZhLXZhci13aW5kb3dzOiBcIlxcZjE3YVwiO1xuJGZhLXZhci13b246IFwiXFxmMTU5XCI7XG4kZmEtdmFyLXdvcmRwcmVzczogXCJcXGYxOWFcIjtcbiRmYS12YXItd3JlbmNoOiBcIlxcZjBhZFwiO1xuJGZhLXZhci14aW5nOiBcIlxcZjE2OFwiO1xuJGZhLXZhci14aW5nLXNxdWFyZTogXCJcXGYxNjlcIjtcbiRmYS12YXIteS1jb21iaW5hdG9yOiBcIlxcZjIzYlwiO1xuJGZhLXZhci15LWNvbWJpbmF0b3Itc3F1YXJlOiBcIlxcZjFkNFwiO1xuJGZhLXZhci15YWhvbzogXCJcXGYxOWVcIjtcbiRmYS12YXIteWM6IFwiXFxmMjNiXCI7XG4kZmEtdmFyLXljLXNxdWFyZTogXCJcXGYxZDRcIjtcbiRmYS12YXIteWVscDogXCJcXGYxZTlcIjtcbiRmYS12YXIteWVuOiBcIlxcZjE1N1wiO1xuJGZhLXZhci15b3V0dWJlOiBcIlxcZjE2N1wiO1xuJGZhLXZhci15b3V0dWJlLXBsYXk6IFwiXFxmMTZhXCI7XG4kZmEtdmFyLXlvdXR1YmUtc3F1YXJlOiBcIlxcZjE2NlwiOyIsIi8vIEJvcmRlcmVkICYgUHVsbGVkXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi4jeyRmYS1jc3MtcHJlZml4fS1ib3JkZXIge1xuICBwYWRkaW5nOiAuMmVtIC4yNWVtIC4xNWVtO1xuICBib3JkZXI6IHNvbGlkIC4wOGVtICRmYS1ib3JkZXItY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6IC4xZW07XG59XG5cbi4jeyRmYS1jc3MtcHJlZml4fS1wdWxsLWxlZnQgeyBmbG9hdDogbGVmdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXB1bGwtcmlnaHQgeyBmbG9hdDogcmlnaHQ7IH1cblxuLiN7JGZhLWNzcy1wcmVmaXh9IHtcbiAgJi4jeyRmYS1jc3MtcHJlZml4fS1wdWxsLWxlZnQgeyBtYXJnaW4tcmlnaHQ6IC4zZW07IH1cbiAgJi4jeyRmYS1jc3MtcHJlZml4fS1wdWxsLXJpZ2h0IHsgbWFyZ2luLWxlZnQ6IC4zZW07IH1cbn1cblxuLyogRGVwcmVjYXRlZCBhcyBvZiA0LjQuMCAqL1xuLnB1bGwtcmlnaHQgeyBmbG9hdDogcmlnaHQ7IH1cbi5wdWxsLWxlZnQgeyBmbG9hdDogbGVmdDsgfVxuXG4uI3skZmEtY3NzLXByZWZpeH0ge1xuICAmLnB1bGwtbGVmdCB7IG1hcmdpbi1yaWdodDogLjNlbTsgfVxuICAmLnB1bGwtcmlnaHQgeyBtYXJnaW4tbGVmdDogLjNlbTsgfVxufVxuIiwiLy8gU3Bpbm5pbmcgSWNvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi4jeyRmYS1jc3MtcHJlZml4fS1zcGluIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICAgICAgICAgIGFuaW1hdGlvbjogZmEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7XG59XG5cbi4jeyRmYS1jc3MtcHJlZml4fS1wdWxzZSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO1xuICAgICAgICAgIGFuaW1hdGlvbjogZmEtc3BpbiAxcyBpbmZpbml0ZSBzdGVwcyg4KTtcbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLXNwaW4ge1xuICAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmYS1zcGluIHtcbiAgMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG59XG4iLCIvLyBSb3RhdGVkICYgRmxpcHBlZCBJY29uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uI3skZmEtY3NzLXByZWZpeH0tcm90YXRlLTkwICB7IEBpbmNsdWRlIGZhLWljb24tcm90YXRlKDkwZGVnLCAxKTsgIH1cbi4jeyRmYS1jc3MtcHJlZml4fS1yb3RhdGUtMTgwIHsgQGluY2x1ZGUgZmEtaWNvbi1yb3RhdGUoMTgwZGVnLCAyKTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXJvdGF0ZS0yNzAgeyBAaW5jbHVkZSBmYS1pY29uLXJvdGF0ZSgyNzBkZWcsIDMpOyB9XG5cbi4jeyRmYS1jc3MtcHJlZml4fS1mbGlwLWhvcml6b250YWwgeyBAaW5jbHVkZSBmYS1pY29uLWZsaXAoLTEsIDEsIDApOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmxpcC12ZXJ0aWNhbCAgIHsgQGluY2x1ZGUgZmEtaWNvbi1mbGlwKDEsIC0xLCAyKTsgfVxuXG4vLyBIb29rIGZvciBJRTgtOVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG46cm9vdCAuI3skZmEtY3NzLXByZWZpeH0tcm90YXRlLTkwLFxuOnJvb3QgLiN7JGZhLWNzcy1wcmVmaXh9LXJvdGF0ZS0xODAsXG46cm9vdCAuI3skZmEtY3NzLXByZWZpeH0tcm90YXRlLTI3MCxcbjpyb290IC4jeyRmYS1jc3MtcHJlZml4fS1mbGlwLWhvcml6b250YWwsXG46cm9vdCAuI3skZmEtY3NzLXByZWZpeH0tZmxpcC12ZXJ0aWNhbCB7XG4gIGZpbHRlcjogbm9uZTtcbn1cbiIsIi8vIE1peGluc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQG1peGluIGZhLWljb24oKSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgI3skZmEtZm9udC1zaXplLWJhc2V9LyN7JGZhLWxpbmUtaGVpZ2h0LWJhc2V9IEZvbnRBd2Vzb21lOyAvLyBzaG9ydGVuaW5nIGZvbnQgZGVjbGFyYXRpb25cbiAgZm9udC1zaXplOiBpbmhlcml0OyAvLyBjYW4ndCBoYXZlIGZvbnQtc2l6ZSBpbmhlcml0IG9uIGxpbmUgYWJvdmUsIHNvIG5lZWQgdG8gb3ZlcnJpZGVcbiAgdGV4dC1yZW5kZXJpbmc6IGF1dG87IC8vIG9wdGltaXplbGVnaWJpbGl0eSB0aHJvd3MgdGhpbmdzIG9mZiAjMTA5NFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblxufVxuXG5AbWl4aW4gZmEtaWNvbi1yb3RhdGUoJGRlZ3JlZXMsICRyb3RhdGlvbikge1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPSN7JHJvdGF0aW9ufSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7XG59XG5cbkBtaXhpbiBmYS1pY29uLWZsaXAoJGhvcml6LCAkdmVydCwgJHJvdGF0aW9uKSB7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249I3skcm90YXRpb259KTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKCRob3JpeiwgJHZlcnQpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoJGhvcml6LCAkdmVydCk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgkaG9yaXosICR2ZXJ0KTtcbn1cbiIsIi8vIFN0YWNrZWQgSWNvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YWNrIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAyZW07XG4gIGhlaWdodDogMmVtO1xuICBsaW5lLWhlaWdodDogMmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YWNrLTF4LCAuI3skZmEtY3NzLXByZWZpeH0tc3RhY2stMngge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uI3skZmEtY3NzLXByZWZpeH0tc3RhY2stMXggeyBsaW5lLWhlaWdodDogaW5oZXJpdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YWNrLTJ4IHsgZm9udC1zaXplOiAyZW07IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1pbnZlcnNlIHsgY29sb3I6ICRmYS1pbnZlcnNlOyB9XG4iLCIvKiBGb250IEF3ZXNvbWUgdXNlcyB0aGUgVW5pY29kZSBQcml2YXRlIFVzZSBBcmVhIChQVUEpIHRvIGVuc3VyZSBzY3JlZW5cbiAgIHJlYWRlcnMgZG8gbm90IHJlYWQgb2ZmIHJhbmRvbSBjaGFyYWN0ZXJzIHRoYXQgcmVwcmVzZW50IGljb25zICovXG5cbi4jeyRmYS1jc3MtcHJlZml4fS1nbGFzczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWdsYXNzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbXVzaWM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1tdXNpYzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNlYXJjaDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXNlYXJjaDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWVudmVsb3BlLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1lbnZlbG9wZS1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGVhcnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1oZWFydDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YXI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdGFyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc3Rhci1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3Rhci1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdXNlcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXVzZXI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maWxtOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmlsbTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRoLWxhcmdlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGgtbGFyZ2U7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10aDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRoOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdGgtbGlzdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRoLWxpc3Q7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVjazpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNoZWNrOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcmVtb3ZlOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1jbG9zZTpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tdGltZXM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10aW1lczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNlYXJjaC1wbHVzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2VhcmNoLXBsdXM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zZWFyY2gtbWludXM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zZWFyY2gtbWludXM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wb3dlci1vZmY6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wb3dlci1vZmY7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zaWduYWw6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zaWduYWw7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1nZWFyOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1jb2c6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jb2c7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10cmFzaC1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHJhc2gtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvbWU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1ob21lOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmlsZS1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2xvY2stbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNsb2NrLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1yb2FkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcm9hZDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWRvd25sb2FkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZG93bmxvYWQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtby1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYXJyb3ctY2lyY2xlLW8tZG93bjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1vLXVwOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYXJyb3ctY2lyY2xlLW8tdXA7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1pbmJveDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWluYm94OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGxheS1jaXJjbGUtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBsYXktY2lyY2xlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1yb3RhdGUtcmlnaHQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlcGVhdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXJlcGVhdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlZnJlc2g6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1yZWZyZXNoOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGlzdC1hbHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1saXN0LWFsdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxvY2s6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1sb2NrOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmxhZzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZsYWc7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1oZWFkcGhvbmVzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaGVhZHBob25lczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXZvbHVtZS1vZmY6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci12b2x1bWUtb2ZmOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdm9sdW1lLWRvd246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci12b2x1bWUtZG93bjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXZvbHVtZS11cDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXZvbHVtZS11cDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXFyY29kZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXFyY29kZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhcmNvZGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1iYXJjb2RlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdGFnOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGFnOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdGFnczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRhZ3M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1ib29rOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYm9vazsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJvb2ttYXJrOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYm9va21hcms7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wcmludDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXByaW50OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2FtZXJhOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2FtZXJhOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZm9udDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZvbnQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1ib2xkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYm9sZDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWl0YWxpYzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWl0YWxpYzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRleHQtaGVpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGV4dC1oZWlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10ZXh0LXdpZHRoOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGV4dC13aWR0aDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFsaWduLWxlZnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbGlnbi1sZWZ0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYWxpZ24tY2VudGVyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYWxpZ24tY2VudGVyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYWxpZ24tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbGlnbi1yaWdodDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFsaWduLWp1c3RpZnk6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbGlnbi1qdXN0aWZ5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGlzdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxpc3Q7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1kZWRlbnQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LW91dGRlbnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1vdXRkZW50OyB9XG4uI3skZmEtY3NzLXByZWZpeH0taW5kZW50OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaW5kZW50OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdmlkZW8tY2FtZXJhOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdmlkZW8tY2FtZXJhOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGhvdG86YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWltYWdlOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1waWN0dXJlLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1waWN0dXJlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wZW5jaWw6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wZW5jaWw7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYXAtbWFya2VyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWFwLW1hcmtlcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFkanVzdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFkanVzdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRpbnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10aW50OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZWRpdDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tcGVuY2lsLXNxdWFyZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcGVuY2lsLXNxdWFyZS1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2hhcmUtc3F1YXJlLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zaGFyZS1zcXVhcmUtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZWNrLXNxdWFyZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2hlY2stc3F1YXJlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvd3M6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hcnJvd3M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3RlcC1iYWNrd2FyZDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZhc3QtYmFja3dhcmQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1mYXN0LWJhY2t3YXJkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYmFja3dhcmQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1iYWNrd2FyZDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBsYXk6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wbGF5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGF1c2U6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wYXVzZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0b3A6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdG9wOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZm9yd2FyZDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZvcndhcmQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1mYXN0LWZvcndhcmQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1mYXN0LWZvcndhcmQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdGVwLWZvcndhcmQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdGVwLWZvcndhcmQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1lamVjdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWVqZWN0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2hldnJvbi1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2hldnJvbi1sZWZ0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2hldnJvbi1yaWdodDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNoZXZyb24tcmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wbHVzLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBsdXMtY2lyY2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbWludXMtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWludXMtY2lyY2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdGltZXMtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGltZXMtY2lyY2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2hlY2stY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2hlY2stY2lyY2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcXVlc3Rpb24tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcXVlc3Rpb24tY2lyY2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taW5mby1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1pbmZvLWNpcmNsZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyb3NzaGFpcnM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jcm9zc2hhaXJzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdGltZXMtY2lyY2xlLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10aW1lcy1jaXJjbGUtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZWNrLWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2hlY2stY2lyY2xlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1iYW46YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1iYW47IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYXJyb3ctbGVmdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYXJyb3ctcmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy11cDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFycm93LXVwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYXJyb3ctZG93bjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFycm93LWRvd247IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYWlsLWZvcndhcmQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXNoYXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2hhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1leHBhbmQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1leHBhbmQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jb21wcmVzczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvbXByZXNzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGx1czpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBsdXM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1taW51czpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1pbnVzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYXN0ZXJpc2s6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hc3RlcmlzazsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWV4Y2xhbWF0aW9uLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWV4Y2xhbWF0aW9uLWNpcmNsZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWdpZnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1naWZ0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGVhZjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxlYWY7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmlyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWV5ZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWV5ZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWV5ZS1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWV5ZS1zbGFzaDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXdhcm5pbmc6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZXhjbGFtYXRpb24tdHJpYW5nbGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wbGFuZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBsYW5lOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2FsZW5kYXI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYWxlbmRhcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXJhbmRvbTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXJhbmRvbTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvbW1lbnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jb21tZW50OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbWFnbmV0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWFnbmV0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2hldnJvbi11cDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNoZXZyb24tdXA7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWRvd246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jaGV2cm9uLWRvd247IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1yZXR3ZWV0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcmV0d2VldDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNob3BwaW5nLWNhcnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zaG9wcGluZy1jYXJ0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZm9sZGVyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZm9sZGVyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZm9sZGVyLW9wZW46YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1mb2xkZXItb3BlbjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93cy12OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYXJyb3dzLXY7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvd3MtaDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFycm93cy1oOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYmFyLWNoYXJ0LW86YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhci1jaGFydDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJhci1jaGFydDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXR3aXR0ZXItc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHdpdHRlci1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1mYWNlYm9vay1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1mYWNlYm9vay1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYW1lcmEtcmV0cm86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYW1lcmEtcmV0cm87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1rZXk6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1rZXk7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1nZWFyczpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tY29nczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvZ3M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jb21tZW50czpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvbW1lbnRzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdGh1bWJzLW8tdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10aHVtYnMtby11cDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRodW1icy1vLWRvd246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10aHVtYnMtby1kb3duOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3Rhci1oYWxmOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGVhcnQtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhlYXJ0LW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zaWduLW91dDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXNpZ24tb3V0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGlua2VkaW4tc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbGlua2VkaW4tc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdGh1bWItdGFjazpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRodW1iLXRhY2s7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1leHRlcm5hbC1saW5rOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZXh0ZXJuYWwtbGluazsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNpZ24taW46YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zaWduLWluOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdHJvcGh5OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHJvcGh5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZ2l0aHViLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWdpdGh1Yi1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS11cGxvYWQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci11cGxvYWQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1sZW1vbi1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbGVtb24tbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBob25lOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcGhvbmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zcXVhcmUtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXNxdWFyZS1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYm9va21hcmstbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJvb2ttYXJrLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1waG9uZS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1waG9uZS1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10d2l0dGVyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHdpdHRlcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZhY2Vib29rLWY6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWZhY2Vib29rOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmFjZWJvb2s7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1naXRodWI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1naXRodWI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS11bmxvY2s6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci11bmxvY2s7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jcmVkaXQtY2FyZDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNyZWRpdC1jYXJkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmVlZDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tcnNzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcnNzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGRkLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1oZGQtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJ1bGxob3JuOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYnVsbGhvcm47IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1iZWxsOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYmVsbDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNlcnRpZmljYXRlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2VydGlmaWNhdGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kLW8tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1oYW5kLW8tcmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kLW8tbGVmdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhhbmQtby1sZWZ0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1vLXVwOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaGFuZC1vLXVwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1vLWRvd246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1oYW5kLW8tZG93bjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYXJyb3ctY2lyY2xlLWxlZnQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hcnJvdy1jaXJjbGUtcmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hcnJvdy1jaXJjbGUtdXA7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtZG93bjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFycm93LWNpcmNsZS1kb3duOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZ2xvYmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1nbG9iZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXdyZW5jaDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXdyZW5jaDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRhc2tzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGFza3M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maWx0ZXI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1maWx0ZXI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1icmllZmNhc2U6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1icmllZmNhc2U7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvd3MtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYXJyb3dzLWFsdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyb3VwOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXVzZXJzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2hhaW46YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpbms6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1saW5rOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jbG91ZDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZsYXNrOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmxhc2s7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jdXQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXNjaXNzb3JzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2Npc3NvcnM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jb3B5OmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlcy1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmlsZXMtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBhcGVyY2xpcDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBhcGVyY2xpcDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNhdmU6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWZsb3BweS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmxvcHB5LW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1uYXZpY29uOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1yZW9yZGVyOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1iYXJzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYmFyczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpc3QtdWw6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1saXN0LXVsOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGlzdC1vbDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxpc3Qtb2w7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdHJpa2V0aHJvdWdoOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3RyaWtldGhyb3VnaDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXVuZGVybGluZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXVuZGVybGluZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRhYmxlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGFibGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYWdpYzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1hZ2ljOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdHJ1Y2s6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10cnVjazsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBpbnRlcmVzdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBpbnRlcmVzdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBpbnRlcmVzdC1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1waW50ZXJlc3Qtc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZ29vZ2xlLXBsdXMtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZ29vZ2xlLXBsdXMtc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZ29vZ2xlLXBsdXM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1nb29nbGUtcGx1czsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW1vbmV5OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbW9uZXk7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYXJldC1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2FyZXQtZG93bjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhcmV0LXVwOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2FyZXQtdXA7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYXJldC1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2FyZXQtbGVmdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhcmV0LXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2FyZXQtcmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jb2x1bW5zOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY29sdW1uczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXVuc29ydGVkOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1zb3J0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc29ydDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNvcnQtZG93bjpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1kZXNjOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc29ydC1kZXNjOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC11cDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1hc2M6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zb3J0LWFzYzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWVudmVsb3BlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZW52ZWxvcGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1saW5rZWRpbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxpbmtlZGluOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcm90YXRlLWxlZnQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXVuZG86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci11bmRvOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGVnYWw6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWdhdmVsOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZ2F2ZWw7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1kYXNoYm9hcmQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXRhY2hvbWV0ZXI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10YWNob21ldGVyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY29tbWVudC1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY29tbWVudC1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY29tbWVudHMtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvbW1lbnRzLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1mbGFzaDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tYm9sdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJvbHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zaXRlbWFwOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2l0ZW1hcDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXVtYnJlbGxhOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdW1icmVsbGE7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wYXN0ZTpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tY2xpcGJvYXJkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2xpcGJvYXJkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGlnaHRidWxiLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1saWdodGJ1bGItbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWV4Y2hhbmdlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZXhjaGFuZ2U7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jbG91ZC1kb3dubG9hZDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNsb3VkLWRvd25sb2FkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWQtdXBsb2FkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2xvdWQtdXBsb2FkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1tZDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXVzZXItbWQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdGV0aG9zY29wZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXN0ZXRob3Njb3BlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc3VpdGNhc2U6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdWl0Y2FzZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJlbGwtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJlbGwtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvZmZlZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvZmZlZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWN1dGxlcnk6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jdXRsZXJ5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS10ZXh0LW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1maWxlLXRleHQtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJ1aWxkaW5nLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1idWlsZGluZy1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taG9zcGl0YWwtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhvc3BpdGFsLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hbWJ1bGFuY2U6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbWJ1bGFuY2U7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tZWRraXQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1tZWRraXQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maWdodGVyLWpldDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZpZ2h0ZXItamV0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYmVlcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJlZXI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1oLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWgtc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGx1cy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wbHVzLXNxdWFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYW5nbGUtZG91YmxlLWxlZnQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbmdsZS1kb3VibGUtcmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hbmdsZS1kb3VibGUtdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbmdsZS1kb3VibGUtdXA7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hbmdsZS1kb3VibGUtZG93bjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFuZ2xlLWRvdWJsZS1kb3duOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYW5nbGUtbGVmdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFuZ2xlLWxlZnQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hbmdsZS1yaWdodDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFuZ2xlLXJpZ2h0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYW5nbGUtdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbmdsZS11cDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvd246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbmdsZS1kb3duOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZGVza3RvcDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWRlc2t0b3A7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1sYXB0b3A6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1sYXB0b3A7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10YWJsZXQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10YWJsZXQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tb2JpbGUtcGhvbmU6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LW1vYmlsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1vYmlsZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNpcmNsZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2lyY2xlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1xdW90ZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcXVvdGUtbGVmdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXF1b3RlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcXVvdGUtcmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zcGlubmVyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3Bpbm5lcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNpcmNsZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW1haWwtcmVwbHk6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlcGx5OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcmVwbHk7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1naXRodWItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZ2l0aHViLWFsdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvbGRlci1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZm9sZGVyLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1mb2xkZXItb3Blbi1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZm9sZGVyLW9wZW4tbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNtaWxlLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zbWlsZS1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZnJvd24tbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZyb3duLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tZWgtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1laC1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZ2FtZXBhZDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWdhbWVwYWQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1rZXlib2FyZC1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXIta2V5Ym9hcmQtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZsYWctbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZsYWctbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZsYWctY2hlY2tlcmVkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmxhZy1jaGVja2VyZWQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10ZXJtaW5hbDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRlcm1pbmFsOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY29kZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvZGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYWlsLXJlcGx5LWFsbDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tcmVwbHktYWxsOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcmVwbHktYWxsOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmLWVtcHR5OmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGFyLWhhbGYtZnVsbDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdGFyLWhhbGYtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxvY2F0aW9uLWFycm93OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbG9jYXRpb24tYXJyb3c7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jcm9wOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY3JvcDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvZGUtZm9yazpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvZGUtZm9yazsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXVubGluazpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tY2hhaW4tYnJva2VuOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2hhaW4tYnJva2VuOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcXVlc3Rpb246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1xdWVzdGlvbjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWluZm86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1pbmZvOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZXhjbGFtYXRpb246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1leGNsYW1hdGlvbjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXN1cGVyc2NyaXB0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3VwZXJzY3JpcHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdWJzY3JpcHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdWJzY3JpcHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1lcmFzZXI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1lcmFzZXI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wdXp6bGUtcGllY2U6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wdXp6bGUtcGllY2U7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1taWNyb3Bob25lOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWljcm9waG9uZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW1pY3JvcGhvbmUtc2xhc2g6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1taWNyb3Bob25lLXNsYXNoOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2hpZWxkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2hpZWxkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNhbGVuZGFyLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maXJlLWV4dGluZ3Vpc2hlcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZpcmUtZXh0aW5ndWlzaGVyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcm9ja2V0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcm9ja2V0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbWF4Y2RuOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWF4Y2RuOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2hldnJvbi1jaXJjbGUtbGVmdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNoZXZyb24tY2lyY2xlLWxlZnQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWNpcmNsZS1yaWdodDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNoZXZyb24tY2lyY2xlLXJpZ2h0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2hldnJvbi1jaXJjbGUtdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jaGV2cm9uLWNpcmNsZS11cDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZXZyb24tY2lyY2xlLWRvd246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jaGV2cm9uLWNpcmNsZS1kb3duOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taHRtbDU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1odG1sNTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNzczM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jc3MzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYW5jaG9yOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYW5jaG9yOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdW5sb2NrLWFsdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXVubG9jay1hbHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1idWxsc2V5ZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJ1bGxzZXllOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZWxsaXBzaXMtaDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWVsbGlwc2lzLWg7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1lbGxpcHNpcy12OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZWxsaXBzaXMtdjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXJzcy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1yc3Mtc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGxheS1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wbGF5LWNpcmNsZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRpY2tldDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRpY2tldDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW1pbnVzLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1pbnVzLXNxdWFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW1pbnVzLXNxdWFyZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWludXMtc3F1YXJlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1sZXZlbC11cDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxldmVsLXVwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGV2ZWwtZG93bjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxldmVsLWRvd247IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVjay1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jaGVjay1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wZW5jaWwtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcGVuY2lsLXNxdWFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWV4dGVybmFsLWxpbmstc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZXh0ZXJuYWwtbGluay1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zaGFyZS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zaGFyZS1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jb21wYXNzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY29tcGFzczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRvZ2dsZS1kb3duOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXJldC1zcXVhcmUtby1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2FyZXQtc3F1YXJlLW8tZG93bjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRvZ2dsZS11cDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLW8tdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYXJldC1zcXVhcmUtby11cDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRvZ2dsZS1yaWdodDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLW8tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYXJldC1zcXVhcmUtby1yaWdodDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWV1cm86YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWV1cjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWV1cjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWdicDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWdicDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWRvbGxhcjpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tdXNkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdXNkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcnVwZWU6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWlucjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWlucjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNueTpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tcm1iOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS15ZW46YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWpweTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWpweTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXJ1YmxlOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1yb3VibGU6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXJ1YjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXJ1YjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXdvbjpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0ta3J3OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXIta3J3OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYml0Y29pbjpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tYnRjOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYnRjOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZpbGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLXRleHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1maWxlLXRleHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zb3J0LWFscGhhLWFzYzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXNvcnQtYWxwaGEtYXNjOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1hbHBoYS1kZXNjOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc29ydC1hbHBoYS1kZXNjOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1hbW91bnQtYXNjOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc29ydC1hbW91bnQtYXNjOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1hbW91bnQtZGVzYzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXNvcnQtYW1vdW50LWRlc2M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zb3J0LW51bWVyaWMtYXNjOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc29ydC1udW1lcmljLWFzYzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNvcnQtbnVtZXJpYy1kZXNjOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc29ydC1udW1lcmljLWRlc2M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10aHVtYnMtdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10aHVtYnMtdXA7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10aHVtYnMtZG93bjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRodW1icy1kb3duOyB9XG4uI3skZmEtY3NzLXByZWZpeH0teW91dHViZS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci15b3V0dWJlLXNxdWFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXlvdXR1YmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci15b3V0dWJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0teGluZzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXhpbmc7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS14aW5nLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXhpbmctc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0teW91dHViZS1wbGF5OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXIteW91dHViZS1wbGF5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZHJvcGJveDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWRyb3Bib3g7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdGFjay1vdmVyZmxvdzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXN0YWNrLW92ZXJmbG93OyB9XG4uI3skZmEtY3NzLXByZWZpeH0taW5zdGFncmFtOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaW5zdGFncmFtOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmxpY2tyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmxpY2tyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYWRuOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYWRuOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYml0YnVja2V0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYml0YnVja2V0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYml0YnVja2V0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJpdGJ1Y2tldC1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10dW1ibHI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10dW1ibHI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10dW1ibHItc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHVtYmxyLXNxdWFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxvbmctYXJyb3ctZG93bjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxvbmctYXJyb3ctZG93bjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxvbmctYXJyb3ctdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1sb25nLWFycm93LXVwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbG9uZy1hcnJvdy1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbG9uZy1hcnJvdy1sZWZ0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbG9uZy1hcnJvdy1yaWdodDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxvbmctYXJyb3ctcmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcHBsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFwcGxlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0td2luZG93czpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXdpbmRvd3M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hbmRyb2lkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYW5kcm9pZDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpbnV4OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbGludXg7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1kcmliYmJsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWRyaWJiYmxlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2t5cGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1za3lwZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvdXJzcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1mb3Vyc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdHJlbGxvOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHJlbGxvOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmVtYWxlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmVtYWxlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbWFsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1hbGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1naXR0aXA6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyYXRpcGF5OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZ3JhdGlwYXk7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdW4tbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXN1bi1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbW9vbi1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbW9vbi1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYXJjaGl2ZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFyY2hpdmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1idWc6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1idWc7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS12azpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXZrOyB9XG4uI3skZmEtY3NzLXByZWZpeH0td2VpYm86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci13ZWlibzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlbnJlbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXJlbnJlbjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBhZ2VsaW5lczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBhZ2VsaW5lczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YWNrLWV4Y2hhbmdlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3RhY2stZXhjaGFuZ2U7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy1jaXJjbGUtby1yaWdodDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFycm93LWNpcmNsZS1vLXJpZ2h0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYXJyb3ctY2lyY2xlLW8tbGVmdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWFycm93LWNpcmNsZS1vLWxlZnQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10b2dnbGUtbGVmdDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLW8tbGVmdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNhcmV0LXNxdWFyZS1vLWxlZnQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1kb3QtY2lyY2xlLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1kb3QtY2lyY2xlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS13aGVlbGNoYWlyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItd2hlZWxjaGFpcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXZpbWVvLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXZpbWVvLXNxdWFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXR1cmtpc2gtbGlyYTpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tdHJ5OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHJ5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGx1cy1zcXVhcmUtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBsdXMtc3F1YXJlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zcGFjZS1zaHV0dGxlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3BhY2Utc2h1dHRsZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNsYWNrOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2xhY2s7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1lbnZlbG9wZS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1lbnZlbG9wZS1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS13b3JkcHJlc3M6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci13b3JkcHJlc3M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1vcGVuaWQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1vcGVuaWQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1pbnN0aXR1dGlvbjpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tYmFuazpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tdW5pdmVyc2l0eTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXVuaXZlcnNpdHk7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tb3J0YXItYm9hcmQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyYWR1YXRpb24tY2FwOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZ3JhZHVhdGlvbi1jYXA7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS15YWhvbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXlhaG9vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZ29vZ2xlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZ29vZ2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcmVkZGl0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcmVkZGl0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcmVkZGl0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXJlZGRpdC1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdHVtYmxldXBvbi1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdHVtYmxldXBvbi1jaXJjbGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdHVtYmxldXBvbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXN0dW1ibGV1cG9uOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZGVsaWNpb3VzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZGVsaWNpb3VzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZGlnZzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWRpZ2c7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1waWVkLXBpcGVyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcGllZC1waXBlcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBpZWQtcGlwZXItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcGllZC1waXBlci1hbHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1kcnVwYWw6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1kcnVwYWw7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1qb29tbGE6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1qb29tbGE7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1sYW5ndWFnZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxhbmd1YWdlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmF4OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmF4OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYnVpbGRpbmc6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1idWlsZGluZzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoaWxkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2hpbGQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wYXc6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wYXc7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zcG9vbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXNwb29uOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY3ViZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWN1YmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jdWJlczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWN1YmVzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYmVoYW5jZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJlaGFuY2U7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1iZWhhbmNlLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJlaGFuY2Utc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc3RlYW06YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdGVhbTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0ZWFtLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXN0ZWFtLXNxdWFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlY3ljbGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1yZWN5Y2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYXV0b21vYmlsZTpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tY2FyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2FyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2FiOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS10YXhpOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGF4aTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRyZWU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10cmVlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc3BvdGlmeTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXNwb3RpZnk7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1kZXZpYW50YXJ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZGV2aWFudGFydDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNvdW5kY2xvdWQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zb3VuZGNsb3VkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZGF0YWJhc2U6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1kYXRhYmFzZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpbGUtcGRmLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1maWxlLXBkZi1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS13b3JkLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1maWxlLXdvcmQtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpbGUtZXhjZWwtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZpbGUtZXhjZWwtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpbGUtcG93ZXJwb2ludC1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmlsZS1wb3dlcnBvaW50LW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLXBob3RvLW86YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpbGUtcGljdHVyZS1vOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLWltYWdlLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1maWxlLWltYWdlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLXppcC1vOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLWFyY2hpdmUtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZpbGUtYXJjaGl2ZS1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1zb3VuZC1vOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLWF1ZGlvLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1maWxlLWF1ZGlvLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLW1vdmllLW86YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpbGUtdmlkZW8tbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZpbGUtdmlkZW8tbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpbGUtY29kZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZmlsZS1jb2RlLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS12aW5lOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdmluZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvZGVwZW46YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jb2RlcGVuOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tanNmaWRkbGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1qc2ZpZGRsZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpZmUtYm91eTpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tbGlmZS1idW95OmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1saWZlLXNhdmVyOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1zdXBwb3J0OmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1saWZlLXJpbmc6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1saWZlLXJpbmc7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jaXJjbGUtby1ub3RjaDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNpcmNsZS1vLW5vdGNoOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcmE6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlYmVsOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcmViZWw7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1nZTpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tZW1waXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZW1waXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZ2l0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWdpdC1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1naXQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1naXQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS15LWNvbWJpbmF0b3Itc3F1YXJlOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS15Yy1zcXVhcmU6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhY2tlci1uZXdzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaGFja2VyLW5ld3M7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10ZW5jZW50LXdlaWJvOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGVuY2VudC13ZWlibzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXFxOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcXE7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS13ZWNoYXQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXdlaXhpbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXdlaXhpbjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNlbmQ6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXBhcGVyLXBsYW5lOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcGFwZXItcGxhbmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zZW5kLW86YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXBhcGVyLXBsYW5lLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wYXBlci1wbGFuZS1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGlzdG9yeTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhpc3Rvcnk7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jaXJjbGUtdGhpbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNpcmNsZS10aGluOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGVhZGVyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaGVhZGVyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGFyYWdyYXBoOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcGFyYWdyYXBoOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2xpZGVyczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXNsaWRlcnM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zaGFyZS1hbHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zaGFyZS1hbHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zaGFyZS1hbHQtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2hhcmUtYWx0LXNxdWFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJvbWI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1ib21iOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc29jY2VyLWJhbGwtbzpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tZnV0Ym9sLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1mdXRib2wtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXR0eTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXR0eTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJpbm9jdWxhcnM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1iaW5vY3VsYXJzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcGx1ZzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBsdWc7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zbGlkZXNoYXJlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2xpZGVzaGFyZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXR3aXRjaDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXR3aXRjaDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXllbHA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci15ZWxwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbmV3c3BhcGVyLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1uZXdzcGFwZXItbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXdpZmk6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci13aWZpOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2FsY3VsYXRvcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNhbGN1bGF0b3I7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wYXlwYWw6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1wYXlwYWw7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1nb29nbGUtd2FsbGV0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZ29vZ2xlLXdhbGxldDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNjLXZpc2E6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYy12aXNhOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2MtbWFzdGVyY2FyZDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNjLW1hc3RlcmNhcmQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYy1kaXNjb3ZlcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNjLWRpc2NvdmVyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2MtYW1leDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNjLWFtZXg7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYy1wYXlwYWw6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYy1wYXlwYWw7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYy1zdHJpcGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYy1zdHJpcGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1iZWxsLXNsYXNoOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYmVsbC1zbGFzaDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJlbGwtc2xhc2gtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJlbGwtc2xhc2gtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRyYXNoOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHJhc2g7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jb3B5cmlnaHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jb3B5cmlnaHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWF0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZXllZHJvcHBlcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWV5ZWRyb3BwZXI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1wYWludC1icnVzaDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBhaW50LWJydXNoOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYmlydGhkYXktY2FrZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJpcnRoZGF5LWNha2U7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hcmVhLWNoYXJ0OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYXJlYS1jaGFydDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBpZS1jaGFydDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXBpZS1jaGFydDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpbmUtY2hhcnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1saW5lLWNoYXJ0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGFzdGZtOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbGFzdGZtOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbGFzdGZtLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWxhc3RmbS1zcXVhcmU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10b2dnbGUtb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdG9nZ2xlLW9mZjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXRvZ2dsZS1vbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRvZ2dsZS1vbjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJpY3ljbGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1iaWN5Y2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYnVzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYnVzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taW94aG9zdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWlveGhvc3Q7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hbmdlbGxpc3Q6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbmdlbGxpc3Q7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNjOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2hla2VsOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1zaGVxZWw6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWlsczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWlsczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW1lYW5wYXRoOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWVhbnBhdGg7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1idXlzZWxsYWRzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYnV5c2VsbGFkczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvbm5lY3RkZXZlbG9wOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY29ubmVjdGRldmVsb3A7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1kYXNoY3ViZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWRhc2hjdWJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZm9ydW1iZWU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1mb3J1bWJlZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWxlYW5wdWI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1sZWFucHViOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2VsbHN5OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2VsbHN5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2hpcnRzaW5idWxrOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2hpcnRzaW5idWxrOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2ltcGx5YnVpbHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zaW1wbHlidWlsdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNreWF0bGFzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2t5YXRsYXM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYXJ0LXBsdXM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYXJ0LXBsdXM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYXJ0LWFycm93LWRvd246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYXJ0LWFycm93LWRvd247IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1kaWFtb25kOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZGlhbW9uZDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXNoaXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zaGlwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1zZWNyZXQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci11c2VyLXNlY3JldDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW1vdG9yY3ljbGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1tb3RvcmN5Y2xlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc3RyZWV0LXZpZXc6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1zdHJlZXQtdmlldzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWhlYXJ0YmVhdDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhlYXJ0YmVhdDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXZlbnVzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdmVudXM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYXJzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWFyczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW1lcmN1cnk6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1tZXJjdXJ5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0taW50ZXJzZXg6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXRyYW5zZ2VuZGVyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHJhbnNnZW5kZXI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10cmFuc2dlbmRlci1hbHQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci10cmFuc2dlbmRlci1hbHQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS12ZW51cy1kb3VibGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci12ZW51cy1kb3VibGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYXJzLWRvdWJsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1hcnMtZG91YmxlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdmVudXMtbWFyczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXZlbnVzLW1hcnM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYXJzLXN0cm9rZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1hcnMtc3Ryb2tlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbWFycy1zdHJva2UtdjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1hcnMtc3Ryb2tlLXY7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYXJzLXN0cm9rZS1oOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWFycy1zdHJva2UtaDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW5ldXRlcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW5ldXRlcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWdlbmRlcmxlc3M6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1nZW5kZXJsZXNzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmFjZWJvb2stb2ZmaWNpYWw6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1mYWNlYm9vay1vZmZpY2lhbDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXBpbnRlcmVzdC1wOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItcGludGVyZXN0LXA7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS13aGF0c2FwcDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXdoYXRzYXBwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2VydmVyOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2VydmVyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1wbHVzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdXNlci1wbHVzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci10aW1lczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXVzZXItdGltZXM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1ob3RlbDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tYmVkOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYmVkOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdmlhY29pbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXZpYWNvaW47IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10cmFpbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRyYWluOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc3Vid2F5OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3Vid2F5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbWVkaXVtOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWVkaXVtOyB9XG4uI3skZmEtY3NzLXByZWZpeH0teWM6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LXktY29tYmluYXRvcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXktY29tYmluYXRvcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LW9wdGluLW1vbnN0ZXI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1vcHRpbi1tb25zdGVyOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tb3BlbmNhcnQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1vcGVuY2FydDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWV4cGVkaXRlZHNzbDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWV4cGVkaXRlZHNzbDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhdHRlcnktNDpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tYmF0dGVyeS1mdWxsOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYmF0dGVyeS1mdWxsOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYmF0dGVyeS0zOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYmF0dGVyeS10aHJlZS1xdWFydGVyczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhdHRlcnktMjpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0tYmF0dGVyeS1oYWxmOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItYmF0dGVyeS1oYWxmOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYmF0dGVyeS0xOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LXF1YXJ0ZXI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1iYXR0ZXJ5LXF1YXJ0ZXI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LTA6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhdHRlcnktZW1wdHk6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1iYXR0ZXJ5LWVtcHR5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbW91c2UtcG9pbnRlcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1vdXNlLXBvaW50ZXI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1pLWN1cnNvcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWktY3Vyc29yOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tb2JqZWN0LWdyb3VwOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItb2JqZWN0LWdyb3VwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tb2JqZWN0LXVuZ3JvdXA6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1vYmplY3QtdW5ncm91cDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0aWNreS1ub3RlOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3RpY2t5LW5vdGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1zdGlja3ktbm90ZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc3RpY2t5LW5vdGUtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNjLWpjYjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNjLWpjYjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNjLWRpbmVycy1jbHViOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2MtZGluZXJzLWNsdWI7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jbG9uZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNsb25lOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tYmFsYW5jZS1zY2FsZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJhbGFuY2Utc2NhbGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1ob3VyZ2xhc3MtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhvdXJnbGFzcy1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLTE6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy1zdGFydDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhvdXJnbGFzcy1zdGFydDsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy0yOmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS1ob3VyZ2xhc3MtaGFsZjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhvdXJnbGFzcy1oYWxmOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLTM6YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy1lbmQ6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1ob3VyZ2xhc3MtZW5kOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taG91cmdsYXNzOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaG91cmdsYXNzOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1ncmFiLW86YmVmb3JlLFxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhbmQtcm9jay1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaGFuZC1yb2NrLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kLXN0b3AtbzpiZWZvcmUsXG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1wYXBlci1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaGFuZC1wYXBlci1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1zY2lzc29ycy1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaGFuZC1zY2lzc29ycy1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1saXphcmQtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhhbmQtbGl6YXJkLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kLXNwb2NrLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1oYW5kLXNwb2NrLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kLXBvaW50ZXItbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhhbmQtcG9pbnRlci1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1wZWFjZS1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItaGFuZC1wZWFjZS1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdHJhZGVtYXJrOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdHJhZGVtYXJrOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcmVnaXN0ZXJlZDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXJlZ2lzdGVyZWQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jcmVhdGl2ZS1jb21tb25zOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY3JlYXRpdmUtY29tbW9uczsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWdnOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItZ2c7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1nZy1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1nZy1jaXJjbGU7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS10cmlwYWR2aXNvcjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXRyaXBhZHZpc29yOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tb2Rub2tsYXNzbmlraTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW9kbm9rbGFzc25pa2k7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1vZG5va2xhc3NuaWtpLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW9kbm9rbGFzc25pa2ktc3F1YXJlOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZ2V0LXBvY2tldDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWdldC1wb2NrZXQ7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS13aWtpcGVkaWEtdzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLXdpa2lwZWRpYS13OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tc2FmYXJpOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItc2FmYXJpOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2hyb21lOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2hyb21lOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tZmlyZWZveDpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZpcmVmb3g7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1vcGVyYTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW9wZXJhOyB9XG4uI3skZmEtY3NzLXByZWZpeH0taW50ZXJuZXQtZXhwbG9yZXI6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1pbnRlcm5ldC1leHBsb3JlcjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LXR2OmJlZm9yZSxcbi4jeyRmYS1jc3MtcHJlZml4fS10ZWxldmlzaW9uOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItdGVsZXZpc2lvbjsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvbnRhbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvbnRhbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LTUwMHB4OmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItNTAwcHg7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1hbWF6b246YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1hbWF6b247IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYWxlbmRhci1wbHVzLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYWxlbmRhci1wbHVzLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jYWxlbmRhci1taW51cy1vOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItY2FsZW5kYXItbWludXMtbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhbGVuZGFyLXRpbWVzLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jYWxlbmRhci10aW1lcy1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItY2hlY2stbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNhbGVuZGFyLWNoZWNrLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1pbmR1c3RyeTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWluZHVzdHJ5OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbWFwLXBpbjpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1hcC1waW47IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYXAtc2lnbnM6YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1tYXAtc2lnbnM7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1tYXAtbzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLW1hcC1vOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tbWFwOmJlZm9yZSB7IGNvbnRlbnQ6ICRmYS12YXItbWFwOyB9XG4uI3skZmEtY3NzLXByZWZpeH0tY29tbWVudGluZzpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWNvbW1lbnRpbmc7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1jb21tZW50aW5nLW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci1jb21tZW50aW5nLW87IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1ob3V6ejpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWhvdXp6OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tdmltZW86YmVmb3JlIHsgY29udGVudDogJGZhLXZhci12aW1lbzsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWJsYWNrLXRpZTpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWJsYWNrLXRpZTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvbnRpY29uczpiZWZvcmUgeyBjb250ZW50OiAkZmEtdmFyLWZvbnRpY29uczsgfVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */
diff --git a/ui/fontello/LICENSE.txt b/ui/fontello/LICENSE.txt
deleted file mode 100644
index 0effddb..0000000
--- a/ui/fontello/LICENSE.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-Font license info
-
-
-## Font Awesome
-
- Copyright (C) 2012 by Dave Gandy
-
- Author: Dave Gandy
- License: SIL ()
- Homepage: http://fortawesome.github.com/Font-Awesome/
-
-
-## Entypo
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: Daniel Bruce
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.entypo.com
-
-
-## Elusive
-
- Copyright (C) 2013 by Aristeides Stathopoulos
-
- Author: Aristeides Stathopoulos
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://aristeides.com/
-
-
-## MFG Labs
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: MFG Labs
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.mfglabs.com/
-
-
-## Typicons
-
- (c) Stephen Hutchings 2012
-
- Author: Stephen Hutchings
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://typicons.com/
-
-
-## Zocial
-
- Copyright (C) 2012 by Sam Collins
-
- Author: Sam Collins
- License: MIT (http://opensource.org/licenses/mit-license.php)
- Homepage: http://zocial.smcllns.com/
-
-
-## Fontelico
-
- Copyright (C) 2012 by Fontello project
-
- Author: Crowdsourced, for Fontello project
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://fontello.com
-
-
diff --git a/ui/fontello/Makefile.am b/ui/fontello/Makefile.am
deleted file mode 100644
index 0576ed2..0000000
--- a/ui/fontello/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SUBDIRS = css font
-
-fontellodir = $(datadir)/wok/ui/fontello
-
-dist_fontello_DATA = LICENSE.txt
diff --git a/ui/fontello/css/Makefile.am b/ui/fontello/css/Makefile.am
deleted file mode 100644
index 50b5489..0000000
--- a/ui/fontello/css/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-cssdir = $(datadir)/wok/ui/fontello/css
-
-dist_css_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/fontello/css/animation.css b/ui/fontello/css/animation.css
deleted file mode 100644
index ac5a956..0000000
--- a/ui/fontello/css/animation.css
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- Animation example, for spinners
-*/
-.animate-spin {
- -moz-animation: spin 2s infinite linear;
- -o-animation: spin 2s infinite linear;
- -webkit-animation: spin 2s infinite linear;
- animation: spin 2s infinite linear;
- display: inline-block;
-}
-@-moz-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-webkit-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-o-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-ms-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
diff --git a/ui/fontello/css/fontello.css b/ui/fontello/css/fontello.css
deleted file mode 100644
index d9df9ce..0000000
--- a/ui/fontello/css/fontello.css
+++ /dev/null
@@ -1,261 +0,0 @@
-@font-face {
- font-family: 'fontello';
- src: url('../font/fontello.eot?99320945');
- src: url('../font/fontello.eot?99320945#iefix') format('embedded-opentype'),
- url('../font/fontello.woff?99320945') format('woff'),
- url('../font/fontello.ttf?99320945') format('truetype'),
- url('../font/fontello.svg?99320945#fontello') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
-/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
-/*
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: 'fontello';
- src: url('../font/fontello.svg?99320945#fontello') format('svg');
- }
-}
-*/
-
- [class^="icon-"]:before, [class*=" icon-"]:before {
- font-family: "fontello";
- font-style: normal;
- font-weight: normal;
- speak: none;
-
- display: inline-block;
- text-decoration: inherit;
- width: 1em;
- margin-right: .2em;
- text-align: center;
- /* opacity: .8; */
-
- /* For safety - reset parent styles, that can break glyph codes*/
- font-variant: normal;
- text-transform: none;
-
- /* fix buttons height, for twitter bootstrap */
- line-height: 1em;
-
- /* Animation center compensation - margins should be symmetric */
- /* remove if not needed */
- margin-left: .2em;
-
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
-
- /* Uncomment for 3D effect */
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
-}
-
-.icon-user:before { content: '\e800'; } /* '' */
-.icon-help-circled:before { content: '\e801'; } /* '' */
-.icon-search:before { content: '\e802'; } /* '' */
-.icon-tag:before { content: '\e803'; } /* '' */
-.icon-dot-2:before { content: '\e804'; } /* '' */
-.icon-arrows-cw:before { content: '\e805'; } /* '' */
-.icon-print:before { content: '\e806'; } /* '' */
-.icon-cancel-circled:before { content: '\e807'; } /* '' */
-.icon-edit-alt:before { content: '\e808'; } /* '' */
-.icon-login:before { content: '\e809'; } /* '' */
-.icon-logout:before { content: '\e80a'; } /* '' */
-.icon-download:before { content: '\e80b'; } /* '' */
-.icon-th-large:before { content: '\e80c'; } /* '' */
-.icon-th:before { content: '\e80d'; } /* '' */
-.icon-th-list:before { content: '\e80e'; } /* '' */
-.icon-star:before { content: '\e80f'; } /* '' */
-.icon-star-empty:before { content: '\e810'; } /* '' */
-.icon-users:before { content: '\e811'; } /* '' */
-.icon-upload:before { content: '\e812'; } /* '' */
-.icon-circle-thin:before { content: '\e813'; } /* '' */
-.icon-dot-circled:before { content: '\e814'; } /* '' */
-.icon-ok:before { content: '\e815'; } /* '' */
-.icon-check-empty-1:before { content: '\e816'; } /* '' */
-.icon-clock-2:before { content: '\e817'; } /* '' */
-.icon-ok-squared:before { content: '\e818'; } /* '' */
-.icon-pin:before { content: '\e820'; } /* '' */
-.icon-eye:before { content: '\e821'; } /* '' */
-.icon-attach:before { content: '\e824'; } /* '' */
-.icon-unlink:before { content: '\e825'; } /* '' */
-.icon-link:before { content: '\e826'; } /* '' */
-.icon-home:before { content: '\e827'; } /* '' */
-.icon-info:before { content: '\e828'; } /* '' */
-.icon-info-circled:before { content: '\e829'; } /* '' */
-.icon-export:before { content: '\e82f'; } /* '' */
-.icon-export-alt:before { content: '\e830'; } /* '' */
-.icon-share:before { content: '\e831'; } /* '' */
-.icon-share-squared:before { content: '\e832'; } /* '' */
-.icon-retweet:before { content: '\e836'; } /* '' */
-.icon-attention-alt:before { content: '\e837'; } /* '' */
-.icon-attention:before { content: '\e838'; } /* '' */
-.icon-attention-circled:before { content: '\e839'; } /* '' */
-.icon-location:before { content: '\e83a'; } /* '' */
-.icon-trash:before { content: '\e83b'; } /* '' */
-.icon-doc:before { content: '\e83c'; } /* '' */
-.icon-docs:before { content: '\e83d'; } /* '' */
-.icon-doc-text:before { content: '\e83e'; } /* '' */
-.icon-doc-inv:before { content: '\e83f'; } /* '' */
-.icon-doc-text-inv:before { content: '\e840'; } /* '' */
-.icon-file-pdf:before { content: '\e841'; } /* '' */
-.icon-file-word:before { content: '\e842'; } /* '' */
-.icon-file-excel:before { content: '\e843'; } /* '' */
-.icon-file-powerpoint:before { content: '\e844'; } /* '' */
-.icon-file-image:before { content: '\e845'; } /* '' */
-.icon-cog:before { content: '\e84b'; } /* '' */
-.icon-cog-alt:before { content: '\e84c'; } /* '' */
-.icon-wrench:before { content: '\e84d'; } /* '' */
-.icon-calendar:before { content: '\e84e'; } /* '' */
-.icon-calendar-empty:before { content: '\e84f'; } /* '' */
-.icon-clock:before { content: '\e852'; } /* '' */
-.icon-block:before { content: '\e853'; } /* '' */
-.icon-zoom-in:before { content: '\e857'; } /* '' */
-.icon-zoom-out:before { content: '\e858'; } /* '' */
-.icon-down-circled2:before { content: '\e859'; } /* '' */
-.icon-up-circled2:before { content: '\e85a'; } /* '' */
-.icon-left-circled2:before { content: '\e85b'; } /* '' */
-.icon-right-circled2:before { content: '\e85c'; } /* '' */
-.icon-down-dir:before { content: '\e85d'; } /* '' */
-.icon-up-dir:before { content: '\e85e'; } /* '' */
-.icon-left-dir:before { content: '\e85f'; } /* '' */
-.icon-right-dir:before { content: '\e860'; } /* '' */
-.icon-down-open:before { content: '\e861'; } /* '' */
-.icon-left-open:before { content: '\e862'; } /* '' */
-.icon-right-open:before { content: '\e863'; } /* '' */
-.icon-up-open:before { content: '\e864'; } /* '' */
-.icon-angle-left:before { content: '\e865'; } /* '' */
-.icon-angle-right:before { content: '\e866'; } /* '' */
-.icon-angle-up:before { content: '\e867'; } /* '' */
-.icon-angle-down:before { content: '\e868'; } /* '' */
-.icon-angle-circled-left:before { content: '\e869'; } /* '' */
-.icon-angle-circled-right:before { content: '\e86a'; } /* '' */
-.icon-angle-circled-up:before { content: '\e86b'; } /* '' */
-.icon-angle-circled-down:before { content: '\e86c'; } /* '' */
-.icon-angle-double-left:before { content: '\e86d'; } /* '' */
-.icon-angle-double-right:before { content: '\e86e'; } /* '' */
-.icon-angle-double-up:before { content: '\e86f'; } /* '' */
-.icon-angle-double-down:before { content: '\e870'; } /* '' */
-.icon-down-big:before { content: '\e871'; } /* '' */
-.icon-left-big:before { content: '\e872'; } /* '' */
-.icon-right-big:before { content: '\e873'; } /* '' */
-.icon-up-big:before { content: '\e874'; } /* '' */
-.icon-left-circled:before { content: '\e875'; } /* '' */
-.icon-right-circled:before { content: '\e876'; } /* '' */
-.icon-up-circled:before { content: '\e877'; } /* '' */
-.icon-down-circled:before { content: '\e878'; } /* '' */
-.icon-cw:before { content: '\e879'; } /* '' */
-.icon-ccw:before { content: '\e87a'; } /* '' */
-.icon-level-up:before { content: '\e87c'; } /* '' */
-.icon-level-down:before { content: '\e87d'; } /* '' */
-.icon-shuffle:before { content: '\e87e'; } /* '' */
-.icon-exchange:before { content: '\e87f'; } /* '' */
-.icon-history:before { content: '\e880'; } /* '' */
-.icon-expand:before { content: '\e881'; } /* '' */
-.icon-collapse:before { content: '\e882'; } /* '' */
-.icon-expand-right:before { content: '\e883'; } /* '' */
-.icon-collapse-left:before { content: '\e884'; } /* '' */
-.icon-play:before { content: '\e885'; } /* '' */
-.icon-play-circled2:before { content: '\e886'; } /* '' */
-.icon-play-circled:before { content: '\e887'; } /* '' */
-.icon-stop:before { content: '\e888'; } /* '' */
-.icon-cloud:before { content: '\e889'; } /* '' */
-.icon-table:before { content: '\e88a'; } /* '' */
-.icon-off:before { content: '\e88b'; } /* '' */
-.icon-check:before { content: '\e88c'; } /* '' */
-.icon-asterisk:before { content: '\e88e'; } /* '' */
-.icon-chart-bar:before { content: '\e88f'; } /* '' */
-.icon-bug:before { content: '\e890'; } /* '' */
-.icon-certificate:before { content: '\e891'; } /* '' */
-.icon-tasks:before { content: '\e892'; } /* '' */
-.icon-sort-up:before { content: '\e893'; } /* '' */
-.icon-sort-down:before { content: '\e894'; } /* '' */
-.icon-sort:before { content: '\e895'; } /* '' */
-.icon-gauge:before { content: '\e896'; } /* '' */
-.icon-spinner:before { content: '\e897'; } /* '' */
-.icon-database:before { content: '\e898'; } /* '' */
-.icon-lifebuoy:before { content: '\e899'; } /* '' */
-.icon-cubes:before { content: '\e89a'; } /* '' */
-.icon-cube:before { content: '\e89b'; } /* '' */
-.icon-bullseye:before { content: '\e89c'; } /* '' */
-.icon-windows:before { content: '\e89d'; } /* '' */
-.icon-cancel-circled-1:before { content: '\e89e'; } /* '' */
-.icon-plus-1:before { content: '\e8a0'; } /* '' */
-.icon-plus-circled-1:before { content: '\e8a1'; } /* '' */
-.icon-minus-1:before { content: '\e8a3'; } /* '' */
-.icon-minus-circled-1:before { content: '\e8a4'; } /* '' */
-.icon-help-circled-1:before { content: '\e8a7'; } /* '' */
-.icon-heart-empty-1:before { content: '\e8aa'; } /* '' */
-.icon-mail-1:before { content: '\e8ab'; } /* '' */
-.icon-star-1:before { content: '\e8ac'; } /* '' */
-.icon-star-empty-1:before { content: '\e8ad'; } /* '' */
-.icon-link-1:before { content: '\e8ae'; } /* '' */
-.icon-attach-1:before { content: '\e8af'; } /* '' */
-.icon-eye-1:before { content: '\e8b2'; } /* '' */
-.icon-attention-1:before { content: '\e8b3'; } /* '' */
-.icon-doc-text-1:before { content: '\e8b4'; } /* '' */
-.icon-doc-text-inv-1:before { content: '\e8b5'; } /* '' */
-.icon-share-1:before { content: '\e8b7'; } /* '' */
-.icon-shareable:before { content: '\e8b8'; } /* '' */
-.icon-ccw-1:before { content: '\e8cc'; } /* '' */
-.icon-cw-1:before { content: '\e8cd'; } /* '' */
-.icon-arrows-ccw:before { content: '\e8ce'; } /* '' */
-.icon-play-1:before { content: '\e8cf'; } /* '' */
-.icon-pause:before { content: '\e8d0'; } /* '' */
-.icon-record:before { content: '\e8d1'; } /* '' */
-.icon-stop-1:before { content: '\e8d2'; } /* '' */
-.icon-switch:before { content: '\e8d3'; } /* '' */
-.icon-loop:before { content: '\e8d4'; } /* '' */
-.icon-cloud-1:before { content: '\e8d5'; } /* '' */
-.icon-certificate-outline:before { content: '\e8db'; } /* '' */
-.icon-certificate-1:before { content: '\e8dc'; } /* '' */
-.icon-windows-1:before { content: '\e8dd'; } /* '' */
-.icon-spin5:before { content: '\e8df'; } /* '' */
-.icon-spin2:before { content: '\e8e0'; } /* '' */
-.icon-picture:before { content: '\e8e4'; } /* '' */
-.icon-menu:before { content: '\e8e5'; } /* '' */
-.icon-sliders:before { content: '\e8e6'; } /* '' */
-.icon-list-alt:before { content: '\e8e7'; } /* '' */
-.icon-ajust:before { content: '\e8e8'; } /* '' */
-.icon-circle:before { content: '\e8e9'; } /* '' */
-.icon-circle-empty:before { content: '\e8ea'; } /* '' */
-.icon-circle-notch:before { content: '\e8ec'; } /* '' */
-.icon-fork:before { content: '\e8ed'; } /* '' */
-.icon-sitemap:before { content: '\e8ee'; } /* '' */
-.icon-stethoscope:before { content: '\e8ef'; } /* '' */
-.icon-shield:before { content: '\e8f0'; } /* '' */
-.icon-heart-1:before { content: '\e8f1'; } /* '' */
-.icon-search-1:before { content: '\e8f2'; } /* '' */
-.icon-menu-1:before { content: '\e8f3'; } /* '' */
-.icon-back:before { content: '\e8f6'; } /* '' */
-.icon-home-1:before { content: '\e8f7'; } /* '' */
-.icon-pencil-1:before { content: '\e8f8'; } /* '' */
-.icon-location-1:before { content: '\e8f9'; } /* '' */
-.icon-logout-1:before { content: '\e8fb'; } /* '' */
-.icon-login-1:before { content: '\e8fc'; } /* '' */
-.icon-publish:before { content: '\e8fd'; } /* '' */
-.icon-window:before { content: '\e8fe'; } /* '' */
-.icon-chart-pie:before { content: '\e8ff'; } /* '' */
-.icon-chart-line:before { content: '\e900'; } /* '' */
-.icon-chart-area:before { content: '\e901'; } /* '' */
-.icon-chart-bar-1:before { content: '\e902'; } /* '' */
-.icon-air:before { content: '\e905'; } /* '' */
-.icon-database-1:before { content: '\e906'; } /* '' */
-.icon-flow-cascade:before { content: '\e907'; } /* '' */
-.icon-flow-tree:before { content: '\e908'; } /* '' */
-.icon-flow-line:before { content: '\e909'; } /* '' */
-.icon-flow-branch:before { content: '\e90a'; } /* '' */
-.icon-flow-parallel-1:before { content: '\e90f'; } /* '' */
-.icon-dot:before { content: '\e910'; } /* '' */
-.icon-dot-3:before { content: '\e911'; } /* '' */
-.icon-cd:before { content: '\e912'; } /* '' */
-.icon-back-in-time:before { content: '\e913'; } /* '' */
-.icon-list:before { content: '\e914'; } /* '' */
-.icon-list-add:before { content: '\e915'; } /* '' */
-.icon-progress-0:before { content: '\e919'; } /* '' */
-.icon-pencil-2:before { content: '\e91d'; } /* '' */
-.icon-cog-2:before { content: '\e91f'; } /* '' */
-.icon-cog-circled:before { content: '\e920'; } /* '' */
-.icon-cogs:before { content: '\e921'; } /* '' */
-.icon-calendar-1:before { content: '\e924'; } /* '' */
-.icon-doc-new:before { content: '\e925'; } /* '' */
\ No newline at end of file
diff --git a/ui/fontello/font/Makefile.am b/ui/fontello/font/Makefile.am
deleted file mode 100644
index da9cb66..0000000
--- a/ui/fontello/font/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-fontdir = $(datadir)/wok/ui/fontello/font
-
-dist_font_DATA = $(wildcard fontello.*) $(NULL)
diff --git a/ui/fontello/font/fontello.eot b/ui/fontello/font/fontello.eot
deleted file mode 100644
index 4485477e781e2444c35c47b5b8944695fcb79af3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 42700
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
DzM+#I
diff --git a/ui/fontello/font/fontello.svg b/ui/fontello/font/fontello.svg
deleted file mode 100644
index 7efcd70..0000000
--- a/ui/fontello/font/fontello.svg
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Copyright (C) 2014 by original authors @ fontello.com</metadata>
-<defs>
-<font id="fontello" horiz-adv-x="1000" >
-<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
-<missing-glyph horiz-adv-x="1000" />
-<glyph glyph-name="user" unicode="" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58z m-179 498q0-88-63-151t-151-63-152 63-62 151 62 152 152 63 151-63 63-152z" horiz-adv-x="785.7" />
-<glyph glyph-name="help-circled" unicode="" d="m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="search" unicode="" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="tag" unicode="" d="m250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z" horiz-adv-x="857.1" />
-<glyph glyph-name="dot-2" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 32-32 78 32 78 78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33q-46 0-78 32t-32 78 32 78 78 32z" horiz-adv-x="570" />
-<glyph glyph-name="arrows-cw" unicode="" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="print" unicode="" d="m214-7h500v143h-500v-143z m0 357h500v214h-89q-22 0-38 16t-16 38v89h-357v-357z m643-36q0 15-10 25t-26 11-25-11-10-25 10-25 25-10 26 10 10 25z m72 0v-232q0-7-6-12t-12-6h-125v-89q0-22-16-38t-38-16h-536q-22 0-37 16t-16 38v89h-125q-7 0-13 6t-5 12v232q0 44 32 76t75 31h36v304q0 22 16 38t37 16h375q23 0 50-12t42-26l85-85q15-16 27-43t11-49v-143h35q45 0 76-31t32-76z" horiz-adv-x="928.6" />
-<glyph glyph-name="cancel-circled" unicode="" d="m641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="edit-alt" unicode="" d="m0-150l0 1000 646 0-164-164-318 0 0-672 672 0 0 319 164 164 0-647-1000 0z m363 363l0 118 6 0q39 2 72-30 39-39 39-88l-117 0z m51 176l367 367 125-125-367-367z m397 397l64 64 125-125-64-64z" horiz-adv-x="1000" />
-<glyph glyph-name="login" unicode="" d="m661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 63 27t27 63v392q0 37-27 63t-63 27h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
-<glyph glyph-name="logout" unicode="" d="m357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
-<glyph glyph-name="download" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-144 60t-59 143z m155 359q0 33 24 57 23 23 56 23t57-23l105-106v344q0 33 24 57t56 23 57-23 24-57v-344l110 110q24 24 57 24t56-24q24-23 24-56t-24-57l-247-247q-24-25-57-25-32 0-56 25l-242 242q-24 24-24 57z" horiz-adv-x="937.5" />
-<glyph glyph-name="th-large" unicode="" d="m429 279v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z m500-428v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="th" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-22 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-22 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="th-list" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m714-285v-108q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v108q0 22 16 38t38 15h535q23 0 38-15t16-38z m-714 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m714-286v-107q0-22-16-38t-38-15h-535q-23 0-38 15t-16 38v107q0 23 16 38t38 16h535q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-535q-23 0-38 16t-16 38v107q0 22 16 38t38 16h535q23 0 38-16t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="star" unicode="" d="m929 489q0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
-<glyph glyph-name="star-empty" unicode="" d="m634 290l171 165-235 35-106 213-105-213-236-35 171-165-41-235 211 111 211-111z m295 199q0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
-<glyph glyph-name="users" unicode="" d="m331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
-<glyph glyph-name="upload" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-143 59t-60 144z m155 407q0 33 24 57l247 247q23 23 57 23 33 0 56-23l243-242q23-24 23-57t-23-57q-24-23-57-23t-57 23l-105 105v-344q0-33-24-57t-56-24q-33 0-57 24t-24 57v344l-110-110q-24-23-57-23t-56 23-24 57z" horiz-adv-x="937.5" />
-<glyph glyph-name="circle-thin" unicode="" d="m429 707q-73 0-139-28t-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139-29 139-76 114-114 76-138 28z m428-357q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="dot-circled" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m-142 304q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="ok" unicode="" d="m932 534q0-22-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38z" horiz-adv-x="1000" />
-<glyph glyph-name="check-empty-1" unicode="" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
-<glyph glyph-name="clock-2" unicode="" d="m0 349q0 188 134 322t322 134 321-134 133-322-133-321-321-133-322 133-134 321z m119 0q0-140 99-238t238-99 238 99 99 238-99 238-238 99-238-99-99-238z m172-69l0 117 117 0 0 213 117 0 0-330-234 0z" horiz-adv-x="910" />
-<glyph glyph-name="ok-squared" unicode="" d="m382 125l343 343q10 10 10 25t-10 25l-57 57q-11 10-25 10t-25-10l-261-261-118 118q-10 11-25 11t-25-11l-57-57q-10-11-10-25t10-25l200-200q11-11 25-11t25 11z m475 493v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="pin" unicode="" d="m268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
-<glyph glyph-name="eye" unicode="" d="m929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
-<glyph glyph-name="attach" unicode="" d="m783 77q0-65-44-109t-109-44q-75 0-131 55l-434 434q-63 64-63 151 0 88 62 150t150 62q88 0 152-63l338-338q5-5 5-12 0-9-17-26t-26-17q-7 0-13 5l-338 339q-44 43-101 43-59 0-100-42t-40-101q0-58 42-101l433-433q35-35 81-35 36 0 59 23t24 59q0 46-36 81l-324 324q-14 14-33 14-16 0-27-11t-11-27q0-18 14-33l229-228q6-6 6-13 0-9-18-26t-26-17q-7 0-12 5l-229 229q-35 34-35 83 0 46 32 78t77 32q49 0 83-36l325-324q55-54 55-131z" horiz-adv-x="785.7" />
-<glyph glyph-name="unlink" unicode="" d="m245 141l-143-143q-5-5-13-5-6 0-13 5-5 5-5 13t5 13l143 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 11-24 31l134 10 152-153q15-15 38-15t38 15l82 81q15 16 15 37 0 23-15 38l-153 154 10 133q20-12 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z" horiz-adv-x="928.6" />
-<glyph glyph-name="link" unicode="" d="m812 171q0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
-<glyph glyph-name="home" unicode="" d="m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z" horiz-adv-x="928.6" />
-<glyph glyph-name="info" unicode="" d="m357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="info-circled" unicode="" d="m571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="export" unicode="" d="m786 298v-144q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h142q7 0 13-6t5-12q0-15-15-18-43-15-74-34-5-2-9-2h-62q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v119q0 11 10 16 16 7 30 21 9 9 20 4 12-5 12-16z m132 277l-214-214q-10-11-25-11-7 0-14 3-22 9-22 33v107h-89q-181 0-245-73-66-77-41-264 2-13-11-19-5-1-7-1-9 0-14 7-6 8-12 17t-22 38-28 56-21 64-10 68q0 27 2 50t8 51 15 49 27 45 38 42 52 34 70 27 89 17 110 6h89v107q0 24 22 33 7 3 14 3 14 0 25-11l214-214q11-11 11-25t-11-25z" horiz-adv-x="928.6" />
-<glyph glyph-name="export-alt" unicode="" d="m561 236l196 196q11 11 11 25t-11 25l-196 197q-17 17-39 7-22-9-22-32v-90q-66 0-121-11t-90-28-64-44-42-53-25-61-12-62-3-62q0-101 93-226 6-6 14-6 4 0 7 1 13 5 11 19-25 197 34 264 26 29 73 42t125 13v-89q0-24 22-33 7-3 14-3 14 0 25 11z m296 382v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="share" unicode="" d="m679 279q74 0 126-53t52-126-52-126-126-53-127 53-52 126q0 7 1 19l-201 100q-51-48-121-48-75 0-127 53t-52 126 52 126 127 53q70 0 121-48l201 100q-1 12-1 19 0 74 52 126t127 53 126-53 52-126-52-126-126-53q-71 0-122 48l-201-100q1-12 1-19t-1-19l201-100q51 48 122 48z" horiz-adv-x="857.1" />
-<glyph glyph-name="share-squared" unicode="" d="m714 183q0 49-35 84t-84 36q-46 0-80-33l-135 67q1 9 1 13t-1 13l135 67q34-33 80-33 50 0 84 36t35 84-35 84-84 35-84-35-35-84q0-4 1-13l-134-67q-35 32-81 32-49 0-84-35t-35-84 35-84 84-35q46 0 81 32l134-67q-1-9-1-13 0-49 35-84t84-35 84 35 35 84z m143 435v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="retweet" unicode="" d="m714 11q0-8-5-13t-13-5h-535q-5 0-8 1t-5 4-3 4-2 7 0 6v335h-107q-15 0-25 11t-11 25q0 13 8 23l179 214q11 12 27 12t28-12l178-214q9-10 9-23 0-15-11-25t-25-11h-107v-214h321q9 0 14-6l89-108q4-6 4-11z m357 232q0-14-8-23l-179-214q-11-13-27-13t-27 13l-179 214q-8 9-8 23 0 14 10 25t26 11h107v214h-322q-9 0-14 7l-89 107q-4 5-4 11 0 7 5 12t13 6h536q4 0 7-1t5-4 3-5 2-6 1-7v-334h107q14 0 25-11t10-25z" horiz-adv-x="1071.4" />
-<glyph glyph-name="attention-alt" unicode="" d="m286 154v-125q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v125q0 14 11 25t25 10h143q15 0 25-10t11-25z m16 589l-15-429q-1-14-12-25t-25-10h-143q-14 0-25 10t-12 25l-15 429q-1 14 9 25t25 11h179q14 0 25-11t9-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="attention" unicode="" d="m571 83v106q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-106q0-8 5-13t12-6h108q7 0 12 6t5 13z m-1 208l10 257q0 6-5 10-7 6-14 6h-122q-7 0-14-6-5-4-5-12l9-255q0-5 6-9t13-3h103q8 0 13 3t6 9z m-7 522l428-786q20-35-1-70-10-17-26-26t-35-10h-858q-18 0-35 10t-26 26q-21 35-1 70l429 786q9 17 26 27t36 10 36-10 27-27z" horiz-adv-x="1000" />
-<glyph glyph-name="attention-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m71-696v106q0 8-5 13t-12 5h-107q-8 0-13-5t-6-13v-106q0-8 6-13t13-6h107q7 0 12 6t5 13z m-1 192l10 346q0 7-6 10-5 5-13 5h-123q-8 0-13-5-6-3-6-10l10-346q0-6 5-10t14-4h103q8 0 13 4t6 10z" horiz-adv-x="857.1" />
-<glyph glyph-name="location" unicode="" d="m429 493q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m142 0q0-61-18-100l-203-432q-9-18-27-29t-37-11-38 11-26 29l-204 432q-18 39-18 100 0 118 84 202t202 84 202-84 83-202z" horiz-adv-x="571.4" />
-<glyph glyph-name="trash" unicode="" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
-<glyph glyph-name="doc" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z" horiz-adv-x="857.1" />
-<glyph glyph-name="docs" unicode="" d="m946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
-<glyph glyph-name="doc-text" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
-<glyph glyph-name="doc-inv" unicode="" d="m571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-38t38-15h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
-<glyph glyph-name="doc-text-inv" unicode="" d="m819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-38t38-15z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v35q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-35q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-pdf" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-287 331q18-14 47-31 33 4 65 4 82 0 99-27 9-13 1-29 0-1-1-1l-1-2v0q-3-21-39-21-27 0-65 11t-72 29q-123-13-219-46-85-146-135-146-8 0-15 4l-14 6q0 1-3 3-6 6-4 20 5 23 32 51t73 54q8 5 13-3 1-1 1-2 29 47 60 110 38 76 58 146-13 46-17 89t4 71q6 22 23 22h12q13 0 20-8 10-12 5-38-1-3-2-4 0-2 0-5v-17q-1-68-8-107 31-91 82-133z m-322-229q30 13 77 88-29-22-49-47t-28-41z m223 513q-9-23-2-73 1 4 4 24 0 2 4 24 1 3 3 5-1 0-1 1t0 1-1 1q0 12-7 20 0-1 0-1v-2z m-70-368q76 30 159 45-1 0-7 5t-9 8q-43 37-71 98-15-48-47-110-16-31-25-46z m361 8q-14 14-78 14 42-16 69-16 8 0 10 1 0 0-1 1z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-word" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-656 500v-59h39l92-369h88l72 271q4 11 5 25 1 9 1 14h3l1-14q1-1 2-11t3-14l72-271h89l91 369h39v59h-167v-59h50l-55-245q-3-11-4-25l-1-12h-3l-1 12q-1 2-2 11t-3 14l-81 304h-63l-81-304q-1-5-2-13t-2-12l-2-12h-2l-2 12q-1 14-4 25l-55 245h50v59h-167z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-excel" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-547 131v-59h157v59h-42l58 90q3 4 5 9t5 8 2 2h1q0-2 2-6 2-2 3-4t3-4 4-5l60-90h-43v-59h163v59h-38l-107 152 108 158h38v59h-156v-59h41l-57-89q-2-4-6-9t-5-8l-1-1h-1q-1 2-3 5-3 6-9 13l-59 89h42v59h-162v-59h38l106-152-109-158h-38z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-powerpoint" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-554 131v-59h183v59h-52v93h76q43 0 66 9 37 12 59 48t23 82q0 45-21 78t-56 49q-27 10-72 10h-206v-59h52v-310h-52z m197 156h-66v150h67q29 0 46-10 31-19 31-64 0-50-34-67-18-9-44-9z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-image" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-72 250v-178h-571v107l107 107 71-71 215 214z m-464 108q-45 0-76 31t-31 76 31 76 76 31 76-31 31-76-31-76-76-31z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog" unicode="" d="m571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog-alt" unicode="" d="m500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 11 12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
-<glyph glyph-name="wrench" unicode="" d="m214 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m360 234l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50 0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59-27-75-92-122t-144-46q-104 0-177 73t-73 177 73 176 177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
-<glyph glyph-name="calendar" unicode="" d="m71-79h161v161h-161v-161z m197 0h178v161h-178v-161z m-197 197h161v178h-161v-178z m197 0h178v178h-178v-178z m-197 214h161v161h-161v-161z m411-411h179v161h-179v-161z m-214 411h178v161h-178v-161z m428-411h161v161h-161v-161z m-214 197h179v178h-179v-178z m-196 482v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161q0-7 6-13t12-5h36q7 0 12 5t6 13z m410-482h161v178h-161v-178z m-214 214h179v161h-179v-161z m214 0h161v161h-161v-161z m18 268v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161q0-7 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="calendar-empty" unicode="" d="m71-79h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="clock" unicode="" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="block" unicode="" d="m732 352q0 90-48 164l-421-420q76-50 166-50 62 0 118 25t96 65 65 97 24 119z m-557-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137-137-92-166-34-167 34-137 92-91 137-34 168 34 167 91 137 137 91 167 34 166-34 137-91 91-137 34-167z" horiz-adv-x="857.1" />
-<glyph glyph-name="zoom-in" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="zoom-out" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13v36q0 7 6 12t12 5h322q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="down-circled2" unicode="" d="m625 332q0-7-6-13l-178-178q-6-5-12-5t-13 5l-179 178q-8 9-4 20 5 11 17 11h107v196q0 8 5 13t13 5h107q8 0 13-5t5-13v-196h107q8 0 13-5t5-13z m-196 322q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-circled2" unicode="" d="m624 361q-5-11-17-11h-107v-196q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v196h-107q-8 0-13 5t-5 13q0 7 6 13l178 178q6 5 13 5t12-5l179-178q8-9 4-20z m-195 293q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="left-circled2" unicode="" d="m643 404v-108q0-7-5-12t-13-5h-196v-108q0-7-5-12t-13-5q-7 0-14 5l-178 178q-5 5-5 13t5 13l179 178q5 5 13 5 7 0 12-5t6-12v-108h196q7 0 13-5t5-12z m89-54q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-circled2" unicode="" d="m643 350q0-8-5-13l-179-178q-5-5-13-5-7 0-12 5t-5 12v108h-197q-7 0-12 5t-6 12v108q0 7 6 12t12 5h197v108q0 7 5 12t12 5q7 0 14-5l178-178q5-5 5-13z m89 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="down-dir" unicode="" d="m571 457q0-14-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 11-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="up-dir" unicode="" d="m571 171q0-14-10-25t-25-10h-500q-15 0-25 10t-11 25 11 26l250 250q10 10 25 10t25-10l250-250q10-11 10-26z" horiz-adv-x="571.4" />
-<glyph glyph-name="left-dir" unicode="" d="m357 600v-500q0-14-10-25t-26-11-25 11l-250 250q-10 11-10 25t10 25l250 250q11 11 25 11t26-11 10-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="right-dir" unicode="" d="m321 350q0-14-10-25l-250-250q-11-11-25-11t-25 11-11 25v500q0 15 11 25t25 11 25-11l250-250q10-10 10-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="down-open" unicode="" d="m939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l92 92q11 11 26 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" />
-<glyph glyph-name="left-open" unicode="" d="m653 682l-296-296 296-297q11-10 11-25t-11-25l-92-93q-11-10-25-10t-25 10l-414 415q-11 10-11 25t11 25l414 414q10 10 25 10t25-10l92-93q11-10 11-25t-11-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="right-open" unicode="" d="m618 361l-414-415q-11-10-25-10t-26 10l-92 93q-11 11-11 25t11 25l296 297-296 296q-11 11-11 25t11 25l92 93q11 10 26 10t25-10l414-414q10-11 10-25t-10-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="up-open" unicode="" d="m939 107l-92-92q-11-10-26-10t-25 10l-296 297-296-297q-11-10-25-10t-26 10l-92 92q-11 11-11 26t11 25l414 414q11 10 25 10t25-10l414-414q11-11 11-25t-11-26z" horiz-adv-x="1000" />
-<glyph glyph-name="angle-left" unicode="" d="m350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
-<glyph glyph-name="angle-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z" horiz-adv-x="357.1" />
-<glyph glyph-name="angle-up" unicode="" d="m600 189q0-7-6-13l-28-27q-5-6-12-6t-13 6l-220 219-219-219q-5-6-13-6t-13 6l-27 27q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-5 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-down" unicode="" d="m600 439q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 6 13 6t13-6l219-219 220 219q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-circled-left" unicode="" d="m507 72l57 56q11 11 11 26t-11 25l-171 171 171 171q11 11 11 25t-11 25l-57 57q-10 11-25 11t-25-11l-253-253q-11-11-11-25t11-25l253-254q11-10 25-10t25 10z m350 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-right" unicode="" d="m400 72l253 253q11 11 11 25t-11 25l-253 253q-10 11-25 11t-25-11l-57-56q-11-11-11-26t11-25l171-171-171-171q-11-11-11-25t11-26l57-57q11-10 25-10t25 10z m457 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-up" unicode="" d="m650 214l57 57q11 11 11 25t-11 26l-253 253q-11 10-25 10t-26-10l-253-254q-10-10-10-25t10-25l57-57q11-10 25-10t25 10l172 172 171-172q11-10 25-10t25 10z m207 136q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-down" unicode="" d="m454 125l253 253q11 11 11 26t-11 25l-57 57q-10 10-25 10t-25-10l-171-172-172 172q-10 10-25 10t-25-10l-57-57q-10-11-10-25t10-26l253-253q11-10 26-10t25 10z m403 225q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-double-left" unicode="" d="m350 82q0-7-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13z m214 0q0-7-5-13l-28-28q-6-5-13-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q6 6 13 6t13-6l28-28q5-5 5-13t-5-12l-220-220 220-219q5-6 5-13z" horiz-adv-x="571.4" />
-<glyph glyph-name="angle-double-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
-<glyph glyph-name="angle-double-up" unicode="" d="m600 118q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 219-219-219q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 5 12 5t13-5l260-260q6-6 6-13z m0 214q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 220-219-220q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-6 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-double-down" unicode="" d="m600 368q0-7-6-13l-260-260q-5-6-13-6t-12 6l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z m0 214q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="down-big" unicode="" d="m899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l164 164q21 21 51 21 29 0 50-21l42-42q21-21 21-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="left-big" unicode="" d="m857 350v-71q0-30-18-51t-47-21h-393l164-164q21-20 21-50t-21-50l-42-43q-21-20-51-20-29 0-50 20l-364 364q-20 21-20 50 0 29 20 51l364 363q21 21 50 21 29 0 51-21l42-42q21-21 21-50t-21-51l-164-164h393q29 0 47-20t18-51z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-big" unicode="" d="m821 314q0-30-20-50l-363-364q-22-20-51-20-29 0-50 20l-42 42q-22 21-22 51t22 51l163 163h-393q-29 0-47 21t-18 51v71q0 30 18 51t47 20h393l-163 164q-22 21-22 51t22 50l42 42q21 21 50 21 29 0 51-21l363-363q20-20 20-51z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-big" unicode="" d="m899 308q0-28-21-50l-42-42q-21-21-50-21-30 0-51 21l-164 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50 0 30 21 51l363 363q20 21 50 21 30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="left-circled" unicode="" d="m714 314v72q0 14-10 25t-25 10h-281l106 106q11 11 11 25t-11 25l-51 51q-10 10-25 10t-25-10l-202-202-51-51q-10-10-10-25t10-25l51-51 202-202q10-10 25-10t25 10l51 51q10 10 10 25t-10 25l-106 106h281q14 0 25 10t10 25z m143 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-circled" unicode="" d="m717 350q0 15-10 25l-51 51-202 202q-10 10-25 10t-25-10l-51-51q-10-10-10-25t10-25l106-106h-280q-15 0-26-10t-10-25v-72q0-14 10-25t26-10h280l-106-106q-10-10-10-25t10-25l51-51q10-10 25-10t25 10l202 202 51 51q10 10 10 25z m140 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-circled" unicode="" d="m717 351q0 15-11 25l-202 202-50 50q-10 11-25 11t-26-11l-50-50-202-202q-10-10-10-25t10-26l50-50q11-10 26-10t25 10l105 105v-280q0-14 11-25t25-11h71q15 0 25 11t11 25v280l105-105q11-11 26-11t25 11l50 50q11 11 11 26z m140-1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="down-circled" unicode="" d="m717 349q0 16-11 26l-50 50q-10 10-25 10t-26-10l-105-105v280q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-280l-105 105q-11 11-25 11t-26-11l-50-50q-10-10-10-26t10-25l202-202 50-50q11-10 26-10t25 10l50 50 202 202q11 10 11 25z m140 1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="cw" unicode="" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
-<glyph glyph-name="ccw" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
-<glyph glyph-name="level-up" unicode="" d="m568 514q-10-21-32-21h-107v-482q0-8-5-13t-13-5h-393q-12 0-16 10-5 11 2 19l89 108q5 6 14 6h179v357h-107q-23 0-33 21-9 20 5 37l179 215q10 12 27 12t28-12l178-215q15-17 5-37z" horiz-adv-x="571.4" />
-<glyph glyph-name="level-down" unicode="" d="m18 707h393q7 0 12-5t6-13v-482h107q22 0 32-20t-5-39l-178-214q-11-13-28-13t-27 13l-179 214q-14 17-5 39 10 20 33 20h107v357h-179q-8 0-14 6l-89 108q-7 7-2 19 5 10 16 10z" horiz-adv-x="571.4" />
-<glyph glyph-name="shuffle" unicode="" d="m372 582q-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
-<glyph glyph-name="exchange" unicode="" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13 0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
-<glyph glyph-name="history" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
-<glyph glyph-name="expand" unicode="" d="m639 473q10-19-3-36l-178-250q-11-16-29-16t-29 16l-179 250q-13 17-3 36 10 20 32 20h357q22 0 32-20z m75-391v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="collapse" unicode="" d="m639 227q-10-20-32-20h-357q-22 0-32 20-10 19 3 37l179 250q10 15 29 15t29-15l178-250q13-18 3-37z m75-145v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="expand-right" unicode="" d="m607 350q0-18-15-29l-250-179q-17-12-37-2-19 9-19 31v358q0 22 19 31 20 10 37-2l250-179q15-11 15-29z m107-268v536q0 8-5 13t-13 5h-535q-8 0-13-5t-5-13v-536q0-8 5-13t13-5h535q8 0 13 5t5 13z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="collapse-left" unicode="" d="m571 529v-358q0-14-10-25t-25-10q-11 0-21 6l-250 179q-15 11-15 29t15 29l250 179q10 6 21 6 14 0 25-10t10-25z m143-447v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="play" unicode="" d="m772 333l-741-412q-13-7-22-2t-9 20v822q0 14 9 20t22-2l741-412q13-7 13-17t-13-17z" horiz-adv-x="785.7" />
-<glyph glyph-name="play-circled2" unicode="" d="m661 350q0-21-18-31l-304-178q-8-5-18-5-8 0-17 4-18 11-18 31v358q0 20 18 31 18 10 35-1l304-178q18-10 18-31z m71 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="play-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m214-460q18 10 18 31t-18 31l-304 178q-17 11-35 1-18-11-18-31v-358q0-20 18-31 9-4 17-4 10 0 18 5z" horiz-adv-x="857.1" />
-<glyph glyph-name="stop" unicode="" d="m857 743v-786q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v786q0 14 11 25t25 11h785q15 0 26-11t10-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="cloud" unicode="" d="m1071 207q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 74 40 135t104 91q-1 15-1 24 0 118 84 202t202 84q88 0 159-50t105-128q39 35 93 35 59 0 101-42t42-101q0-42-23-77 72-17 119-75t46-134z" horiz-adv-x="1071.4" />
-<glyph glyph-name="table" unicode="" d="m286 82v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-13-5t-5-12v-108q0-7 5-12t13-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
-<glyph glyph-name="off" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34-167 34-136 92-92 137-34 166q0 102 45 191t126 151q24 18 54 14t46-28q18-23 14-53t-28-47q-54-41-84-101t-30-127q0-58 22-111t62-91 91-61 111-23 110 23 92 61 61 91 22 111q0 68-30 127t-84 101q-24 18-28 47t14 53q17 24 47 28t53-14q81-61 126-151t45-191z m-357 429v-358q0-29-21-50t-50-21-51 21-21 50v358q0 29 21 50t51 21 50-21 21-50z" horiz-adv-x="857.1" />
-<glyph glyph-name="check" unicode="" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
-<glyph glyph-name="asterisk" unicode="" d="m827 264q26-14 33-43t-7-55l-35-61q-15-26-44-33t-54 7l-149 85v-171q0-29-21-50t-50-22h-71q-29 0-51 22t-21 50v171l-148-85q-26-15-55-7t-43 33l-36 61q-14 26-7 55t34 43l148 86-148 86q-26 14-34 43t7 55l36 61q15 26 43 33t55-7l148-85v171q0 29 21 50t51 22h71q29 0 50-22t21-50v-171l149 85q26 15 54 7t44-33l35-62q15-25 7-54t-33-43l-148-86z" horiz-adv-x="928.6" />
-<glyph glyph-name="chart-bar" unicode="" d="m357 350v-286h-143v286h143z m214 286v-572h-142v572h142z m572-643v-72h-1143v858h71v-786h1072z m-357 500v-429h-143v429h143z m214 214v-643h-143v643h143z" horiz-adv-x="1142.9" />
-<glyph glyph-name="bug" unicode="" d="m911 314q0-14-11-25t-25-10h-125q0-96-37-162l116-117q10-11 10-25t-10-25q-10-11-25-11t-26 11l-110 110q-3-3-8-7t-24-16-36-21-46-16-54-7v500h-71v-500q-29 0-57 7t-49 19-36 22-25 18l-8 8-102-116q-11-12-27-12-13 0-24 9-11 10-11 25t8 26l113 127q-32 63-32 153h-125q-15 0-25 10t-11 25 11 25 25 11h125v164l-97 97q-11 10-11 25t11 25 25 10 25-10l97-97h471l96 97q11 10 25 10t26-10 10-25-10-25l-97-97v-164h125q15 0 25-11t11-25z m-268 322h-357q0 74 52 126t126 52 127-52 52-126z" horiz-adv-x="928.6" />
-<glyph glyph-name="certificate" unicode="" d="m768 350l77-75q17-16 11-39-7-23-29-29l-105-27 30-103q6-23-11-39-16-18-39-11l-104 30-27-105q-5-23-28-30-7-1-11-1-17 0-28 13l-75 77-76-77q-15-17-39-12-23 7-28 30l-27 105-104-30q-23-7-39 11-17 16-10 39l29 103-105 27q-22 6-29 29-6 23 11 39l77 75-77 75q-17 16-11 39 7 23 29 29l105 27-29 103q-7 23 10 39 16 18 39 11l104-29 27 104q5 23 28 29 23 7 39-11l76-77 75 77q16 17 39 11 23-6 28-29l27-104 104 29q23 7 39-11 17-16 11-39l-30-103 105-27q22-6 29-29 6-23-11-39z" horiz-adv-x="857.1" />
-<glyph glyph-name="tasks" unicode="" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
-<glyph glyph-name="sort-up" unicode="" d="m571 457q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="sort-down" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="sort" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="gauge" unicode="" d="m214 207q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m107 250q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m239-268l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51z m369 18q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-358 357q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m250-107q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m179-250q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269 0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194z" horiz-adv-x="1000" />
-<glyph glyph-name="spinner" unicode="" d="m277 100q0-33-24-57t-57-23q-33 0-56 23t-24 57 24 57 56 23q33 0 57-23t24-57z m241-107q0-30-21-51t-51-21-50 21-21 51 21 50 50 21 51-21 21-50z m-339 357q0-37-27-63t-63-26-63 26-26 63 26 63 63 26 63-26 27-63z m580-250q0-26-18-44t-45-18-44 18-18 44 18 44 44 19 45-19 18-44z m-464 500q0-41-29-69t-70-29-69 29-29 69 29 69 69 29 70-29 29-69z m259 107q0-45-32-76t-76-31-75 31-32 76 32 76 75 31 76-31 32-76z m303-357q0-22-15-38t-38-16-38 16-16 38 16 38 38 16 38-16 15-38z m-116 250q0-18-13-32t-32-13-31 13-13 32 13 31 31 14 32-14 13-31z" horiz-adv-x="875" />
-<glyph glyph-name="database" unicode="" d="m429 421q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0-428q132 0 247 24t181 71v-95q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v95q66-47 181-71t248-24z m0 214q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0 643q116 0 214-19t157-52 57-72v-71q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v71q0 39 58 72t156 52 215 19z" horiz-adv-x="857.1" />
-<glyph glyph-name="lifebuoy" unicode="" d="m500 850q102 0 194-40t160-106 106-160 40-194-40-194-106-160-160-106-194-40-194 40-160 106-106 160-40 194 40 194 106 160 160 106 194 40z m0-71q-106 0-201-51l108-108q46 16 93 16t93-16l108 108q-95 51-201 51z m-378-630l108 108q-16 46-16 93t16 93l-108 108q-51-95-51-201t51-201z m378-228q106 0 201 51l-108 108q-46-16-93-16t-93 16l-108-108q95-51 201-51z m0 215q89 0 152 63t62 151-62 152-152 62-151-62-63-152 63-151 151-63z m270 121l108-108q51 95 51 201t-51 201l-108-108q16-46 16-93t-16-93z" horiz-adv-x="1000" />
-<glyph glyph-name="cubes" unicode="" d="m357-61l214 107v176l-214-92v-191z m-36 254l226 96-226 97-225-97z m608-254l214 107v176l-214-92v-191z m-36 254l225 96-225 97-226-97z m-250 163l214 92v149l-214-92v-149z m-36 212l246 105-246 106-246-106z m607-289v-233q0-20-10-37t-29-26l-250-125q-14-8-32-8t-32 8l-250 125q-3 1-4 2-1-1-4-2l-250-125q-14-8-32-8t-31 8l-250 125q-19 9-29 26t-11 37v233q0 21 12 39t32 26l242 104v223q0 22 12 39t31 27l250 107q13 6 28 6t28-6l250-107q20-9 32-27t12-39v-223l242-104q20-9 32-26t11-40z" horiz-adv-x="1285.7" />
-<glyph glyph-name="cube" unicode="" d="m500-59l357 195v355l-357-130v-420z m-36 483l390 141-390 142-389-142z m465 140v-428q0-20-10-37t-28-26l-393-214q-15-9-34-9t-34 9l-393 214q-17 10-27 26t-10 37v428q0 23 13 41t34 26l393 143q12 5 24 5t25-5l393-143q21-8 34-26t13-41z" horiz-adv-x="1000" />
-<glyph glyph-name="bullseye" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m72 0q0 89-63 152t-151 62-152-62-63-152 63-151 152-63 151 63 63 151z m71 0q0-118-83-202t-202-84-202 84-84 202 84 202 202 84 202-84 83-202z m72 0q0 73-29 139t-76 114-114 76-138 28-139-28-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139z m71 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="windows" unicode="" d="m381 289v-364l-381 53v311h381z m0 414v-367h-381v315z m548-414v-439l-507 70v369h507z m0 490v-443h-507v373z" horiz-adv-x="928.6" />
-<glyph glyph-name="cancel-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m86-420l154 154-86 86-154-152-152 152-88-86 154-154-154-152 88-86 152 152 154-152 86 86z" horiz-adv-x="840" />
-<glyph glyph-name="plus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-210 0 0-210q0-30-50-30t-50 30l0 210-210 0q-30 0-30 50t30 50l210 0 0 210q0 30 50 30t50-30l0-210 210 0z" horiz-adv-x="580" />
-<glyph glyph-name="plus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m52-470l200 0 0 102-200 0 0 202-102 0 0-202-202 0 0-102 202 0 0-202 102 0 0 202z" horiz-adv-x="840" />
-<glyph glyph-name="minus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-520 0q-30 0-30 50t30 50l520 0z" horiz-adv-x="580" />
-<glyph glyph-name="minus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m252-368l-504 0 0-102 504 0 0 102z" horiz-adv-x="840" />
-<glyph glyph-name="help-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78 0 78-54 116-52 38-134 38-64 0-104-26-68-42-72-146l0-4 110 0 0 4q0 26 16 54 16 24 54 24 40 0 52-20 16-20 16-44 0-18-16-40-8-12-20-20l-6-4q-6-4-16-11t-20-15-21-17-17-17q-14-20-18-78l0-8 108 0 0 4q0 12 4 28 6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
-<glyph glyph-name="heart-empty-1" unicode="" d="m790 642q70-64 70-156t-70-156l-360-330-360 330q-70 64-70 156t70 156q64 58 152 58t150-58l58-52 56 52q64 58 152 58t152-58z m-54-260q42 40 42 104 0 66-38 100-38 38-102 38-52 0-104-48l-104-92-106 92q-48 48-102 48-64 0-104-38-38-36-38-100 0-66 44-104l306-286z" horiz-adv-x="860" />
-<glyph glyph-name="mail-1" unicode="" d="m30 586q-32 18-28 40 2 14 26 14l846 0q38 0 20-32-8-14-24-22-14-6-192-102t-182-98q-16-10-46-10-28 0-46 10-4 2-182 98t-192 102z m850-100q20 10 20-10l0-368q0-16-17-32t-33-16l-800 0q-16 0-33 16t-17 32l0 368q0 20 20 10l384-200q18-10 46-10t46 10z" horiz-adv-x="900" />
-<glyph glyph-name="star-1" unicode="" d="m440 790l120-336 320 0-262-196 94-348-272 208-272-208 94 348-262 196 320 0z" horiz-adv-x="880" />
-<glyph glyph-name="star-empty-1" unicode="" d="m880 454l-262-196 94-348-272 208-272-208 94 348-262 196 320 0 120 336 120-336 320 0z m-440-238l150-124-62 178 144 114-176-4-56 202-54-202-176 4 142-114-62-178z" horiz-adv-x="880" />
-<glyph glyph-name="link-1" unicode="" d="m294 116q14 14 34 14t36-14q32-34 0-70l-42-40q-56-56-132-56-78 0-134 56t-56 132q0 78 56 134l148 148q70 68 144 77t128-43q16-16 16-36t-16-36q-36-32-70 0-50 48-132-34l-148-146q-26-26-26-64t26-62q26-26 63-26t63 26z m450 574q56-56 56-132 0-78-56-134l-158-158q-74-72-150-72-62 0-112 50-14 14-14 34t14 36q14 14 35 14t35-14q50-48 122 24l158 156q28 28 28 64 0 38-28 62-24 26-56 31t-60-21l-50-50q-16-14-36-14t-34 14q-34 34 0 70l50 50q54 54 127 51t129-61z" horiz-adv-x="800" />
-<glyph glyph-name="attach-1" unicode="" d="m244-140q-102 0-170 72-72 70-74 166t84 190l496 496q80 80 174 54 44-12 79-47t47-79q26-96-54-176l-474-474q-40-40-88-46-48-4-80 28-30 24-27 74t47 92l332 334q24 26 50 0t0-50l-332-332q-44-44-20-70 12-8 24-6 24 4 46 26l474 474q50 50 34 108-16 60-76 76-54 14-108-36l-494-494q-66-76-64-143t52-117q50-48 117-50t141 62l496 494q24 24 50 0 26-22 0-48l-496-496q-82-82-186-82z" horiz-adv-x="939" />
-<glyph glyph-name="eye-1" unicode="" d="m500 630q92 0 177-25t141-62 99-77 63-71 20-45-20-44-63-71-99-78-141-62-177-25-177 25-141 62-99 78-63 71-20 44 20 45 63 71 99 77 141 62 177 25z m0-494q92 0 157 63t65 151q0 90-65 153t-157 63-157-63-65-153q0-88 65-151t157-63z m0 214q8-8 37-2t50 11 25-9q0-44-33-75t-79-31-78 31-32 75q0 46 32 77t78 31q14 0 10-23t-12-47 2-38z" horiz-adv-x="1000" />
-<glyph glyph-name="attention-1" unicode="" d="m957-24q10-16 0-34-10-16-30-16l-892 0q-18 0-28 16-13 18-2 34l446 782q8 18 30 18t30-18z m-420 50l0 100-110 0 0-100 110 0z m0 174l0 300-110 0 0-300 110 0z" horiz-adv-x="962" />
-<glyph glyph-name="doc-text-1" unicode="" d="m212 308l0 90 280 0 0-90-280 0z m388 492q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m0-800l0 700-500 0 0-700 500 0z m-110 592l0-88-280 0 0 88 280 0z m0-392l0-88-280 0 0 88 280 0z" horiz-adv-x="700" />
-<glyph glyph-name="doc-text-inv-1" unicode="" d="m600 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m-460-208l0-88 420 0 0 88-420 0z m420-480l0 88-420 0 0-88 420 0z m0 196l0 90-418 0 0-90 418 0z" horiz-adv-x="700" />
-<glyph glyph-name="share-1" unicode="" d="m650 200q62 0 106-43t44-107q0-62-44-106t-106-44-106 44-44 106q0 6 1 14t1 12l-260 156q-42-32-92-32-62 0-106 44t-44 106 44 106 106 44q54 0 92-30l260 156q0 4-1 12t-1 12q0 62 44 106t106 44 106-43 44-107q0-62-44-106t-106-44q-52 0-90 32l-262-156q2-8 2-26 0-16-2-24l262-156q36 30 90 30z" horiz-adv-x="800" />
-<glyph glyph-name="shareable" unicode="" d="m340 350q0 68 47 114t113 46 113-46 47-114q0-66-47-113t-113-47-113 47-47 113z m-114 60q-14-60-66-60l-160 0 0 120 118 0q40 124 145 202t237 78q164 0 284-116 16-18 16-43t-16-43q-18-16-43-16t-43 16q-78 82-198 82-100 0-176-62t-98-158z m614-60l160 0 0-120-118 0q-40-124-144-202t-238-78q-164 0-282 118-18 18-18 43t18 41q16 18 41 18t43-18q82-82 198-82 100 0 176 63t98 157q12 60 66 60z" horiz-adv-x="1000" />
-<glyph glyph-name="ccw-1" unicode="" d="m532 736q170 0 289-120t119-290-119-290-289-120q-142 0-252 88l70 74q84-60 182-60 126 0 216 90t90 218-90 218-216 90q-124 0-214-87t-92-211l142 0-184-204-184 204 124 0q2 166 122 283t286 117z" horiz-adv-x="940" />
-<glyph glyph-name="cw-1" unicode="" d="m408 760q168 0 287-116t123-282l122 0-184-206-184 206 144 0q-4 124-94 210t-214 86q-126 0-216-90t-90-218q0-126 90-216t216-90q104 0 182 60l70-76q-110-88-252-88-168 0-288 120t-120 290 120 290 288 120z" horiz-adv-x="940" />
-<glyph glyph-name="arrows-ccw" unicode="" d="m186 140l116 116 0-292-276 16 88 86q-116 122-114 290t120 288q100 100 240 116l4-102q-100-16-172-88-88-88-90-213t84-217z m332 598l276-16-88-86q116-122 114-290t-120-288q-96-98-240-118l-2 104q98 16 170 88 88 88 90 213t-84 217l-114-116z" horiz-adv-x="820" />
-<glyph glyph-name="play-1" unicode="" d="m486 376q14-10 14-26 0-14-14-24l-428-266q-24-16-41-6t-17 40l0 514q0 30 17 40t41-6z" horiz-adv-x="500" />
-<glyph glyph-name="pause" unicode="" d="m440 700q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z m-350 0q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z" horiz-adv-x="530" />
-<glyph glyph-name="record" unicode="" d="m350 700q146 0 248-102t102-248q0-144-102-247t-248-103-248 103-102 247q0 146 102 248t248 102z" horiz-adv-x="700" />
-<glyph glyph-name="stop-1" unicode="" d="m526 650q74 0 74-64l0-470q0-66-74-66l-450 0q-76 0-76 66l0 470q0 36 18 50t58 14l450 0z" horiz-adv-x="600" />
-<glyph glyph-name="switch" unicode="" d="m700 592l0-140-500 0 0-90-200 160 200 170 0-100 500 0z m300-420l-200-160 0 90-500 0 0 140 500 0 0 100z" horiz-adv-x="1000" />
-<glyph glyph-name="loop" unicode="" d="m800 540q42 0 71-29t29-71l0-290q0-40-29-70t-71-30l-700 0q-40 0-70 30t-30 70l0 290q0 42 30 71t70 29l250 0 0 110 200-180-200-180 0 110-210 0 0-210 620 0 0 210-150 0 0 140 190 0z" horiz-adv-x="900" />
-<glyph glyph-name="cloud-1" unicode="" d="m760 494q100 0 170-68t70-166-70-166-170-68l-578 0q-74 0-128 52t-54 124q0 74 53 126t129 52q2 0 10-1t10-1q-2 12-2 38 0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
-<glyph glyph-name="certificate-outline" unicode="" d="m1019 395q22-15 22-44t-22-43l-96-64 51-104q14-26-3-49t-41-26l-115-7-7-117q-3-25-25-40t-50-2l-104 51-65-96q-16-24-43-24-27 0-43 24l-64 96-104-51q-26-14-49 2t-26 40l-7 117-117 7q-25 3-40 25t-2 50l51 104-96 64q-24 16-24 43t24 44l96 64-51 104q-14 27 2 50t40 25l117 7 7 115q3 25 26 41t49 3l104-51 64 96q13 21 43 21t43-21l65-96 104 51q26 14 50-3t25-41l7-115 115-7q25-3 41-25t3-50l-51-104z m-210-156q-9 17-4 36t21 30l70 46-70 47q-36 26-17 66l37 75-83 5q-20 1-34 15t-15 34l-5 83-75-37q-40-19-66 17l-47 70-46-70q-26-36-66-17l-75 37-5-83q-1-20-15-34t-34-15l-84-5 38-75q9-18 3-36t-22-30l-69-47 69-46q16-11 22-30t-3-36l-38-75 84-5q20-1 33-15t15-34l6-84 75 38q10 5 22 5 29 0 44-23l46-70 47 69q11 16 30 22t36-3l75-38 5 84q1 20 15 34t34 15l82 5z" horiz-adv-x="1041" />
-<glyph glyph-name="certificate-1" unicode="" d="m863 449l115-78q12-8 12-21t-12-21l-115-78 61-123q7-14-1-25t-20-13l-139-10-9-138q-1-12-12-20t-25-2l-124 62-78-116q-7-11-21-11t-21 11l-78 116-123-62q-14-6-25 2t-13 20l-10 139-137 9q-13 1-22 13t-1 25l63 123-117 78q-11 7-11 21t11 21l117 78-63 124q-7 12 1 24t22 13l137 9 10 139q1 12 13 20t25 1l123-61 78 116q7 11 21 11t21-11l78-116 124 61q13 7 25-1t12-20l9-139 139-9q12-1 20-12t1-25z" horiz-adv-x="990" />
-<glyph glyph-name="windows-1" unicode="" d="m0-43l105 371q35 20 86 31t83 13l34 1q50 0 104-10 101-20 144-61l-104-370q-36 28-79 45t-69 21l-26 4q-34 3-65 3-16 0-42-1t-84-14-87-33z m126 477l105 371q35 20 86 32t84 12l33 1q51 0 104-10 101-20 144-61l-104-371q-36 28-79 46t-69 20l-26 4q-35 3-64 3-16 0-42-1t-84-13-88-33z m431-513l104 371q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t84 13 86 32l-104-371q-35-20-86-31t-84-12l-33-2q-51 0-104 10-101 20-145 61z m120 475l104 370q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t83 13 87 32l-104-370q-35-20-86-31t-85-13l-33-2q-52 0-103 11-101 19-145 61z" horiz-adv-x="1233" />
-<glyph glyph-name="spin5" unicode="" d="m462 850c-6 0-11-5-11-11l0-183 0 0c0-6 5-11 11-11l69 0c1 0 1 0 1 0 7 0 12 5 12 11l0 183 0 0c0 6-5 11-12 11l-69 0c0 0 0 0-1 0z m250-47c-4 1-8-2-10-5l-91-158 0 0c-4-6-2-13 4-16l60-35c0 0 0 0 0 0 6-3 13-1 16 4l91 158c3 6 2 13-4 16l-61 35c-1 1-3 1-5 1z m-428-2c-2 0-4-1-6-2l-61-35c-5-3-7-10-4-16l91-157c0 0 0 0 0 0 3-6 10-8 16-5l61 35c5 4 7 11 4 16l-91 157c0 1 0 1 0 1-2 4-6 6-10 6z m620-163c-2 0-4 0-6-1l-157-91c0 0 0 0 0 0-6-3-8-10-5-16l35-61c4-5 11-7 16-4l157 91c1 0 1 0 1 0 6 3 7 10 4 16l-35 61c-2 3-6 5-10 5z m-810-4c-5 0-9-2-11-6l-35-61c-3-5-1-12 4-15l158-92 0 0c6-3 13-1 16 5l35 60c0 0 0 0 0 0 3 6 1 13-4 16l-158 91c-2 1-4 2-5 2z m712-235l0 0c-6 0-11-5-11-11l0-69c0-1 0-1 0-1 0-7 5-12 11-12l183 0 0 0c6 0 11 5 11 12l0 69c0 0 0 0 0 1 0 6-5 11-11 11l-183 0z m-794-5l0 0c-7 0-12-5-12-12l0-69c0 0 0 0 0-1 0-6 5-11 12-11l182 0 0 0c6 0 11 5 11 11l0 69c0 1 0 1 0 1 0 7-5 12-11 12l-182 0z m772-153c-4 0-8-2-10-6l-34-60c-1 0-1 0-1 0-3-6-1-13 4-16l158-91c6-3 13-2 16 4l35 61c3 5 1 12-4 15l-158 91 0 0c-2 1-4 2-6 2z m-566-5c-1 0-3 0-5-1l-157-91c0 0-1 0-1 0-5-3-7-11-4-16l35-61c3-5 10-7 16-4l157 91c0 0 0 0 0 0 6 3 8 10 5 16l-35 61c-3 3-7 5-11 5z m468-121c-2 0-4 0-6-1l-61-35c-5-4-7-11-4-16l91-157c0-1 0-1 0-1 3-6 11-7 16-4l61 35c5 3 7 10 4 16l-91 157c0 0 0 0 0 0-2 4-6 6-10 6z m-367-3c-4 1-8-2-10-5l-91-158c-3-6-1-13 4-16l61-35c5-3 12-1 15 4l92 158 0 0c3 6 1 13-5 16l-60 34c0 1 0 1 0 1-2 1-4 1-6 1z m149-57c-7 0-12-5-12-11l0-183 0 0c0-6 5-11 12-11l69 0c0 0 0 0 1 0 6 0 11 5 11 11l0 183 0 0c0 6-5 11-11 11l-69 0c-1 0-1 0-1 0z" horiz-adv-x="1000" />
-<glyph glyph-name="spin2" unicode="" d="m46 144l0 0c0 0-1 0-1 0-8 18-15 37-21 55-6 19-11 38-15 58-19 99-8 203 35 298 3 6 10 8 15 5 1 0 2 0 2-1l0 0 80-59c5-3 6-9 4-14-5-12-9-25-12-38-4-12-7-26-9-39-11-67-3-137 23-201 2-5 0-10-4-13l0 0-80-56c-5-4-12-3-16 3-1 0-1 1-1 2l0 0z m120 574l0 0c0 1 0 1 0 1 15 13 30 25 46 37 16 11 33 22 51 31 89 50 192 72 297 60 6-1 10-6 10-13 0-1-1-1-1-2l0 0-31-94c-2-5-8-8-13-7-13 0-27 0-40 0-14-1-27-2-40-4-68-11-133-40-186-84-4-3-10-3-14 0l0 0-79 58c-5 3-6 11-2 16 0 0 1 1 2 1l0 0z m588 65l0 0c0 0 1 0 1 0 17-10 34-21 50-32 16-12 31-25 46-38 74-69 127-160 148-262 2-6-2-12-9-13-1 0-1 0-2 0l0 0-100 1c-5 0-10 4-11 9-3 13-8 26-12 38-5 12-10 25-17 36-31 61-78 113-137 150-5 3-6 8-5 13l0 0 31 92c2 6 9 9 15 7 1 0 2-1 2-1l0 0z m244-535l0 0c0 0 0 0 0 0-4-20-9-39-15-57-7-19-14-37-22-55-44-92-114-170-205-221-6-3-13-1-16 4 0 1-1 2-1 2l0 0-30 94c-2 6 1 12 6 14 11 7 22 15 32 23 11 9 21 18 30 27 49 48 84 109 101 176 2 5 6 8 11 8l0 0 98-1c6 0 11-5 11-11 0-1 0-2 0-3l0 0z m-438-395l0 0c0 0 0 0 0 0-20-2-40-3-60-3-20 0-40 1-59 4-102 12-198 54-276 125-5 4-5 11 0 16 0 0 1 1 1 1l0 0 81 58c5 3 12 2 16-2 10-8 20-16 32-23 11-7 22-14 34-20 62-31 131-45 200-41 6 0 10-3 12-8l0 0 29-92c2-6-1-12-7-14-1-1-2-1-3-1l0 0z" horiz-adv-x="1000" />
-<glyph glyph-name="picture" unicode="" d="m357 529q0-45-31-76t-76-32-76 32-31 76 31 75 76 32 76-32 31-75z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
-<glyph glyph-name="menu" unicode="" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
-<glyph glyph-name="sliders" unicode="" d="m196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-26t-26-10h-142q-15 0-26 10t-10 26v142q0 15 10 26t26 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
-<glyph glyph-name="list-alt" unicode="" d="m214 189v-35q0-8-5-13t-13-5h-35q-7 0-13 5t-5 13v35q0 8 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-35q-7 0-13 5t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-35q-7 0-13 6t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m643-286v-35q0-8-5-13t-13-5h-535q-8 0-13 5t-5 13v35q0 8 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-535q-8 0-13 5t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-535q-8 0-13 6t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m72-393v464q0 8-6 13t-12 5h-822q-7 0-12-5t-6-13v-464q0-7 6-12t12-6h822q7 0 12 6t6 12z m71 607v-607q0-37-26-63t-63-26h-822q-36 0-63 26t-26 63v607q0 37 26 63t63 27h822q37 0 63-27t26-63z" horiz-adv-x="1000" />
-<glyph glyph-name="ajust" unicode="" d="m429 46v608q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41z m428 304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle" unicode="" d="m857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle-empty" unicode="" d="m429 654q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle-notch" unicode="" d="m1000 350q0-102-40-194t-106-160-160-106-194-40-194 40-160 106-106 160-40 194q0 124 56 231t155 177 218 87v-145q-124-25-205-124t-81-226q0-73 28-139t77-114 113-76 139-28 139 28 114 76 76 114 28 139q0 128-81 226t-205 124v145q120-17 218-87t155-177 56-231z" horiz-adv-x="1000" />
-<glyph glyph-name="fork" unicode="" d="m161 29q0 22-16 38t-38 15-38-15-15-38 15-38 38-16 38 16 16 38z m0 642q0 23-16 38t-38 16-38-16-15-38 15-38 38-15 38 15 16 38z m357-71q0 22-16 38t-38 16-38-16-15-38 15-38 38-16 38 16 16 38z m53 0q0-29-14-54t-39-39q-1-160-126-231-38-21-114-45-71-22-94-39t-23-56v-15q24-14 39-39t14-53q0-45-31-76t-76-32-76 32-31 76q0 29 15 53t39 39v458q-25 14-39 39t-15 53q0 45 31 76t76 32 76-32 31-76q0-29-14-53t-39-39v-278q30 15 86 32 30 10 49 17t39 17 33 22 22 29 16 38 5 51q-25 14-39 39t-15 54q0 45 31 76t76 31 76-31 31-76z" horiz-adv-x="571.4" />
-<glyph glyph-name="sitemap" unicode="" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="stethoscope" unicode="" d="m714 457q0 15-10 25t-25 11-26-11-10-25 10-25 26-11 25 11 10 25z m72 0q0-34-20-62t-52-39v-220q0-89-73-152t-177-63-176 63-74 152v73q-91 12-153 72t-61 140v286q0 15 11 25t25 11q3 0 9-1 9 16 26 27t36 10q30 0 51-21t21-51-21-50-51-21q-18 0-36 10v-225q0-59 53-101t126-41 126 41 53 101v225q-18-10-36-10-30 0-51 21t-21 50 21 51 51 21q19 0 36-10t26-27q6 1 9 1 15 0 25-11t11-25v-286q0-80-61-140t-153-72v-73q0-59 52-101t126-42 126 42 53 101v220q-32 12-52 39t-20 62q0 45 32 76t76 31 75-31 32-76z" horiz-adv-x="785.7" />
-<glyph glyph-name="shield" unicode="" d="m607 314v357h-250v-634q67 35 119 76 131 103 131 201z m107 429v-429q0-48-18-95t-47-84-66-71-70-57-68-43-50-28-23-11q-7-4-15-4t-14 4q-9 4-24 11t-50 28-68 43-70 57-66 71-46 84-19 95v429q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="heart-1" unicode="" d="m790 644q70-64 70-156t-70-158l-360-330-360 330q-70 66-70 158t70 156q62 58 151 58t153-58l56-52 58 52q62 58 150 58t152-58z" horiz-adv-x="860" />
-<glyph glyph-name="search-1" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
-<glyph glyph-name="menu-1" unicode="" d="m650 400q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z m-600 100q-20 0-35 15t-15 35 14 35 36 15l600 0q22 0 36-15t14-35-15-35-35-15l-600 0z m600-300q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z" horiz-adv-x="700" />
-<glyph glyph-name="back" unicode="" d="m750 540q40 0 70-29t30-71l0-290q0-40-30-70t-70-30l-690 0 0 140 650 0 0 210-500 0 0-110-210 180 210 180 0-110 540 0z" horiz-adv-x="850" />
-<glyph glyph-name="home-1" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
-<glyph glyph-name="pencil-1" unicode="" d="m718 680q32-32 47-64t15-48l0-16-252-252-290-288-238-52 50 240 290 288 252 252q54 12 126-60z m-494-640l24 24q-2 44-52 94-22 22-45 35t-35 13l-14 2-22-24-18-80q28-16 46-34 24-24 36-48z" horiz-adv-x="780" />
-<glyph glyph-name="location-1" unicode="" d="m250 750q104 0 177-73t73-177q0-106-62-243t-126-223l-62-84q-10 12-27 35t-60 89-76 130-60 147-27 149q0 104 73 177t177 73z m0-388q56 0 96 40t40 96-40 95-96 39-95-39-39-95 39-96 95-40z" horiz-adv-x="500" />
-<glyph glyph-name="logout-1" unicode="" d="m502 0l0 100 98 0 0-100q0-40-29-70t-71-30l-400 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l400 0q42 0 71-29t29-71l0-150-98 0 0 150-402 0 0-700 402 0z m398 326l-198-196 0 120-450 0 0 150 450 0 0 120z" horiz-adv-x="900" />
-<glyph glyph-name="login-1" unicode="" d="m800 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-450 0q-40 0-69 30t-29 70l0 100 98 0 0-100 450 0 0 700-450 0 0-150-98 0 0 150q0 42 29 71t69 29l450 0z m-350-670l0 120-450 0 0 150 450 0 0 120 200-194z" horiz-adv-x="900" />
-<glyph glyph-name="publish" unicode="" d="m900 800q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-198 0 0 98 200 0 0 462-802 0 0-462 200 0 0-98-200 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-770-168q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m100 0q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m672 6l0 62-602 0 0-62 602 0z m-404-198l242-240-150 0 0-300-184 0 0 300-150 0z" horiz-adv-x="1000" />
-<glyph glyph-name="window" unicode="" d="m900 750q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-670-94q-16 0-27-11t-11-25q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10z m-138-36q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10-27-11-11-25z m810-570l0 460-802 0 0-460 802 0z m0 540l0 60-602 0 0-60 602 0z" horiz-adv-x="1000" />
-<glyph glyph-name="chart-pie" unicode="" d="m368 770l0-368-368 0q18 146 121 249t247 119z m106 0q156-20 261-139t105-279q0-174-123-298t-299-124q-160 0-278 105t-140 263l424 0q20 0 35 14t15 36l0 422z" horiz-adv-x="840" />
-<glyph glyph-name="chart-line" unicode="" d="m34 284q-42 10-32 56 10 42 54 32l98-24-52-80z m890-12q14 12 33 11t31-15q32-32-2-64l-252-226q-12-12-30-12-14 0-28 10l-286 220-54 14 50 80 36-8q12-4 16-8l264-204z m-490 220l-350-550q-12-22-38-22-12 0-24 8-16 10-20 29t6 33l374 588q8 16 28 20 18 6 36-6l246-156 226 326q10 16 28 19t34-9q38-24 12-62l-252-362q-24-36-62-12z" horiz-adv-x="1003" />
-<glyph glyph-name="chart-area" unicode="" d="m964 732q16 22 16-4l0-768-964 0q-12 0-15 7t5 17l230 288q20 22 40 2l74-66q10-8 21-7t17 11l158 238q16 26 38 4l112-104q20-20 38 4z" horiz-adv-x="980" />
-<glyph glyph-name="chart-bar-1" unicode="" d="m750 800q22 0 36-15t14-35l0-850-200 0 0 850q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-550-200 0 0 550q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-250-200 0 0 250q0 50 40 50l110 0z" horiz-adv-x="800" />
-<glyph glyph-name="air" unicode="" d="m85 534q-16-14-36-12t-34 18q-14 14-12 36t18 36q48 40 79 60t89 40 129 4 159-66 155-53 100 16 89 67q38 30 70-6 32-40-6-72-122-110-234-110-100 0-222 70-68 38-119 52t-93 0-65-29-67-51z m736-110q38 32 70-6 32-40-6-72-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 0-65-29-67-51q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z m0-256q38 32 70-6 14-14 12-36t-18-36q-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 1-66-29-66-52q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z" horiz-adv-x="905" />
-<glyph glyph-name="database-1" unicode="" d="m686 208q14 20 14-2l0-100q0-74-104-135t-246-61q-140 0-245 61t-105 135l0 100q0 8 4 10t10-8q32-52 125-86t211-34 211 34 125 86z m2 254q8 16 12 0l0-116q0-68-102-114t-248-46q-144 0-247 46t-103 114l0 116q0 20 14 0 30-46 124-75t212-29 212 29 126 75z m-338 328q144 0 247-39t103-93l0-64q0-58-103-99t-247-41-247 41-103 99l0 64q0 54 103 93t247 39z" horiz-adv-x="700" />
-<glyph glyph-name="flow-cascade" unicode="" d="m520 120q50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-88 0-131 54t-43 118l0 464q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-114q0-78 78-78l164 0q30 72 110 72 50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-42 0-78 16l0-194q0-78 78-78l164 0q30 72 110 72z m0 300q-28 0-49-20t-21-50q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20z m-470 280q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20-49-20-21-50z m470-768q28 0 49 20t21 48q0 30-21 50t-49 20-49-20-21-50q0-28 21-48t49-20z" horiz-adv-x="640" />
-<glyph glyph-name="flow-tree" unicode="" d="m868 112q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 78-76 78l-100 0q-44 0-78 12l0-204q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 204q-30-12-76-12l-100 0q-34 0-53-19t-22-33-3-26l0-114q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 64 43 118t131 54l100 0q76 0 76 52l0 140q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-140q0-52 78-52l100 0q86 0 129-54t43-118l0-114z m-678-112q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m212 700q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m138-700q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m280-68q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="940" />
-<glyph glyph-name="flow-line" unicode="" d="m168 162q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="240" />
-<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110-6-58-28-101t-61-69-68-38-75-26q-42-14-63-22t-47-24-38-40-16-60q70-30 70-110 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-204q40 30 138 60 58 18 84 29t51 41 29 76q-70 32-70 108 0 50 35 85t85 35 85-35 35-85z m-588 0q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="flow-parallel-1" unicode="" d="m240 650q0-76-72-110l0-378q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85z m-50-600q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m-70 532q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m448-420q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="dot" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="220" />
-<glyph glyph-name="dot-3" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33-77 33-33 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="920" />
-<glyph glyph-name="cd" unicode="" d="m460 810q190 0 325-135t135-325-135-325-325-135-325 135-135 325 135 325 325 135z m0-610q62 0 106 44t44 106q0 64-43 107t-107 43q-62 0-106-44t-44-106 44-106 106-44z" horiz-adv-x="920" />
-<glyph glyph-name="back-in-time" unicode="" d="m532 760q170 0 289-120t119-290-119-290-289-120q-138 0-252 88l70 76q82-60 182-60 126 0 216 90t90 216q0 128-90 218t-216 90q-124 0-213-86t-93-210l142 0-184-206-184 206 124 0q4 166 123 282t285 116z m-36-190l70 0 0-204 130-130-50-50-150 150 0 234z" horiz-adv-x="940" />
-<glyph glyph-name="list" unicode="" d="m100 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m200-100q-20 0-35 15t-15 35 15 35 35 15l350 0q22 0 36-15t14-35-15-35-35-15l-350 0z m350-100q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z m0-200q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z" horiz-adv-x="700" />
-<glyph glyph-name="list-add" unicode="" d="m350 400q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m0-200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m620 200q30 0 30-50t-30-50l-170 0 0-170q0-30-50-30t-50 30l0 170-164 0q-30 0-30 50t30 50l164 0 0 170q0 30 50 30t50-30l0-170 170 0z m-620 200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z" horiz-adv-x="1000" />
-<glyph glyph-name="progress-0" unicode="" d="m1000 450l0-250q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 300q0 40 30 70t70 30l800 0q42 0 71-30t29-70l0-50z m-100-250l0 300-800 0 0-300 800 0z" horiz-adv-x="1000" />
-<glyph glyph-name="pencil-2" unicode="" d="m0-143l68 343 274-273z m137 392l422 422 259-260-421-422z m531 494q2 39 31 69t69 31 66-26l131-130q25-26 24-66t-30-69-69-30-66 24l-131 131q-27 27-25 66z" horiz-adv-x="989" />
-<glyph glyph-name="cog-2" unicode="" d="m0 272l0 156 150 16q14 45 38 88l-96 117 109 109 117-95q41 23 88 37l16 150 156 0 16-150q45-14 88-37l117 95 109-109-96-117q24-43 38-88l150-16 0-156-150-16q-14-47-38-88l96-117-109-109-117 96q-43-24-88-38l-16-150-156 0-16 150q-47 14-88 38l-117-96-109 109 96 117q-24 41-38 88z m355 78q0-60 42-102t103-42 103 42 42 102-42 103-103 42-103-42-42-103z" horiz-adv-x="1000" />
-<glyph glyph-name="cog-circled" unicode="" d="m0 350q0 207 147 354t353 146 354-146 146-354-146-354-354-146-353 146-147 354z m195-47l92-10q8-29 22-52l-59-73 68-68 73 59q23-14 52-22l10-92 94 0 10 92q29 8 52 22l73-59 68 68-59 73q14 23 22 52l92 10 0 94-92 10q-8 29-22 52l59 73-68 68-73-59q-23 14-52 22l-10 92-94 0-10-92q-29-8-52-22l-73 59-68-68 59-73q-14-23-22-52l-92-10 0-94z m217 47q0 37 26 63t62 25 63-25 25-63-25-62-63-26-62 26-26 62z" horiz-adv-x="1000" />
-<glyph glyph-name="cogs" unicode="" d="m0 245l0 97 94 8q8 30 23 55l-60 74 68 69 74-61q26 16 55 23l8 94 97 0 10-94q29-7 55-23l74 61 68-69-60-74q16-25 23-55l94-8 0-97-94-10q-7-29-23-55l60-72-68-70-74 60q-26-15-55-23l-10-94-97 0-8 94q-29 8-55 23l-74-60-68 70 60 72q-15 26-23 55z m221 49q0-37 26-64t64-26 63 26 26 64-26 63-63 26-64-26-26-63z m318 238l8 72 70-2q8 22 20 39l-37 57 54 45 49-49q20 10 41 14l14 66 72-8-2-68q22-8 39-22l57 39 45-54-49-49q10-20 12-43l68-14-8-70-68 0q-8-20-22-37l39-59-56-45-47 49q-22-8-43-12l-14-66-70 6 0 70q-20 8-37 20l-59-37-45 54 49 49q-8 20-12 41z m31-446l6 51 49 0q6 16 14 28l-26 43 37 33 36-37q13 7 29 9l10 49 48-6 0-48q16-6 28-16l41 27 31-41-35-35q6-14 10-29l47-12-6-51-49 0q-4-15-14-27l28-43-40-33-35 37q-13-8-29-10l-10-49-49 6 0 51q-13 4-27 14l-41-28-31 41 35 35q-6 14-8 30z m118 14q-4-21 8-36t32-18 34 10 17 33-10 36-31 18l-6 0q-17 0-31-13t-13-30z m17 451q-4-27 14-49t45-24 48 15 23 45-14 47-44 25l-7 0q-26 0-44-17t-21-42z" horiz-adv-x="1000" />
-<glyph glyph-name="calendar-1" unicode="" d="m0-150l0 649 893 0 0-649-893 0z m0 705l0 221 109 0 0-141 200 0 0 141 275 0 0-141 199 0 0 141 110 0 0-221-893 0z m168 139l0 156 82 0 0-156-82 0z m59-619q0-112 123-112 47 0 84 32 39 31 39 80 0 68-78 90 48 15 64 48 12 28-2 73-27 62-107 62-51 0-86-26t-37-77l72 0q0 45 49 46 43 0 45-52 0-49-84-47l0-57q48 0 68-8 23-11 23-46 0-57-54-61-43 0-47 55l-72 0z m281 146q49 14 88 47l0-297 70 0 0 371-64 0q-38-37-94-58l0-63z m135 473l0 156 82 0 0-156-82 0z" horiz-adv-x="893" />
-<glyph glyph-name="doc-new" unicode="" d="m0-150l0 818 188 182 519 0 0-348-86 0 0 260-369 0 0-156-166 0 0-668 418 0 0-88-504 0z m373 207l0 162 209 0 0 207 160 0 0-207 207 0 0-162-207 0 0-207-160 0 0 207-209 0z" horiz-adv-x="949" />
-</font>
-</defs>
-</svg>
\ No newline at end of file
diff --git a/ui/fontello/font/fontello.ttf b/ui/fontello/font/fontello.ttf
deleted file mode 100644
index c1167906ee073765a9d01aead457c4b25c530735..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 42532
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
P^z$#-zOUl!Fe&{XToHil
diff --git a/ui/fontello/font/fontello.woff b/ui/fontello/font/fontello.woff
deleted file mode 100644
index e0007cf3c54b81e62aeaeec8976b8feb2e5a21c0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 24196
zcmY&<V~{31)MaDZoVIP-wr$(CZ9i?>wx>01+qP|f^X`5>c5l_G<eoY=xs_BUl}h3+
zFD3>A4D`?RLV)1^D@#fKum4~D|2KJMdL|$sV3B|9e^BG&kwP-IHFWsLMf~&kfPg@#
z5_LB<jNM!a{?%>%anSz@ATtMZ+kcz~5D-{05D<(*L_&h5xuNsFSV-7^8p!_zqPdNy
z**_Nr2uS)B2q+YzswZ*O!qm_N2uS5W9qT`^fyscESo|aZasTB(@DC)A0buwRwl4qL
zSNW#}Mgjr?m1sNx0<y6;{-;y@#{-xC2eQjw)wYHn|N2$`FYf;UI1<*)&d}EMA1Cln
z<NhztsmUBH90z-67a$;w_J2A5YXeHpfW&CS!O8SrtRBw4*nfH;?=5T4P>*b51CwW?
z?7qJ7zJ8UV=J3G40tg{yJ_8056C(oyBLh>jK4_469c2t0J%(--Q~3A1A;h8V;d*F_
zNytP{psgF2DUa->cwXrNN0iW;I+o%R$~d8nf!+d22MZf(CrGE$E)jgfcSuE)U%#P(
zOh}+xSen_^qLYW5s|XPb)B3;9#U0N3c+;49AmTD&H*U>n2JHx=lrauPB!>LgoKown
zF)i<D6bwRDrEKbl;JtAiBr>R2?b?f`sC9dMC&_)+nfWd}^KPErr!Y8)&@>B2u`X;H
zr|3Qy{Y65RYc1~t!rl4ao{Ht+UOD66eYj4=_0P|R?VbLdYU1*qDcWvbsL|@4DWO|c
z7IaR#mR3?xU5JeQ)h(isiCMq>d4k};vt9f*SpTniWY?%!IwOlC<}4Xbu<->UAh88%
z4m-uTsijXqA`V|lq3z<_r(6of=}Nm@N6UYLe`V?cQ~>s$&E0sos|Mt%Dil&*r7u@9
zFBiFbNwbNAdK&S?n?97Kt!$PiCz2BEHd=A}!fR_Vl*%&SbP+)oEsH%@93(_Yft9YI
zq(Q4Mqw^#O!tqR6t)zdfl<dwV-Pf=X&THPE7iJaXwxCE^vkHVS0JIeY<w&ATSAaw|
z+P_Qsl3IHw)RR6-u%tn!B#FaWhOqI6<_9rqm^H(0IHCaARBX{G5oVqUqWDHFqdXl(
zL4mh?OeMWHmO`Hpd;qF<@&dHum|Nz~3n~8@?sPB7zE^Z3Da5ycn+b$>8TA{{{5teO
zX^xF}LDa2_FZm#GR?>OirJ~+~#jcxZDftv+>bQD>#v7FBGs2kFp3it157ts*a5khC
zy|a=2J$y5sxJ;xq*=W#poLofyby{}8s_}dK>%kvg8g#;6qa3MEaZ>GwVw8qWnIyKq
zI3p4pMN<~N#AUMYxoG!k4SVITPNmJ8CCj-Pb8EumYO>1@Jy<FhWJ=|(ijU`#!4;*r
zka><*fRpj(Na|V}G6%<tENz&LNdOA@q0W|65vJs+EMRjynR8iPhMCqYg`$}}3NyT3
z^7eM2S=_v3SAG1}pXRPqrNMs~a&qBErF=5oIwa>h{k+2b$?k-gL8t(<Y=4u7gj@X}
zj*g6_;|8ojZC-L8s84;LMMjGQU$JlT=$9zLWJ1$b6=1fSms@Bi7Om8xRZPyi2xY1D
zmn}hLIpKYc^@lmW>oPE<WuSI$2G7=hr{#7$la8{4Z<^`GAG=yL=mt#N%$%`IJp1Mx
zulnUL@N7JA;Tl?BxFlbNbJ5m+Nt7Ae&|3&5U333(`W>j#2aXh2?}`YyAq^Q)BSc_>
z{u^?G2*j`}L}1k~MqrhW7_l|2r8?7($`Xegc>+i@0<?(pdeqd8N?m!Z1gSP!tc>lD
z(y6Mr&_nHu8uV))z+N5LBG4(a{23)#>!Xr#5MOKIxiHuP5~u3#?W~iBj9}WU@v3~=
zyPjEDtX}PD;)Lo+JezbNvO<O$Uwd}nQ7OLi6CDL_9q0#If(Rq3nF`mFk#MV6wx9r~
zbA-r@&5W?})M+|3v-g>WK?rl|_sNce1+y6}rzxp<Wl*=Y5^vhk260qRu90ZeGkKxC
z7acPx^&x6T>CJcV*@wzNm10;0r&F^#<&E@^a3*^%gV=^@8eAMZl0ncAXpF~T-;+c@
zBBR?9xK5c}AJ}a$Nx6CxBCKMceB|I=;ENZV>~F1pIf{uYi}-5$EVg>lq;RiY9T-C1
zySO5tN+>(jUJ)Qod=zGNYp7GRA;u(^Ust{gH_;e{fG@u3E){1=@FwxQN?e@3=8sU$
zV#n7wh20MK7i5s2rP23uPsV<JvU^LSshTaQavN5P@=E64p(^;TsiJG|ku`FsWtJ@$
z`OU|kQq{KL;0{g1s|}pw5*fPki@)&L<r7mSv*)HdiQ8@n3^WY+I|ZoNKk6@zuRQ9N
z&_xFle{#z4i)M^q?-4ls#h<`VPZ(u7!jezC(~$G*Hvg_M=?>{u=k4$GRks|Qonbi$
zFTkaTS8L&Rj>GwsfphWBZ^k_$-ZorA-vJpQ_Zi(rUTY0MPzK!j4CCPMIv+DwFopM{
zIb+x`o5LA|bHci1{56Q@gzYhy=ITqEG(=<y7aYU^mrq9q;xUB}u1o*BYkkb{8pino
z-1E;*=Y&N%W>{Tuv8Hg2Mt4Ckw^cwr?R!K<d#UGGRKaZQJqR`Qw?}O9XNaiax9a3A
z{vL!8{#qj_{Wd~W_Fr-_m-vcB4}0$tl==EgP|CMJKkSszuP@dk9SS;5$Cmf-GWY>8
zfF;oSZ{G+0`2j-k$S(N<=Yu?w!BCr_dsVA;Z$(<;W~zzy-bfMxu$4@Wv5jGjbBuAs
zIZzNT7cM7+R}g|C)B$0E(~(kwPL}4BvZO0!nWEPh5A^wTX89v65m(A0=}dXn($Q_X
zegR+;ckW=ZKVQ#!$yiIFLAFTT!LQ!RiO=ygJI*lAt;=XJh(0R9XTTda%rKMG3K`k|
z4Rw&gY=uIH6*q|OY^z3#Jea|jJ@u<5W<Ye`mLdY<rH^Ne-9EszJ^1dpo>gySV?h~z
zk63mrfXIow757i<*5_eqoTsnvLy#=)TWJLTM-bnu@<GROtD1|O1@>XTHqE3svceB*
z%+`K03QZ2$U1SF>Gml#sFb0<M9VW$qDzT`oU`982n%ErVjI6K~o3e#4=2DeIcL+-z
zAa`O$&^D%2f+BG^0Y~K2S5bpF;<2&JR`c)lTWb_vYLjL#t1M*;)q0dg;tVcgaMVEy
z+)N(#pSZ50!w-2|Y>FPTLV9-CQv1|FkcpA1AiKI9!nP4q2?y~@rV|7b2s^G8$AgNU
zr05}|eth4@Ijds^Wy9YzhNm-9+#>@1L;*Q4g=``DFc*mEqy&wE)s)?(`&aIHYctn=
zuIN#VY}EW%9WDMl7Tk8aT_2;hPqLGy{P%?$bsOO?y$%5zCHU2Hp8hVH8|QysuJl$W
z-Ky7nZ<hi1o&|asBlt`(1^8gntcz8uw<b8e9ql1O9Puc4j(}fMMQapk^d`)eVT%na
z&a`r^LwBlCetNcwkMy3w73XbLU4Ja%gTjL-aqQzApWb^R{=9qAi+FWa&8U_k{^~t!
zndRD>kC_(8p(}417}k==!A#keq{FA<tCntSqqnvf@0!2DmEQ9!^|geE%vT3}#%E9m
zy=0v5p)i+IGLy`s)Pn-&$=xkL1Yv`19Onf7YRvEf{!XfgZ~#gmfj7pF7vsSDPBJKH
zfCGr3-D9R`B7R)8)$+`)+ai=#vXE7*wlZ)kop$i{TdG0CG!&1DUG}|$i5<dqgAVz<
z)KDWNrumGH=YPq!Or5tbtSkli8p<}7$=Xyp<daWDgo>pbPsJ2lYxITU1JSM0#ta$W
zX_;wLtq;BDi?=qd4oqhkgkq2VP+01w8$^UGvZ)Yg;67m?GYBfd#CCM2x*pwYp3Yg$
z`fbD5az}5k;GTYwT1ot{ZP$iuYQVjA;%qJ_a5>7s71qp#J!3W`pl?+l<*0M|QgAiJ
z?l?c&Naz;sT&mR1+!&j#aO#ODfQxXoJGWdxE>#icxuj&PzcefQ&`r;zmjDlw<y1HR
zeov?p4&~9=|4lBH08=I-%+pbx!6`wU=2KupwO<!OtsZ5h20O5Yhr;Z}y?KSn2<aX%
z8P!XX<!3KN(z32M2^O#XSD!x5g=Tlg>KKRFph43l+UO48_goRxB_vXu_otQt-z`)Z
z4Bcw-m~|;jAQKLi1#ibu#2<Xe+r)@F4U(K|7Eb%go}k0m`or&d6A*c1F%5|96|`pC
zQz+b{kR2o<QS$j>Zu*rMl(}9YuLT+vSZ5N~uYr_pOVR{OXOfGm10IKl<e0A@L40~K
zK7>3cL6;j&$3m?7DckkU?5%+5Oa;jx3$?D8^R;-}ZOo8(i$E;Mp_U~4whART*p9($
zj{zs`_GPN*h^JQ4bbD<WG>LeZ-s8DlPqAvN14iFxZ9(2WWfaJ292Uz7YpWTY*FqB0
zx+uj{@>7XC3kWY|>5R!ZS+Y<Gnq*2V1nCph*)|ETPnQ*=cKpp1ppQrogzt>uT-*Sh
zGKp^qTZ-7s8oQ-7He9&pX>o!w`ZNW8SpK|E%X)g9GZ`$itYkVS$bD|i$3zCCf~_<L
zT@cFbNj#VY1@1hNG+|y!Xn`w3fli15ZNP|l;^8Zf^|rZs@VwM!K3iHv_U-NPP|yj#
z^F-1<y`p&X(c9C}^Wqbn7QVp2eC3pe@Mikp>43Z*lMB6KSv9B7j<+KA1hM?KyY-{3
z`Ib9lw0oXMDeEv0rEQ)e?9jr>PK>2+3A;<hM9z06%e2KyR^RMS_!)T?zX<-=R;gTJ
zh4M>@m-Mzwn%uGuAnqjSJv}etwUkANXCIg$w(eM4jjOIv+puZy)@T|pYOUVW>N^o@
z-Q)0NaMPW78Kco>Y;GH%lH7=y6ujF7GY~m%!nm%M8z-|aH}DH|j`TjM^{3@?h_tR<
z4P^xh1-4?OnIMRoFrY-dxe;YH=)FL?Bwsa&KJ_RwQ$g*uzeONLc)LYG2GP-aR90Kq
z>6D*Vy1#*ygumm|oX?t!BzYfrr9C<hP^H`HHFwzVkmsZ`VCMCT^kq|uE|VRTX&6+L
zc5eO&LZfQGfVkYeE3!9lX(4s`qc1OaM)J$|5oB`2O?q?yx2};;Xe4J8w7Vqa9MO;$
z%Na~QNXHsF#6Uy!xc-6sX>`x^)3kcvLg0xXP)fMN<~`bg`X+R08~(ugWvf;{5wX({
z>>gbm(0q~&U&mTuotfLLlxe+a*;E{$w$$!1PK<V*fNbd__>hh$LYx)=v~xd;ucrSq
zExhn^wc`R3O{RyFI{H$`|Ks`S?ccr!?lSp{+5svbvIlWHr6$;Q(R55hD*#*HW_RKw
z4R$(jg{_LQ_!i?9Owoq&&;U#zR3`9&Y81x-5q-3AHf;1f52_K12}7U{I8?fbty&Ap
zY6$slSO=utL*s=hQYjToItzW$Mm(*dBF>>ZtbZdiVQwv6BOC{WGB~=V>!XXRY{I9R
z5-*XI<?eI0RPa^UT}g9)kk&#^+pE92ggGNK)4@FPk4;Yo-=xd(GGE!dVyOD{Lf!T0
z#RX7BF(taXFEGEFX>Wueo#i>?E-&q2sNh$;bnBir-p=IJYa6EJ;@IR>(jQble5Rx+
z*Q9E8Oy@rpaK2Gb;9g*1@+Cw8(JWnaqG2yY7gMFdJwH`b3*YKR6Vsbs8m{wc8g^_2
z?gI&$-Uw)9S6*L%4!*t^a5W3_rrlXGrXamUh~GG(B;dmlV<m=PbjYcA9X=!XWSgBf
zC)eCzSy|yX0@M>6OrJIj_qZQ!ux*VUs@m{&m^CXuhEbc$lp|1mXJP_zS!!p^j_HIC
zk<rBkM^+#v69hqmd0LEin5#Si==M6@?sK(%Jnawt+-Oa{U2{vOEk%Y!2R|(J7o)Yn
zUUT}nO8i8SlQ{hl`EJ+k(W0V$G=ckOz1TT3IF9Fp9cs(|H!jZuUyxc5D|+N=s+tI#
zITECTn%{Vxf?-`HgT$UPTvR-0w-{d-Y@CD`mIjIYnG-0Py5N|D`tui*y}^35V@Iv9
zGYc0`>>+yB8gY43OUa~klqIl5N3*cyH#ZquGH@wXET__S8)x~xXXC&*iF@h_Ds1#4
znsU~YY-YNnz&7FK{`ohHJH2n7#e6^A-ybLVJ!fQ(Z%LyCy$Eyo1b2tE%C9U+atF%%
zU1uln2c?@Wzt&5D-06AHY9Ad!UWCDoXXKflt-^Ny9m6=9;e6##%-2BOzUZ?8{PReo
z%C3MPyY@Vh?UPy!Y`1UKMun6KqPOJkb6blL$fp5n(?fjg8X$kIx^WHawdX_7sMw@n
z1fSVSeq?eJVZ)e;pu%XR>nqzK#Zb!wG8}+e;1$vK5VoqN{Hw)?!m~Yw>jDLFs8q@v
zI-zSwY-9`}Yw(Gkcso87lmOp&4ry|SD%oi@!u=}D4s5b568_dXjNtWd`!x(8zopTJ
z^Z67@I4Jo>kVPH@#+XL_1|^DjaNq+oVTgD(9{x`7jDs6Oy3--lkJf-ojj6JWzV!Cg
zKWwc+>yBJyfBKPcb&nmb+|)$480_8nctm*8KgWMwyYiI~a3pzLQ+$Z)n0gR<xx&s_
z;c*`c%i*3oN^m`73J=*b@-6cjK6o4N57xgMOxb|n_im*e)^ZDSWC|ihaPA8O6pR!o
z6XeZN>;;}cigUOSg&ZQOSg1v@P|6jAiwtwJxC<t2vzt%Mxv?0;j%I&bTnz&!3-L#k
z8e5_)$V=gArhF$wbJqM|+UBhx3Z|i=P2*DK8(;mjo5p>YtHx=}6=DXnPtDd5)QKpT
z6^mu}9ua)=6T_XkQ4k?GOXqWVU@YTs8+gH*99Gd#(_GNBX>?y*XZ1F_EwKu#>+xB8
zjo!FIYov1)2|$wN%vKi8DH7;_&!PpBGGZWE1Cr!XU?r0!st7o%BJz?|4_ryd1=L6n
zu86vf86q)NsjIH#y{i-dc7`WiN{eU;6dtaUL61Q4^@H&%^Cx^;y;FuC#DPvXJNKP^
zrk1bDFQ4uFY=8<VfSX_r#Q9fNVV8FmT~k857gFGm*A0LjqDOW21{R85*irmkcvlzN
zY}ulgoEwqdkp&+9{x~VAtFHPX?;`S>IO|rbb;bMC4*xRY#X{^Q6|QNyZ@YHj_^$Z2
zUjRMp^mlSeNCQ$yrWv55+c0jC#-YsGe^s6YK6aAsW1470ap<nI^;#Wa3iClg0a`7w
z6zK6xw{<P2*aYpwcIy4DC{fI42+K@jkB8dDr!Il<vR^o24gOW*YL~pwIL?6xUlByo
zP$}Ls$El3xaGsUJj^*1jm*Hj^GYZa{MZ%bg{YT#WW!Obn_)GnQ4eL*P!89yyu^_-M
z1;9xTG#OQWF2&8BcrEyoKhBQz)i?)5DwPQLDxhY<lGc;;d>HGhUt@0(AaqT@+sgQ7
z0aCH^k?_I&l{3E;GhbS<SL7@)8nI}&JZ+XR4bH?nmq8c`d%y5k!9CczRuW^a7}i`$
zP<3axM3n{I=MGZCeR|vZ#-r_RCF{5m^?O*?c2iO%wta(9^5V~-%G_F06l}BPEWb#@
znc84J{Fmh@_ZC%C`OMkotteA|ucm3r<P%g42o_c`3k#|$6upx2aBHxE-teq7T|0y6
zJo3@LI#uI0cBNN@*ja2Jj%(#sWpg;>nRoX1s86Oqt$Az~)fvCioviig0oEv6C_2Gy
zGmsvusnYLWh5572an!Ea6jD@r=fLq5u25OTw{FfoENn{5lcBdH=xxf&@jj#o$V3zm
z4!JraEPW%f2z$AuwM?eB0MpJR=UIPsHttgm?}=sSQwBZ8mgo{y{LZ*jLRAF$avIg(
zTO7qCp#3t;-LN+_fl!cH6((Q|cL3Px6nBF2FbnmDnh~&wW}_wdbd+4KdK%C2wqhi;
zN7hn*sE^&Q|5k&E_f2IgDb<YhbCX;0y7oRgPIi)`mqTP;`<mSmX;#EwliTpIw)5M7
zf8{RXO(W}xcd2SgmeNy0!nwvl6QhD$pVBbsAO-#ggKhy&K*45kV1z{V05z6k#|iSC
z5cas2<*85@5PNpxhJ1$=_p&SNhwtPGXP_ySgK4yXd%Qqw<56}$cUb_Y$Mn%$Y9+v@
zmKtBTBSl#4tiyBZn-mDE)0ryC;MN`JL}}QtBCw?<@!mbmt3!Z7HW|@gqZ4}2L@;DP
zgrr|NGq`t$nak_ND#S1QN{fN3GoSjyn5EMnRnPa$$0JCixMsV}>*=W5xEK%bTpY(|
zhC;8)oi<1uifH140-n0+7DHm1X(@0R`8OY6h7?*QIZ|3enI*Tjyts>H7c#*2PG?n-
z-i5W8SYPzC3gA+T>`s3pb{c2VSpZX5<ep!Ps_Q-8bsiZ;hmvcKZ1XUXfa-3hvC)la
z0zK8#a0~x_HS$)$-}K}WO=^<?QIEEt%j6B8PdeUNC@?Ku2#Nm`Hl{2a=>W=V0gEjU
zro4Aa`U|v|02<j|I}kw>0{}&j1Ht)_4tLC(Y28F;IQQ=sgP)G#9_z~zi5PlyWF9?$
zWz{gnL}OQ_PN8bB34TPA5y&J&d*Vy1F{h@S!y2aC{Ec-P`nTb56qp!)DVn9WZ{$nu
z{i<|xjm*=5VYwMouEBn(m3g8?M?e`laDHjjLwhmarc~sTT7;rQR!_uc&MAQC>K!@e
z=?8??K?nh<r;bpwhJ&tI{5P)MK$3I<WbT7i6f_FaOh7$^4^=_O9S9K`l~D8YJ<%V6
zx$%d#+wP^~-8$p|abJzQD8iZ7uj>dnkyCLSfQQMPl~Cbs5KbN8U<1wwG`=R-prPld
z56ig|v1ptaW}CEPluPPv38>mFOJ63m`gnHeZMgtLbn}Aoz?3&Xc-sg;(<vZ!#-2iH
z#{ajckSy*e76_9$svT-|HpM!S$*>)gY`ct$e9(KH1?7xJ4Q$=c3{()Kz5{g%m@k7_
z<)EPzXmnBruus{*Ux&H=!ftG@!Gs0(E`Ouwp@UD%7tkA?fbR{&H!U;rN58hp&bhh4
zOIZXSgYy=@zIJJ^8nnL0i-_F)%<bo8pT98_1W<o5qgf3vqOfePkO%P8SHXCE*kF?|
zO_A?JP|z$YFPKQXLaLheKnO{!2Uv_ug#;BN0Mh{zxnm<+MD{%QMs3%Kzhd-;gYtJc
z)rPeE`x;IW3KQ7J*mS4y<W{YgjIC-CJbrOKL4ApnAWf03Nb_6}ud?2WhZ99X>v66`
zCAj`x<hUDgF&D@3ra;Vl0as9X>y{WYwj$RAX}@ZCrB&=pb4XEly#J*?io?DJmLzA{
z%`UBh6(8*cZ-}0hvXsxZS8B!a*puo0+--F91MvRF89a@?W#c@_S`|~ypmk6_dZlLi
ziT`|6+{9Yk#_P@NGoW3wDh<?81!b;Y+P86MIX+Kpu;3`ZQ<GY4A!3Ln6B!f}8kx+R
z;Zj7q)2x}rD2b9%$Eb(wm;`dRQPM8|i3z&XHrFF%82<av`{VnyvGend9-j*q5Fobu
zYAtw$vkmf=HotNmnz{u``%zOJwn*Nb)f?aH_mfd%-wUTx^nJx^rFZjpV+PPCh>S4t
z!3^Wk9<ggEZ|+Qo%g&Yd;gWN~s8X_2N>($+^(LeGg&xLl$N&U4mxH2h2d?w(c2~iJ
zX7NBChw%<qpo<cnrh_s9_m=YvEPm2?ETY1`Pqd$E2G)s@JMXfoMED7A){g*m-Z=)&
z6YDI27_xJZYInL7d62}A;!vs~K0j}AM#izQmRS`Gh63R*q(I1ELZ@n6x(x1vRp2*k
zoor<emwQzgmO&%%Vi<~;2cmZx7VWwlI@6w2M=&+}Q_>CgK4B%HuX@RNcVj%n_w_*$
zNsKNGPd8Fhl4>mg{f#|gD+0gmby14FT=V+5<O>E`79t<6JWC!z4l>Ltg|X-nMBK)e
zT;!t@s38=I%NtuxiF@CV)PF}cj!ts8*X$GM&<0qe07x_33LIKe^kc;%T^}POBJy6=
z!iR(FumKa2sV!l5xW1`k2Bu-aYd=`_M^%;$r9cbr>cm0o{hAMbwS52iby1mAx90K7
z1|%%Kc3U)}X$q1<m`RJSrL6MTC#8d1;Gt0!l}X5-$}Xbr_#?z)lA1Au35v?Bg^d(F
z90jm&e6)+{!KL>f6&eNRQ~zezDuWb4HP!HZf8Nt(Xx65SjncbB8P(`Zumfk(h7D4q
zVUPMer#SDX+-iu<Zbp~@>swf*4E70UITYDq#h^&0Vdm}>+s_bqJ4qVsbF%{H-vjO5
zV@r`Yf78?ZsZVqw$8d>D6W&mGpZ%hHAULlQr>F=+mwq68D@u;!-NyF%?5HbO^lK3{
z!i5`uDvpr87`l#`pM?8iuIQQ#`Ko^1v7nIli}atuK&5a21!4U_{kiRPSDJ#2VK8Eh
z);9NH?=iFeoPE^92*YB8T}kYu?|F~T+XUUv)=F(85=2QgO>J$)X)h}QYgY%?<n)7r
zN}VGp+5(e?C=i^I#caA-o|%0X+wToI2!VMp(*;8c>ww%pB5!`aMef+f)RLu@60I`p
zN&gTV>9$&Fj`&b+xp`m{e_6t9TrKQ%u;@L_$Z%YvQMRa>t3|0cnyu}`te9D@#j<a2
z$VaUXqZEHDPTjpio~g<B$^2fPY;7&EwawcMYB085p5*7wGtpZ&qZ~Jp#{5ljLIGG4
zCdE@0>N7?H2L6Smw<G}lYb}677d0ms3wf~&vi1&#FhqrhsPnf`3lnkVsGbuOk+dcu
zf^qS0d|;~IDKTgi1h++nTS<r2)8Ej!`Wk0#ch%jZ4x_5;sM(XQ71gQ|QF4Z;^Z}3z
zR1#XT0CkPihmBvuEurP0AXdFgWA4;68$@erz!$ceJZwoSoToM84oD|g;>*j>1?&XT
zpRR1;RVmg8TBOqeNASw*zQ%>_l<!%Y?SASnF|{&++3ICa;L*+mGZv3DI2&AN&d0nB
zCDV?j`;a4lsGIv^=AEtsm^G<7o0IaIy3uBBXO*5%@-PuFL7UyOXUE4v-%XCSp%BNn
zLAqzEW{LTc2pOncIan<>65xRpMU!j`?a}*Rz!Zs{UX}{&jPXDO>Tg~3b^v$!H>ySL
zZ#u7?W^6v8N#KfOEt743LJf3h_!*Yen$vpcWw*NVJDVX2ay5@;_|~8c^BTs2px$vR
z0kLg4CN3_~IO~^Jj$A@a#Zd99dNqwY6JNT5px|taBO*E2T{)8{wGCXio>ajcnU+y{
zt-<Ie896Z<DTfXatmu=y0Jy@bP0GMyGyc>yLM}3A^oCRRr4|m(8m^Q9>D~E6sjo*a
zAhCN3Ro3iaSJ!$>?iDRnLI-tVriM$9vL&iTE+49T=Fd=0(Sjv;=XLCuY(aa`l#xKN
zuM)nj-Q;5l4Du=~#Ksc^Bx6W!Fzvi4GWCSyeA*KMii(0?l9dUz959x{+E9syqogru
zHn)ikZ%8OwUXuBZlVrzwRK`>)&pB#mt;*P%f$uyZe#<DVbBL9U<v??mCNY+mq{i^g
z=hYxi0o+7IOYd&>P3!wlg|z1cT)X9+U(iOrP_C-$Haoh}$}j_R4O&6ngrb-WZPep7
zC8DC*(7`_i%QP5bA9~x-s2R==f3>w8k7PuDoh=Ia3ZerycZW(;;YEWx+hV1lLKCzh
z#m8XN&OOiGi^6biXk}&H6F`Ux^#|m&*Nr6#qi~>UXEU2y)Y~NJ7hcBEwIg3qy3X8V
zokOam_8OG_W@{6`oh3`j5|NZ_p;)4@=Cd69>+rqzcLtaHS?4aQ$M^Gf&3I(?Z#Y68
zuis~KFsK+B=8FA7c~dw-7o1<Jj$Rd9Odh#e+qI5tHJLjbesoYVcQ2Rg(B9v0<B>Sr
zXxv;5SC1GSqY;HKL#<Uq0)s-l@aDhaE6Jiuax963xAK+BZyI<<R`<uWs{2zhe$N6s
z)8ssobd0jj_oaCy)H>|~O+E$AcV*`Y!@PdqEs}c>yq}g@(b_9GWErJ;-&(<BPbX2N
zGLGJ2Q!IHhE(#V=FiDnXvk?~*jAumyVAC@ynms8}*eBrEoxK)%y)B#d_?XN`0Of?Y
z$-*vh$DivDH{t0nv=qy+jCj8HQ;J)t#v$+vusPfimhe#}ZworX$w=E(sp?39!W1mg
z0n4yg_Jfs+rz-EX)|#6cneL#THiNZ7-7m=A?T)?e@Eh%&P;Rzu=f~Mnw`L#9_#T?1
zvmFQCcfC@7`=2Fsgsm>%M0Q**M+ax@m8R5l`1C}3*F`1k4p@V9-83nMuAseh(|20b
zsMfeKJfgp4U#j?*Xn-B5gtfp{rREJORCbbC-TP^|7QIF854!_e0p)%V>#Dh{l)Tdx
z-EA`R(N?(G(lgb{y&t`6HBlGPJjmW}mQWm5AFXuC`aIZU5<aU%7!4ny9N2e~R7Rf?
z3P8@~g;gPvG2Pzz9qBd3$!<Ih+X$9bb6~G>+VlJAQHQbG1!I<!f-(nb;j#3)zYdNV
zg1Euqc&RLlQlo?(^zhTN<SvlTn3vA$iu7NPKU=@1E&HNA^Pq+$QfQKoThudHGUWCz
zN6Of?<){w}1`gE9BINGk3Z!N1U0$^GLijHjt6=#7`qa}sk2v%LCryhQOhEcuj}`(M
zI46=jW?bvV$n;<YV3(Xx@iUP~0-c9SK=3eRIzCWJdrF9zethkyUu~j|4kMyyDSP>h
zvIb-^YoO1JT~q}xq^MsSLFTV83Sa-`mDr;f>}%Cy=MfNKsm2t!i#Aljoek|46DjB@
z;}fw85%kRXJBsx}d}WU|720EGnm~AphttNQ1gUXu5*QzE9yig7y`OO>C%SFE^D3!6
zNwo~__fJR%5g5vS^kCJ7MF?=TA?OGFu_F)eG8nR(c1C!T8M7_dr0_d5kgmRA8+{Xm
zXtIc;cVEL~-1Dh^{l=U-fnCN{?GH#Hp>ROz$IL4bbA0N>p=8JEZJ3<G^B4u1|DVUG
zoaET+-;#o_f?w$G*0-;oiXuNi?h)Z9`9n1B#toZ9-N~d)sDWf)bz%FE0dC2Q{)QmF
z@e#Evb)kv*Y%Dp=eekFWF{O1Y2kq94n^;8F$<XW*rg%i8z%IQE(!JryuJOK8OaU%j
zeKeV@m_wNd%rSK=KBG}R`RgN{AaKsT@2DfcJ*DtZI0m&$+4}Y%?R~%02};1K)dmM}
z>27ss+S)X(i|sQ5St6C>^YthYpy3?M-k4xa^UZQav_TaP>-5+Y33akzgin{ooTAlu
z{G{Y}38618dO@%hME6Siz7kF<V=^mcEG!#JoczTnTy-YXY7Jyk2=But6XnX8@`-T+
za~Xh2a}=zk-}I372`PBkYUYjU*D|HMBxULnDQhGBGfdm~9}~9tU}mic?D7Z>ICR8B
zI<pK22!;FjCM1>&Lt2~$908pZmz&Bjbuu;H^c4xO4H*Opo&Gv{>=g+2D1r`?oi1C@
zTgc$nCnFbZZBsG@h3=R&jxrdzZV19>y);#Cmo&t(?A@1mej1zZ{d&zX7k~1nOuv0u
zk7WJ)22Rhz@z|tt>mlac$EmiVf1AY?0{_J?ZBE;lkK6x%Eoa|%SID{=p@7cNUKces
z4AW)kf<((Haqf#?IbOS{(}sA3A<Lc|pgE++(hi|j3ZmU}m%ZNVaNx7bGfd5G0ntGz
z)&Ck#uL61{Ev<F9gR<>o3+ZJ*ZH=Be8=hfWpvUTn>;=-A4@&cB(w>q4!Bk(rU=LxJ
z!(E782pyggqNS4)T7E!}V+MLu;?$)S!@8K1o^(66AH;ppiP6iT<Izh4hHl!b@>jME
zi(cWzy%tvzL|lsV(C((B@8m5%b@%>bK^yV1@MoL&RL;0<a!R~A!REd2(j;~Fr&T5C
z{j&U&`tdFWWS}pRLE32P_<~mN%T83#`p=ZrI0biD*a?KPc(R&lSVq8dLiW@-z@(v8
ztUS7T%71U&FcY-pmc)xG7TQ)@O0~CYM+Y}rwTQd7s*+NxJ}6W20)_O*_Q?-j3s<Iq
zcv}rpNS}g~KkMqXH|G7)^fP6`p(CH~!juBSS2EL;gmcOUJQ)nNWnd`U33y!w1R@Gz
zHpdJ<0SzQU*+PYN3kCqWz#91abH5k=TLKB*ywr}y2Y9vRN6WS?sU}nami*LA$dR=&
zd2#E=$IO|X!Ko@R#w=C_dDw1nN$PpOnM>l12lGyuhaQv!XD=eypHOH0ngcaIFV$dn
zhBMGT8DQU{xDwKC4SjNv{cAw7fO$I$F()nmKs0?5eLy7N0hJXKea-hx`J){pBrhF!
z-1pC3r#tUf7$;bvb@qOHj@eYi{?j|>zF@G=N)m3`JW2xHvivhsx=tzCcuG2x4|<=7
zn}2Em6i5EFV}PX(l}uimC<yF5=62W#B#Y4~xGg67QAK0Fc;^{{GD15yZw%QJsf#;9
zgg30B?{78kh=?-yz);3#sJ|qthm2DPS{(H~p04)1SvWd#%MF%X7yDi{>DIoFnKN5m
zJz2IpKD+0EpiNyz8Lw-Mk~x(0I_cNCe;i%yJ39cv%c0eSPme{@u`fJcGsDxZnp<}A
zj&i@-v4Co|jNzrzBa~d0E3ww*H;0QEAJa=ypVefAMI`YCCljaPUg-3`EvT)pj&v>`
zWgjxdKa@GPx}L)TheB!M#Molix?4365Pa@4!|*JyE7O4!oRPW~qB_P+PzH@=1w6_r
z!#;TKFV$>7fW{JrIR9bX7>hel8>(<v&$Y!cU<cZWbdRV;#ia6DLNxpESbd`wT>T=?
z;sc{Wzsbl3bp+@_b&ZLFlm*>7PMo@qsH1<&>8`oun;T5>4OA9hdFiSe!#RP}FZNDk
zkzrN=w)i#TeaA5}E9*FzO(ea+8KIW`;&6_r4i&JP!{z(RvxR#a=Qzu@c3QBBGy$_O
zqaT;4+l7-?kxWUM&h}KO1|3`}ZR9thgc5Bv$qk*P3Z!FBy#YCry~dRdhrsp%4Qc!Q
zSO8`e;$xYr@ZJOKClRXmMX;cMA<>oeyD{n>COqe9-P2Wp5QFTtvMTmH_hw2X{c&#X
z5%>P^hH6DRQP(H1I8Eww8+k0cgSy?33+J`FK_wvFLoR>_XA>(1lO(DVOWlb$r9ZjQ
zKmu$G^N+Dv0&&Cm=w+r%S=;oDa;!7_W`TyOi(6LjpB^?6;sdZ~PqY4}$&FVC6;M(h
zwx)Gc>NkX>iDDOR*|a7j`Ow%uXKVFqgp-_#>GcsH>NZryd$<vNvKr+*kqxtEUkR_N
z0DSXG(hydH(#-t7_)C8jP94@Z&p=kWu&m*F4wxtNGNUPF`45Wc5oG5|{mwa;na!vo
z@`~*6Q1r=tpRFQ$=ylE-6>+5<g%DZ8!W9%6=hJJ4@gIo38Z{gz@tW}K6jYj({zSE#
z&EpMc6396ci2htV#*W>mQy0_?@>K#d2(rF$IXnW>u7(Ve5$}9y5<x2;-b_|izBVeA
z9Cc!%N2reVuv&L0pkC4!IFI@6R|vZ}Z1~pH=4I!`f!XHm2XjU)m^MB6z&BXsP9sCC
zCp*FdM7Q$!mW}_~eK>}Ti&m+`AGGWG!+c2eL^?YR6;$NQ4w$|YMae7VkyQ4QdV@tN
zhrgElDYdmw$aP6{3O9q^IGySJrTZdqfDw>0{Nxm!@ew)!Je>#*4|&kI<@a}2gcm$1
zu|jbxs_wa|@BUN^z&!odb7ArvBkW63s%=W9QB5Ujt_#ChkMTRHSsaiaZ_txMewA(e
zZrp9{Fs4(v$@P~c%~$6!GrfY=D)G1)5xF5n4QQV{SweX1J2@`z)y(Lnc8HA3<md+?
zl9#`;75%aU8bJm12yrr3<0UU0G<K^i#8<hjZkgQ4j<L?jrMG$)Frieh8$IwZ)`2>3
zs(kGoo<a7DbVQan`o;1zLvyEH8}vdtJj<N8M|W6$w#LANoFTFo98t5;=(2z7>R$Bi
z_Sjciumuq5F;%$0^Rpa7YqoDbNzGqqJqrZ%oEk_|ov%aQMizfko<Pc6_x?agn|67f
z-t@G7sWn3Q&w(_qWW5hYCCN<=2|Gu8XnU@D1?s}Gem^}*AN8tuHT1w-*@f=+4CGVb
zlv&tc`cUx|S^?ONMZVb6Bnary*}2Z_b$R^m=X2s^+biba^6JK9b6+3C<_xucEbmeB
zN2KEEeb*1!r5xpDacai|SyvKpv647=fF2?*J4P4(y?|g5FbKl0FRnPWAg&Xd(W3&|
zlSmR43L0Hym+_j=8NlnY*F|W0l+v%dMDuxDUjJ6j5(ht!vEC*Z(QctmJKrILhpkvH
zZZPRjeC$viStqDlKF{p&#H;VL)ac6OW-r;CdJ6J>hFX-p6sWLjhORx{#xOFMU-<fE
z3x~ghjXVuxASd$DC-PUhbwpvjtO8G^2fezy)J@(lG8WtxR)6R&y}}{cHl}5mBiHas
zf6iQWu-Ki{vK1xi8(tS7uob#_7otR#0qJ57L~StHt=~ttUW{{+sA`)=@@D=M^>7H9
zqCb0sc(zn5Jqrq=kWTK<A*pj8fD|g0TlCR!od2r<77@_D$)g%;-~r?}9hr{SOCp*x
zm9itFI#X9G>i&@hEKqTN-SySTd~8$MnRSlZb7r4dB-e3oM<Oxxy>>gTilCS>AgnHU
zY2#sew;xT?tSTflCw>8OIrWG`xUFR9sM$RzK5^hC<(8Eqind>L6xDe;gY9N|rVIyF
zvl*;*Jxu?3H2wBU?k!=V;SaNpmCX^VP2TFpEIl$)^ztNn3TQ&szH?isJJ&QrNNSxd
zF=y0W2K=V9bBd&BU{+Fwpl4L1z)eUw&4W$S>SmOBIW)sYb{vNb8v{_yN)E<^4xs42
zl+Q0`#ug$q*CAKmNjM*Uo|mFbPN}+e2%+|%tV_v}R<3&0=)$emiPq7!LHJZV&<>va
z&-co*-Ld>_Z0kNC^A>2SJJ8J2CNd|G<P$|?<KhwgNIRiX4T9!!s=-hhw5|({8nlit
zr&wX;vKl4we>?qcmJR?;>Nvop$8?VkkkHYWl!oOe&L#d1KeU4P3n~O2rCdNv!99CL
ze$gb)0Pq-Vo>nT<Avn=#V%IcU@mw_0pSr%YSTB{6b-kWnEJ3dbWtL^K-xnWkgE_5B
zoCJ~J!U_LUcg-Q|dfR=%il^Fzqps7%Kiq0`(?v~7MVC1)$6KP>Oz1C&RZE+nnEqh+
zl&utCvM1!z4Shdkk!ACd9QDNC8+HKkV;yuq3~J)#LFb$Zre_v9Kx>xb_du&ZLD70!
zw>HU}dUY~}>rUII!?e2L<Nj%RLq2g^NZ%4+4mxec8R`fZA<Wo5ZOuu{f&W=4&Y5=b
z?=8-O|4Ppt6t(d!t+_mDN3~39ZEeJr3yt4^`dOizR|oc2Q6>v|vHUu`43SFvql0dp
z3TQ_xt|%R;07_kP=)_UWoiB1GAWr)F9&9U^n>Raa^H@LHj$4!M=)}CUth6~{l+Vc`
z(m_1oU7TZ#xYr`g6T{)Hj)Xz-@AQymgi5(j#*5(ANq_HeF-(Y=&Lr>i{q1MNrT-JI
z8FPuiAiLLXP=|Y7QU5k)q`~E2tE|OuaQxQS{d0g?$n>2{q&L@laCnx){jLvPYN1w~
ziE#6+bMFlQb|PczAy!AvOT4M4Jb91$um}C{J<Q(PuG4m{{d73p(~~2g*g-Yhv``Dq
zCGtL~f1dI-h~HyvXRX{ymlC1!fwEslp>RwU8@ZH?$2J$HVv?;YA&*BnECES@atFqY
zP@K+_5!5Z)=yAb4&#|EQ!#||PpL{cYAY%{iK6L*ZXNKg-<v{@1?h2Hz$+sNN9oDTd
zqu&KlTnQli-Hrf3)DLjrm2xj#(5Gj6anktmcH;b6`PQI8|10_U?xG|@ZFkP_ssH3^
zMWKQX{k4qS*Hb($Dw9`Q6(~;ds&1W)yTZYYrxxf;>bKm-<r$d;C&dB|7=Z--kq!=p
zK^lv699qNy`W}tjakb(2+CX1s#O?jqkmj}LX@SBHj4hjeIlrilbRTrAr1g~5{lf>@
zFCxyf4G5TBqqOwk9-L-J8jH=PE)v%EL$C$Vrlc}FF_yYiR5aL$$(m&9J3@uf0VB^S
zpq0nY5t($gt3?!nY)RJU!>-Ba?y6c~k78=n%mqxHsDk}L&{&v&-+rDc`+jQ`Y;`|L
zs#4Q$V&l!$^Nz*Spq{Y)ca>%|c)njjcM4<OwARAJY_MPJnUz;UFSBWC;;;Hs@cS;)
zGxtaqQ9P;<!`Y4XgV;j3!(JaEqbby&;|6b1liC3}QYc9Lm{$=N`@8A4ax8X+i!hrH
zfLTOV@+INH;%Kd@p>6w}l^OlI_xnkkuif{yA7WB9${bcBjuD*Mp$_ALVzjLL<RM1&
z7xgg8j&~Hol%BK8TK3V3Ue%5{-=y~Ql&N#A{vWNK$5x~UThx#mNI(^BVfR%mRMC%k
zY=kw3T`cYK7k^P}gxNJVw@oeef&loVbg?A?sFt<P@}P{0U@WKzR<$JYIP!Aesb(ZH
zmR5y7ci8o;{hYli8nxY*nfYeL&ZW|)o=e$Z^}y@LckNtJ{dV8!755vlcLD*IWixK-
zu<lbsTC&Rqtrtkf0nn5jdg0T4SZU-fcD1y0vsobPH9_V~&vR2lCZgDi_qJF{oy)@v
zx(A?wi5q@@e!trn1UFWMod)j{ru6&?_scF{(eL}{Y|#ZJk<uzQ-rGKI1fKdxoIGVW
ziRl5#PD?i_d?cU1H=VtDs1SeR2h3O2L+CE4mzsCCdt>+uwMX>V(5EhJMc}O>f6$iG
zkEe;Q*|gc4r-@lv@R?_ng(-t`7-}AH=@dfbDkk)(2~QD+xD}6@eAHQhIRC2v|9wA1
z1aJH6ZeT$$L^wQ-&ZGgc-5SJuV{kMAP5_D%?Hh>8{svHQ#{tt4f;q~-k9b5Wi}<5u
zhE>Qx|1LFgT>{Ly_2$^oLA@tc>3~>kU%~-Ox2ApTuMO=o`8uz?P*qcf5{cJPNsn2*
zQ_*XVR*c)e%+v`a3^G1gaNqy{<r7!FUe{F+AC&jsB;UJyx_pF*%8jn^+bQfH3wq~-
ziclt%g!&<JXw}3isYgSC;SNKY1~3YH<Ly;F7@>G_dABUlQL##zwO4z)3kRZea{U-m
zaSNUwmPF1kP~ULBT;aH+ehz_nPzN}kU47o!+)I;{F{eD?RIqTWC_QfS25U_@xZ(_y
zWquYt<T<p%T*zV2eh*kb3|Dch53jEZ#ndMVpQwH3D){~}7`m){7MN;bH52z@iwV=z
zy(E|Trdth-2E{jJRge8tWd_++Jc9aJjD0eJ%wmfO#jegr(D%UF+UFwMDcLLWAr+qO
z+=<xQ+L<=;gBFTldwc&zU4NXXzM2lsH0$L&$!)yI6?$zo{P-=rl^v$XDXzs{bcZMh
z?g8V>vY^pqyxsc1ArhN*Nz@w8n_}%+GganLgNPx%Qu=E&le5(Wr>2iPW0^7}z{pNA
zF?8qD*5NR(ohq~>NSjY6MXd%O4b{6ICraX+mne^{YJD<$cb?`<IU4pZqO{{Ea;uls
zE`3byX3Y9igW;F%*Os9#YzuRx-(#}h;ZfQg)8Dp&$65#j_jRz&n?av0=sT@KpeEXa
zyUF)^BR2c(?q1uQxzf+ME!)#Kqrh@~elNd?2DnQY`g-iRjQf>n8OUC9C=IQG&(sJ<
zJaR$OO4pgW1tG(70Y1W1*24WlGjk%}Bx64nBQmg#P_4qqaWzp#N+{g~E3WpQv+LTf
zhen)e6Y%Tj6R*$HoYGQnFRu+IB?3~@&Ksy-K39P;*~vrz8NVGd$*93Z*$V`=t*x`^
zvEqdHK;Q4}82mabu2mO#cQGmOlJ{%jK)gKtM{|j1ncSxI*7n%Rq)8{MhkZ$W>)!#D
zKr$8ykUEDHie5U<JWiQf1o3wwI3R*H!#%x~O<B4z+gJFtS5B`VPaaO56r)Rpdiv9K
zdF4->IDDvIOvqMKC$8=g+)m;MUTGv_pk19^-<}wHkKCPBX-Viq3HBtR@1LCb-KXdb
z(t4XD(wJLY-XqYhxH&H+W6>rxpqo75?7%IRrC!G-)$`Pu-shO2MnslmE5m)=>~6y-
zDj4twkX<%nL16Z4!58S{Nzp6(uO@efYmFQB{`b!tX;4#?t;U+(-dac|-INOpJ7^ZT
zr(-5w;98)zU%WsQt;QR>H`Tj{C0YX*r5A8qEYEWXlf6tKiGT;&A@WVS3Lz3Ux+<&N
zhefm-U?DA_j_kLBa*6})O`}j;UfM<IZ`X_Ex5J3bRLrrf+=$p1o+zs)^$NW`M82_*
z@}2GmX5i(;bAghXs)#VX{soL@uZV-e;vRD86>|G_z^9&QPfNw|aq_i9Yb)6qV9@>a
zBmu#%qeOa+d#WN*E-^^HG;?HUker;$@n<%n$J1g|13C6Rnw!`_mc+HoB(63ReX&Z=
zmoA_T+|R?JahZgxkUn^a0hy}q+O(XUg~i3{Ov!l~-$+P7z3^0A(Ks6)q+88c_6+DZ
zVlGxJt_?$8HN#Z3r;qx^>})Dwb$l7q?P6*?F`Dq8f;L@kykSiH>e<i+!RXj!0V2sS
zga)P!wqK3~!a^b(C@fd#^dNdUWhc(aJL?t-Xt57>G4G>vC79)m(l%-?e#o|3Ax&m~
z6dT*3a!FI?PCIlxSvb0lF}~R(I=tCQ_17FtnrOP1uY0D5AsqMzyM0CgvUY9RjtDk5
zocUa{4kwMK?yv~<)?3|2vtpwZ6QJ7g{SRdBVs2d!t#EB<XZwFA|Gvs%L=)+fT#%~B
z$#INL1l;<h$^%7cc;0@#LAcjlVCghm4MsK~d%Psc+x6e<v+pe7`?;5wJ^gCT_HdcV
zV1D`8rg=e0{vf1Xu}!T4B+i$+Xh6pR(M&+#am;MrA0~NgQalc}&h^x~cHw)x=zi{X
zeCYc)PW&Z*M6UTGd{fx(KIQsrd`h?@ET)#rHUw=37_So19aMBK0v=V<GiB8odGI!G
zH*dYXm$@0R#nKp!dxmE;=PN<jf8>1!4N13MZ(a1=+5L*P*y|~xN9v9cTfhi;F3w)3
zASUUsCbp3G;M*O)t}H^$v^<?CdE}m0jPOqM8-HD9(}6!Bg<x2)#3PkJXS4oUj*}VJ
z6lj6?)~o$BAXmpr2w&d|B+n+#qo)Xzy$$__48bKaRgq6FxejyN{W#|PJ%jo65cA)k
zGJO#Mv#7tE5BhApl3zJE8Cs6I#`)RYhL^FVk9t?``Kf@paUfE4KodDlc1chll?L3F
z{c0A4$8ULg`Vn&1k+TJvQx?t`oR=FdubW`v_eSruYb?eu7k7a_gU>fi9wU^>SncAm
z5S6IlWC>6JOk0_qhJ`Zye(RS5AelRM3d6|a%#|FDhU*k{H`Ey~p73~uAC(RlG(^gj
zgvdl!Fn^9l>y^>L1zv0Q7pm9U&XO)4U>CoWikzYkv4+3B&wZyr*0mkcn&?f?#q(MD
zIo4>Uros45N?!zQ@<F6&9=L2OL7c+$5pbaf!?V!)1Wrc6+7hnehj0(#Y;4%$Vue<v
z5LK8E!kAQ|P9{_j=&HK8DMUTko~3LIT<X&kS4H0}e|J<ct4HZx-Ut{EyCTi!zvrH#
zmZLg~zP$!_G%zbi?dl_))YT`In<StJE`o}C>8|AI>I(yyFxof|C+L!JTVM0{M>av`
z6t84f)(+@0c>;QlZBps<;QD6iPIRw|R4r{(nl>+JL2q5vH*;&5FEmvSB2xr+<2cXf
zhory{)M_Sv0V72>AA=vmnGrs6x_3{To*MC6hkI8LBREgR!jHr@d9K~DVk?!<`uYUi
zbg3#ec$kN3r#mNY`7Pk+rCy@|>h{$#+e-$_KQe`n=XxKZ{Q5_|(}a)L+19VH1LKl{
zq&#u?M3`sDB1^QQm~cOsJKec}uiAsE_5U<wl|oR9Qgga*3yY=LV4Fcw%}yz*4w4rz
zu)=#nvduCVL&NqX6FjS)9yqT2PXPHH2I5Cog@7$vIb$@o*zb=_lXDxdg}87y+i1o`
zt04}3W3*<-R|)C)4b`J&dT%Li{WOS+gmc-IGtiBSijk;H*LMdZEX!a&`Z2`$Xw=sO
zF$__@iQl6eX)3FF^{*=`!lHs%w4oHY8w$a8j|Hep@oX1jlWefevkY2RS~gj}YWbGs
zVapFKKebf1`=5RK#G^+Jeq-ltH?Ldu`Kx+6TQbu_l`gBrK^=Cy<b<Mze4#O(h}LU_
z!JUTc8wg8F#DU0^aIS&I)HjeXf<Qkvl=7%FqTYyTAp0R3pj;@m9?GQ=^<E<a%1Dq`
zB4#1^xLF3Qx#fizH7gB4M60fcstw@Od=VDSfWAI!Kp#ObiU^69Av;3$%l^!<S6gkZ
zA_v#mSih2CW((}qoJg(=Udb@uv9VF!_8nxiMw#)K1SX0xdymLPS>YZAKTk?}f?USy
zNO6yoN8HD;5d`Uwi)3ad{uMLd0oDXZIgu1+MK2oFFgBLn^t%8GR+!D&@G{oc%Iu?{
zAp=Ziz^no;b%-<ThAS!+NZ{kXi%hWLYGt`%VbC)Chf;H)OzULPcJwXIY&zt=8e7rT
zSY(T3{0*W7n{acCQMb|j2tu<a!J@V>;DxVee$NcSir-@SoaIK#9>TMJW%CUy2D@@`
zzX&{Qp&^>4!UZ{A+N;qsxj2=|Pl-sQry<wSMhGs*<|HP{(R8AGE99~@4cQ<vB$Na(
zx{^QR0}UCkr=h+<qJD#1A{R9dQ6cB3WMMWVNaG@AZYtssH7wu<&jBzFHz&D57{u&;
zp5g6`U{@Hv-^QcOYJJtbzrR96(^y;5>&ae|<oPRD#9-Wu{Pk*6uZ-=h1jZ_fT30QP
zr(wa0-{(Az@Mx#Vp&%Aqp^BPp1tY8wk=_$*tzNjRh35xsyff^sTbZ*l)r^Sn-asL^
z;P1Pwz^k@cZSI7UT~#kwn>b*X+K?wI#i!Y@9S@VET7(&4mTd-%L35o^CHJ=rMFt^3
zsd1%y16E;~6+#nl2Mbk~eJQ~TcvxiZ{)*Vr47@7p8yMC$r;)d{u$)7+X<kNHMx+Si
zJ1A@&)!iB13P2}oW79OJ$WdLkA|c}haC(RYsxfWI#D6DY9<0ol`v|Nwj)B0f<L8ep
zMb#)czMVS2Fmw~<mARVn?bNQ%Y^}***UUEDvADfm*T>czUxKO+i^9ZG>i2U$@9<14
zrS@WczhRm;&;4DBPnG<6X2hyI4tgeP`FWaQ;{eS>ndywVz?61@e+c?3p|W!|RU~&)
z(-FNQsh9!*g8w$d-w5EFl-Y>)$2`k?^4*2YI_I{x71HrZ8O{dt!5eL?G0u-Fy1~sM
zUG0H*a%VF1jPgYBQ!~g2mp%z#g?t{!cj^?nlb)$ZF6Z>%)~(DEedSi#nB9h_^ZS$b
zJPFO+x>XOh&!1m*fG9dUe?AI!cTb#}KOb)|zDBP4TgCT?O>n-E&9DPq{5uogcK4PW
z*M8yZLF(TUBmOPqd|=bpuVA|QHI{|RM()Ovfq(Lw5#`_0Xe<kBW|%Jv7yZllGAFKb
z|CO_%5T&ju#>ViAJd(|ula6PXdhT{`<1ZLUo#(}FK<O6@l+M@Wepos;>Z`_CQl#jw
z7I)*54fMbK#2h!Em+9G6_0(l-<rD{%N#AbX)F;z3y=q)^!|c>E<Bg567?ml=(|9@E
z{fg?#G~lRICXqpGjNt=aDu`J!MZ<n6Uvr10lE`^7XP#q!vHiP6m@cwe7w`US=f{6E
z%DfHyXc*wDup00&<Y;5^Nv0{TIE_KfoHI>E>z}`Q%Y98NZrgv`NDkk(W%H>GXt-#Q
zTCwHqF4s3IpZ~IH8MyqmQ~qzbcAd4DyyH>a!Z=KOMjxSxO|?G7>EJP2Jj4RikDk#@
z-`3)(D+PrfvI5IcHDP`U?IZ-r1xpY4+5o{<7c6~NvKA4ddN@=Y!h!k#Ht*;<^Pv!^
zL|fy%^V2>ke`#CLR~aDpKxMEg7*G1$5;h{LRhpfR;r$x5bF%)lVXjoGGt#~Dy*@RP
za7vi~A+$59>z(L@vVi`3r%RL+UnCWjGSxHN+KRq)WKLfNeceHQ<H}rgwQOUU?tL!%
z%t$e=NW;uHGAAcD`x~z$$bqIR{X`aX&iv#^qyC%5($`sx;N+J`8dE`3JtY}cSJ#4M
z8a#NM<bn%YvnHrrA^=&Zgj2yaLBoH5oKZ=}w~y?-b58vZ92rIP_;TPo2=T~hgvlT$
zvPKeKMQuZ~k)f5+Oh-Yw4ALWI3-AurQsEcO!%KRSA#(o6)mzAd!r3C8U@8@KyI1d9
z?RJw#PsGMCKwWQHHhT9c3MJcz+R%@UZ-8ON8ELY=zGU0BC6_xk_oE;=sajU4%b57<
zmO<P<``04zAyZsr|HWJVn;n<83=X!u?#M^!aGK|R{shL8qxOVqnL*faNy--pg_Njm
z(^_<##Mg|?%WYp1Ywqdj3OZ%Z=j`g}X^vo3!rOuNH=~skcSNUOhn@PO`r)3=bW-M7
zJD;lU>Rw(~Jf{_zHjJmKf2NH^AGcpjS}WR)wKp}l9mPA^pX?yUi4M~^VZ#0l6T!cy
zvru@<rx<$`3A0GgScuE{5HaG^kd7yFkYR(qbS(6A&%kX@pFoy>PV2s%N4LRWUnGzY
zg`Q45jVzBpecMpagF`#F9lK+j#n36^lX!@paZk?92>4_NYv`0G^%jj0a|b)bxXR-3
zU1}hxOgx|j11kC9ArhX9LwkeCApDIOH~m%PUhJa*e3wNg`=qDnUx@C8XmRj)qF$Nk
z!*}V9S6(S9Tz0)elr4rHfBd5}%uf6s)#3OA+Rt=@h=k|}(;Z=CK_wb!X0t4+gIJQ!
zoOvc74XUDy_R6&~>X%jh1xa$Cy#9ispu8%heRApB8oyv1_+985Lfb1nc4F_KhHoD6
z1sF(FAdGl4;Y7g0Yxu=ba9n@md<I3v^ZHUB&ZudJq`Cucp94P-YM144{mtCFC^YVv
zX!6x&R6q9h%Wj{~w5_1`@p+2`;~+fdadO4)6=Ek!voNJfYW=a%eOubw#K_`~{Jznq
z{{HoSefa#oSM>9X2Oa4hx82_{x=-IiV%PW6at|>(m=Kg2By+v8!V2Yv8?$9zlE&$t
zQF1J!p*TYytbop5PqkZnQ_U;%bxi1ay$wAxGE&rFH>dXRpXfwgr#A23Z1z=oJ=H$b
z_qn7~n~k#GuqzDw8dT_^)o6xZO>av!uRzb}Z7Z6SBcztolgjdu5qxt0{#5hC3aIB9
z!{6`_&}ULl$THnB(~=`HRzsQ`3KxJ%t))td!rB#fWxdg&jy}_9bYQmlK(zJK5b+m`
zGCK$;&z~ND<Me4#aWJliRCOc0;-eGyKmXqTC-*ZUz{dxmL(q$Q2D%6jC0iee%ZeIQ
zjVssI_WZm0tK=(W2CRl&-3j;;wInPv2&~hSHL-9&k;`G7v?G+@<4bT-n+8B?fH?jp
z0q=HMRpq#PkX%A4lNx`6iA>y&&l~U=kPRDP#bgTH#FOZZp2LCG)*@~jHfYx3hVc@u
z=GmxWp#MS2c>?_>UyniS^}X&F#}2*n!O?r)Q4vgQ2J3tGy(lZ^?|t;cSMCX@h8^g`
zkB&0qj7-l#ttaO_R{?D$dks9)JCU!+8)9xWlBglyzR;{T8lZMJlEXv9UY-FtI3<d;
zD{@R;iaSD)afe$1(w@)694r#__x1Z6euqOAM6^jz-0lzF5@T}QKkkd8fS68+zJAt$
zrBLWChxoeGFR<(xbpOOJRY8nPxK{@0?-1&eIfpN<?~nNmTi`F4SAm9*^BO>cB=&Q!
zi*U`Jys1KgTY)(xkGDEF;dhGCBdXjzvbtVz<JVRHghdizT~;~-ES~qPql%BpX@)(=
z;Ge`NR5#J3Gv;tdUAZh%_CTgyE{o5rfz!#SOBW^-RK_1=1~Nc2m5E>CIDHr!%RpcM
z@uPQ`Z{ybitMb67h)-NGr#|E+XSH}Z;^*3iiGxX=xQ@~emXI~C@?=*M4e(q%5pQG2
z)+FfiJay;3XxdeBGQi69Z5wwVy`!Tk9ty>8SwC`1=c>UpJ`rz^Co{vD<=aTGR!T{s
z-rC`T+q!5l9+FtOlw6;hnhc968?2R*$z*7Ri`NHZ$<Vs4cpwnm7wQW|;&J*MBPDc%
zYH=t@g0F|-Qmtep`a>5anzHfz_#~s!FA&XyK1qbDRO$~=lP8>6$l%`ym+HwAUW`W2
zFfw>IBL{v|dRhP7D*_jK>Yb+|0!u6vQt;$EC-oQizWAd4=8G@Btf(VBx7^Y*BCukv
zvlC@xd1L3YWt|%pCEeVNHudG(n+FD(+w*-UFTE4r#^k7HS*ztT!b{Jc-JGwRA+xM$
z=!3qeG|DjV!Gi8pTIjYMGbusC9^<gXTpSgbdsJKzu#oBM%Jc`13@z^N8tLlpI}+?S
zV^T2^2&7U?sgy2}Yf}oHHNu-AZ_nCx^m3$^<nE1Z=p(Q9$j|h3quOM168?}cKyJzL
zw~Vk!*LE@wL!0JVdIA52E!Ppc_JwPf4K2E&r>nqP36oO%3{hhanBs(YGEA6cA|RCI
zAPn+sG^P3QU@e~S=qWbXQ#$dn*m7osHn?}BHbNhQ>5)jBqmPS+MtY6j7+Jh{Vri-=
znQThEnj}4tyvqnd<47pEKGH`zpbt90ai;iu#t{!VHk4A@*XDK=`)OBhZTnk6+AsJQ
zM*mF2jc~HmO~yBDEbju1^;iOy8giz2wO^%YQx!^$pB(f=sg=dXJwU;ymyHJ8od&%3
z6`?}66hT^Ng3&cuKf%4H0QYdoKNWCq-kj!qw$3k8-4-t~<nJQDcnK9L7(wgD0GmX-
z+j_X#zUFi)mGiM(C1{f?nsXT%o;WcDaP+Wo$9MGyn-}MNk|c-fV+OL8x8_VR=vG_P
zAsU?8GFaKn7ILNb8T~uU(qUOZd^hLMYj4e^NN2mq8Rs5_cU{;-rie*QsZF11NZ#!(
zjY-D9p)Rv!uU~4g@LjzT{f-MpY+{p%KJ`Xx^kttsq?Bj2yiUJqZQ4pb7k<W?e7?G4
zX}jqwa=`rl^^`T}<KMu(=*O^!I_SN;)bgvzL+oP?FsTde#gqoimPvFu^E8t5_w*h5
zdq{ekdLIlisbU1$f~1LihPEvp+A>7TEZXCV-8|r%^o=Xp`g4=Eel6?O_=I8cziUI+
zzzDJUA7hEdpFMwj*X^18_(N*;?`=JypLlr7i!a`P?&&iSO}dA>K=vVDYnV^)2e79;
z88ZYSz@Gx?9^)Ha*-JfZWdf47OhB@hJ&!2CppqeCQRX5~W8?`97v(4YzR9rheA<wm
zrrt)T+)fw8D>C<~9olHy3`>E2-@7&$ByD1+3U}o&)?CDavZgHE1n5;N+|^D#GY5jf
z2S<(sgGYdaFUzubD$pYjl5FHM32MofKSVu<gvZ=2`-S_sNY8p1;DecSMGlzA4kP1l
zqG!ekzYEJ1#1YP0f3-+^zr?)3^g`(z&<F7eS>#wm@Zak}jE!l-z}88)4#hi>`={uB
z#OPNeCvNWdZ?B}+sy*m)`X5mTx?dmHm*V#lt+?uTe}6Ns++Jldzb!!Qi3#9#g~!sV
zAlZxLYAoan33}WwvAh&Ca$2yL=Xk(U<M?#qVjWKu48kIz{gQ9_7jK$gCm)h$&baA|
z%YD**BWlJ>h^m`TqkcMg%OLzAGt)I1$)sH~HPilLQNyi+gPRv)>Mus^QHx-H)&q4E
zpJ>X)-Msm&M&cpLS_mV~YvcoTS>lvZNDvQifU=MvAEAp9-xOXWo&n@j)Dn)PI68!q
ztp29HOn>V~%LJ*V^Kz|P92Tp!%R5^nVcA8Z{yo>7XVd+)X!s=*$NC%ku>J-{@q7Q;
zJEf?)njEh0OLNTzy?-3~oTGg{WVy}qHOqc7U;l2;&K);@;fj_z7zB=d==4($LK{va
zt_HH2`5~*BpN|&vCmPNCOd(s!=lv`B3RH_m4;k@HJ`M}c*3KS(wQ#Li?eFPqmHFXe
zUZzpvwE~TD3SZ9kW^lf{3AGDdf}<wipm?Qjth#2+Y!Gp$&?!iXraILtbt$fvnGFJ4
z!!>Y%za~~8i}kW&`m`v=)^QE27)VATs-Z$6QTQ^}mke-zH|Gkt*;qcsh621l_NQxw
zU}eu`vkgFIU)EC@q_A~&0U*N!+^%kabxTbiXZq^drk@nyU^^%r0Gn2Vqk}7gtM_MR
z$Bb|dj~lppPOO?9m7I>OlSBy+l?B)!O0M(<Ie#*Q{peU#EgNZya}o2KC0psf1>$u_
zc$N-IkLR?^3VU5L@kfX8^-_5_>!o^ExYxjsQOHNY8gq#}`4kvA-X)tWWHcq=HT;}m
z>BtvcSr?3!hh*P6zWs}*k>_96P0Se3Zmp|H^g;hgRsGp6+}$t(57sMMeg^xqhD29;
zyy>e0`|+I<H{*Z#kFUeO|M=RWLlfUzADY(CsXD`fnQgi3Oq6TDvjlr|7F*aSh4t6a
zjWu3$@X#TXPCN!}av0wmk}+A&ysknR#J{kY{1W6dsotzN>Wwy@#Qb7?&;97W?LWKs
zrI+sA&tx9gk0AEY#K_P~_q{~^EdLLMUECjdoMT{QU|;}Z;fSdg@%%Pl8Mv8W07V!s
zY%7}up?$LczyBY`a*;U=$mL*Q0*L|uSRf580001ZoMT{QU|<gVpT!Wx%F4j-|1Qf#
z2A~KExC8)qw*{zpoMV2$z`!gB#F0R}075faq4JquAn{j1=@(GE0D@Wcp>mN(dO+s(
zLCtJJ5?g@4jHzgLK{3cYupHEGCTk>jzCcxr3xnN+WEWfxogay?1B5~L!t7=`1;HRT
zOdRAFuzzsqhs&eeiNl>Reef{FrcRInyWf!f!%~JCXK?qx%+5y0v9hAYs|Qe>3o6Y#
z1BhdQxCMv{pjZKjS3~t40;=5u!C-Na*cvD{0fyBVpqvm?O$1cF1wylc{BsXTUqtvD
z>?h>(6N$=)`$G^KCm^?pLhTQNn#}{T7tC%!3R94OUIXzJs9QUs?rMOzm*E414Z;j}
zpnjhLkpr6#Gv_W68-#0tcq;<~0R3-lF#rGn00000Kme!!<N+Q5LIJJ<5CUQXngaj>
zWCOSa90cwKfCah+1_qo4?gu0XWCxN5$_M@kKnRQo<_SOv{tAo=;tMJZf(!r*R1A^~
z=nYT}hz;HjDh^r>_76A@o)91qQV_%uloA*cloJ3GToe2iTotYsViw956c<((z!(x3
zWEi#?1{qixco~=(wi(tM0vawFS{jBLvKrnS3L7>XbQ`i8?i?x{cpSzZ6dht6njO#{
z2p&Klh#t}(93N&MvLFB;Fd$$d0wGW#xFQB3R3e}v@*@x<SR;%htRvhcx+M@LdL_~(
z2qtzW<|j-iY$uE-!YE8A%qcP{oGKD3R4TM8;wum<Fe_LqY%7i{`YbvudMubM$So`_
zh%M4B{w_W)bS|_n1}`!%UN4$2xG&l-@-PlCE-+d!f-yWXo-!sgSTr&;h&0$WP&NuS
zG&WK;gf_f4IybC1A~;+)fH<-^?l}-SKsk0fqB+(&3OZmqt~%B`GCN#5j64=RVm!<}
zU_GEd5I%@Lo<7h%`adu~o<H<J9zae&pg{;h_(Ebri~s-t0RR91(g5@T4*&oF00062
z000mGa{vGUGz)M50001ZoOO`PYQjJihX3)>i$Ysk=(e*eN@=`cH-aEobklC6xGgcp
zBoZ?+83kXX@6d<oOY~X#n~bF>O_<DgzBzN|WB^>_8v^<B#F4YW8KayFI7QELk^b3o
ziTq-@j4IwNpU}TsuHXTI<tlFQ!3v^u&S-&8%K}&8(sBV8;?8oB{?T%Y+_PN9t$4M3
zLho6wU?Nh>RosiOfm&^K6of|B26fqPwmNdUm5M4#+*rD66Dpm`zMQMX_;IWpPc8R6
z_Jeio>V3GMC%#T2mB^OU+^dnF_}Vr8Y*#(q1Z`vHa<0`<4sC{9X|?b@<Albnx{b!)
z^DuzI3R`GIys8ie5;fX7=Qf&Xp+lN7LozeZijcrXOygqB9bvYTGVXKC86~tnGh(s>
zkKg5yACm&^k6A?@tsce`((a5X^OAiz?CvmYL`t$uH?y<f-cxLNTAS8z*RD&QbtN%8
zs3CbDyR`+4NAF~}VraW)@crliegNHHgi8Q;oNZMHn=C~Y-Ln(AC+)rfNLC4oK*Q@H
zX8|P#1(h6Xx@)G3>FH{!s^9FAvnU8C83h3qP*8HtQF3^{h+EY&v%7rE_f6HQTUEF3
zJvY?c{9O5K&VB!H%iJ91Q9%_o)ZxKL15LEhMh6R6#5%0U25iJu*c#j52iO+dVSDU=
z9kCO3#t-o${204nSL}w}@e}+Md*El-6MJEA1lR}rViQ7iu^;xw0XPr`;b0tsLva`m
z#}POZN8#r<8pq&R`~ttkaX20);6$8+lW_`8#c4PlzrwF^2F}E9@LT*2XW?v|gL82n
z&c_9~5EtQMF!T^121g$QBoMd+L!=lXgG7!?p`c+<U^B*8!ZI$y<+uV@;woH?Yj7>D
z!}YiUH{vGz9yj9;_#<w?t@sme!|k{Of5u;MC+@=CxCi&*KHQH7@K^i|58@&G9S`FX
zJc@tdpZFIZ!{c}Y|HgmtB%Z>5@jpC`XYeeZ!}E9nFXAP<j92g~Uc>8n18?Fjyp4D8
zF5biY_y8Z`Bm5s9;}d*}&+s|Ez?b+6U*j8WsTP{6cEZy<h=ht#9@jNzDoQGb4QjD8
zLASw_l4Bi2<65pnW)>orMLeCJ_jxQ#z*197<v?V08f9VpSdOz)ve-9CkTNyk^Cs~u
z7TQ#`VXA3|fRA#sT(d^#dXd`;tx|7b5|Op60h8~{%V8%<cr+~U1fdtDl2+ZO90vN*
zf+-$Xa*<W|GOsgZSd`R@EEU<X>V`y)cvWP5*|x*XTfUS_Wt!#W+|UWB>bP;L*Hhe#
zIX4~B%QGWnW=}R|tMx1LDJx_fvx1sYOed9CMpgQ2;w1_UUoxHrBHP@a3hct~3-UaV
z`wa)iQpHV&_!2R`SnkR(SGlA>lv`rN2D}o<fk%I9R(-5^7A1bfQl7<3Elk0LY)4zI
zXGiZcDM$2S-^~=Zjt$$?hi<EwWkt7>^8PFq-328E$;#42JBWp%7~08qhY2*wa~8QH
zGUr*tZCcbUcP;ejq7$)fKu*~strEI3eu;~GvTv1bDB;8gcV**Rk-NHXt*pqubI+<;
zKh;|FCLiChM&cALt`Qaa+DleVNkdNzO8*H={3m3Yp{c!^#?BfRn=5R$SBGIf8dsud
zOgcAH)e!|Hutz+d6#ah6eaer7%;8=_<t5d!O>36Lek9YB<(jw4b?HcFDs`S#^OP-j
z>@W*wd-aNnRpvHninwMNxmuC^e$7>)&$Qu6=wXAtPSw+6s?sY4t%xfl`hp68(-l3`
zp0>qR<PA4l%c~aE2CN{PHC1iKl^-+G&ouW_(dWHFQmPg`uB&$RdqtXRDs68pGE$(|
zt?fcVSkKc!2jPO7W>Rk?GAmvz=b3zAb;}FFPQtANlg?5fF_F^bI#k$RX;dV$y(9?z
zvcUvljZ6x{)=K?{%~?T*3#)6JY$<z6*l@F@vPN+Y!m1sb(=Hp0>yG}gmNV*$b;ToU
z19ck(YtmSlD5<7W=AMg55N=#Wx2<8akat$g!p4L%(rLLqz>Qrm7m+Cxua0<Dcsdm^
zHDTZOXV(VVC51NilA-pbCp!|Ri%eQe`ce%&Ees#AyhZ6?5~(Aq<ho7-Ph+nnHuTF^
z#d1quBcFRL8rE%3rah|r$P(V1HcgV1&j^v`UKN^iDl?&zdg;p~<8r~9C9+;mpe468
z%g7+CFrk{$<f3@?Q#lSIrXv>fhFciLC&;R4In+~>V9BDxIa4f6DceG7<i<UV`^`sj
z+d4t94UC|-#WFXcFOHkJk^{xH4mM5Q>(*?8?zZeWtu4a3IqT1%dlWK0o}2p?pl$?}
z0001ZoMZ6b!EhodVk0ACU*rbHog54t49Nu>8Cab*GB9XCXbu#5Cj$cmCo+qf!DXWg
zV@F`b28WJ_jm#-78`VI(T^tPzj4Tcv$srLSC6Pd|k%32R2jl<N4J^GInHXFE2h$?B
G0002s37CTb
--
1.9.3
3
14
v2:
- patch rebased
This patchset refactors part of the code related to updating VM CPUs.
I am aware of two tests which are failing with this patchset. They'll be worked
on before the final version.
Crístian Deives (4):
Use locks to prevent concurrent updates to VMs
Update VCPU by using libvirt function
Set max VCPU count to the max supported value
Check if the VM update params are valid for the current state
src/kimchi/i18n.py | 4 +++-
src/kimchi/mockmodel.py | 48 ++++++++++++++++-------------------------
src/kimchi/model/vms.py | 57 ++++++++++++++++++++++++++++++++++++++++++-------
tests/test_rest.py | 3 ++-
4 files changed, 72 insertions(+), 40 deletions(-)
--
1.9.1
1
4
Hi all,
We are entering the hard code freeze phase for 1.5.1 release.
That means only critical bug fixes will be accepted into master branch from now on until the release announcement.
Please, any help for testing Kimchi in the various Linux distributions is more than welcome.
The test matrix is already updated: https://github.com/kimchi-project/kimchi/wiki/Testing-1.5.1
Please, update it according to your tests.
Regards,
Aline Manera
1
0
16 Sep '15
- libvirt is not returning a right number for the maximum vcpus
possible in PowerKVM. If such value is used, the VM refuses to boot
complaining the value is greater than the machine type limit. However
the limit can be retrieved from ppc64_cpu, which is the number of
cores available * the number of threads per core.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
src/kimchi/model/vms.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
index 7c0a512..45e0e26 100644
--- a/src/kimchi/model/vms.py
+++ b/src/kimchi/model/vms.py
@@ -36,6 +36,7 @@ from kimchi.exception import InvalidOperation,
InvalidParameter
from kimchi.exception import NotFoundError, OperationFailed
from kimchi.kvmusertests import UserTests
from kimchi.model.config import CapabilitiesModel
+from kimchi.model.cpuinfo import CPUInfoModel
from kimchi.model.tasks import TaskModel
from kimchi.model.templates import TemplateModel
from kimchi.model.utils import get_vm_name
@@ -835,7 +836,9 @@ class VMModel(object):
try:
# set maximum VCPU count
- max_vcpus = self.conn.get().getMaxVcpus('kvm')
+ cpu_model = CPUInfoModel(conn=self.conn)
+ max_vcpus = cpu_model.cores_available *\
+ cpu_model.threads_per_core
dom.setVcpusFlags(max_vcpus,
libvirt.VIR_DOMAIN_AFFECT_CONFIG |
libvirt.VIR_DOMAIN_VCPU_MAXIMUM)
--
1.9.1
2
1
16 Sep '15
- When a cpu topology is defined, the number of cpus must always be the
product of sockets * cores * threads, otherwise libvirt will complain
about it.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
src/kimchi/i18n.py | 1 +
src/kimchi/model/vms.py | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index ad186ea..487c66f 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -122,6 +122,7 @@ messages = {
"KCHVM0050E": _("VM '%(vm)s' cannot have more than %(cpus)d CPUs.
Please update the CPU value when the VM is not running."),
"KCHVM0051E": _("VM '%(vm)s' cannot have less than %(cpus)d CPUs.
Please update the CPU value when the VM is not running."),
"KCHVM0052E": _("Unable to hotplug CPUs. Details: %(err)s"),
+ "KCHVM0053E": _("Cannot change VCPU value because '%(vm)s' has a
topology defined - sockets: %(sockets)s, cores: %(cores)s, threads:
%(threads)s."),
"KCHVMHDEV0001E": _("VM %(vmid)s does not contain directly
assigned host device %(dev_name)s."),
"KCHVMHDEV0002E": _("The host device %(dev_name)s is not allowed
to directly assign to VM."),
diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
index d700c08..7c0a512 100644
--- a/src/kimchi/model/vms.py
+++ b/src/kimchi/model/vms.py
@@ -82,6 +82,8 @@ XPATH_DOMAIN_DEV_CPU_ID =
'/domain/devices/spapr-cpu-socket/@id'
XPATH_NUMA_CELL = './cpu/numa/cell'
+XPATH_TOPOLOGY = './cpu/topology'
+
# key: VM name; value: lock object
vm_locks = {}
@@ -809,6 +811,28 @@ class VMModel(object):
cpus = params['cpus']
if DOM_STATE_MAP[dom.info()[0]] == 'shutoff':
+
+ # user cannot change vcpu if topology is defined. In
this case
+ # vcpu must always be sockets * cores * threads.
+ xml = dom.XMLDesc(0)
+ sockets = xpath_get_text(xml, XPATH_TOPOLOGY + '/@sockets')
+ cores = xpath_get_text(xml, XPATH_TOPOLOGY + '/@cores')
+ threads = xpath_get_text(xml, XPATH_TOPOLOGY + '/@threads')
+ current_vcpu =
dom.vcpusFlags(libvirt.VIR_DOMAIN_VCPU_MAXIMUM)
+
+ if sockets and cores and threads:
+ if current_vcpu != cpus:
+ raise InvalidOperation('KCHVM0053E',
+ {'vm': dom.name(),
+ 'sockets': sockets[0],
+ 'cores': cores[0],
+ 'threads': threads[0]})
+
+ # do not need to update vcpu if the value edit did not
+ # change
+ else:
+ return
+
try:
# set maximum VCPU count
max_vcpus = self.conn.get().getMaxVcpus('kvm')
--
1.9.1
2
1
*IMPORTANT*: This patch depends on cpu hotplug support.
This patchset addresses two issues regarding vcpu:
1 - users cannot update the number of cpus when topology is defined. In
such case, vcpu must always be sockets * cores * threads. If a VM has a
topology defined and we try to simply change vcpu without taking care of
that topology libvirt will complain.
NOTE: Using Kimchi UI, we can define the topology only when creating a
template, it means that thoses values cannot be updated because there is
no interface to do that.
2 - the maximum vcpu returned by libvirt is wrong. In Power it returns
1024 however the VM won't even boot with that value. The right maximum
vcpu must based on host values and that is retrieved using ppc64_cpu
code.
Jose Ricardo Ziviani (2):
Forbid user to edit CPU value if topology is defined
Use ppc64_cpu values to retrieve max vcpu value
src/kimchi/i18n.py | 1 +
src/kimchi/model/vms.py | 29 ++++++++++++++++++++++++++++-
2 files changed, 29 insertions(+), 1 deletion(-)
--
1.9.1
1
0
Hi team,
I noticed that the new-ui design pattern for typography specifies Helvetica Neue family in four different styles. This font family is shipped with the latest versions of Mac OS X and iOS but it is not available for free on Windows and Linux distributions.
I believe this might conflict with Kimchi license. Even if we buy or rent a webfont license we can't distribute the TTF, EOT, WOFF and SVG files in our repositories. I think that we can't even use a webfont license in this case (pointing to a remote location or service like Adobe Typekit or MyFonts) because most font-licensing services are charging based on pre-paid pageviews.
Usually for web apps, mobile web apps and cloud based services we have to buy a server license to store the webfont files within our servers, but since Kimchi is an open-source project that anyone can check out and run, every kimchi instance would have to buy their own font license.
We can set Helvetica as the default font-family in the CSS and if the user doesn't have this font installed the browser will load the next available font (Arial or any other Sans-Serif) but since each font has different sizes, some elements may not fit in the screen exactly like they were seen in the mockups. Also, the UI specs recommends Helvetica Neue in 5 different styles (Light, Roman, Regular, Medium and Bold), most system fonts only have 3. We don't have something like "Arial Light" for instance.
My suggestion is that we replace Helvetica Neue for Open Sans because it covers all the style specifications and it is licensed under Apache 2.0. Any thoughts?
Thanks,
Samuel Guimarães
4
12
[PATCH] Add volume to storage pool label not formatted properly in some languages
by Socorro Stoppler 14 Sep '15
by Socorro Stoppler 14 Sep '15
14 Sep '15
From: Socorro Stoppler <socorrob(a)us.ibm.com>
Signed-off-by: Socorro Stoppler <socorrob(a)us.ibm.com>
---
ui/css/theme-default/storagepool-add-volume.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/css/theme-default/storagepool-add-volume.css b/ui/css/theme-default/storagepool-add-volume.css
index 6e8a551..bbe7276 100644
--- a/ui/css/theme-default/storagepool-add-volume.css
+++ b/ui/css/theme-default/storagepool-add-volume.css
@@ -17,7 +17,7 @@
*/
#sp-add-volume-window {
height: 400px;
- width: 500px;
+ width: 625px;
}
#sp-add-volume-window .textbox-wrapper input[type="text"] {
--
1.9.1
2
1
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
ui/pages/help/ja_JP/guests.dita | 134 ++++++++++++++-----------------------
ui/pages/help/ja_JP/host.dita | 17 +++--
ui/pages/help/ja_JP/network.dita | 6 +-
ui/pages/help/ja_JP/storage.dita | 51 +++++++-------
ui/pages/help/ja_JP/templates.dita | 88 ++++++++++--------------
ui/pages/help/pt_BR/guests.dita | 115 ++++++++++++++-----------------
ui/pages/help/pt_BR/host.dita | 18 +++--
ui/pages/help/pt_BR/network.dita | 7 +-
ui/pages/help/pt_BR/storage.dita | 44 ++++++------
ui/pages/help/pt_BR/templates.dita | 89 +++++++++++-------------
10 files changed, 245 insertions(+), 324 deletions(-)
diff --git a/ui/pages/help/ja_JP/guests.dita b/ui/pages/help/ja_JP/guests.dita
index 5dade49..e05c516 100644
--- a/ui/pages/help/ja_JP/guests.dita
+++ b/ui/pages/help/ja_JP/guests.dita
@@ -9,27 +9,24 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="ja-jp">
<title>ゲスト</title>
-<shortdesc><wintitle>「ゲスト」</wintitle>ページには、定義済み KVM 仮想マシンがリストされます。
-</shortdesc>
+<shortdesc><wintitle>「ゲスト」</wintitle>ページには、サーバーの定義済みゲストがリストされます。</shortdesc>
<csbody>
<p>ゲストごとに、以下の情報が表示されます。
<dl><dlentry>
<dt>名前</dt>
-<dd>仮想マシンの名前。
-</dd>
+<dd>ゲストの名前。</dd>
</dlentry><dlentry>
<dt>CPU</dt>
-<dd>仮想マシンにおけるプロセッサー使用率。
+<dd>ゲストにおけるプロセッサー使用率。</dd>
+</dlentry><dlentry>
+<dt>ディスク入出力</dt>
+<dd>ディスク入出力の速度 (KB/秒)。
</dd>
</dlentry><dlentry>
<dt>ネットワーク入出力</dt>
<dd>ネットワーク入出力の速度 (KB/秒)。
</dd>
</dlentry><dlentry>
-<dt>ディスク入出力</dt>
-<dd>ディスク入出力の速度 (KB/秒)。
-</dd>
-</dlentry><dlentry>
<dt>ライブタイル</dt>
<dd>ゲスト・オペレーティング・システム・コンソールの状態、またはゲストがアクティブではない場合、<tm tmtype="tm" trademark="Linux">Linux</tm>
ディストリビューションを表すアイコン。
@@ -51,33 +48,33 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<ul>
<li>ゲスト・オペレーティング・システムのリモート・コンソールに接続するには、<uicontrol>「接続」</uicontrol>を選択します。
</li>
-<li>インストール・メディアのパスを変更するには、<uicontrol>「メディアの管理」</uicontrol>を選択します。
-</li>
+<li>既存のゲスト定義をコピーしてゲストを作成するには、<uicontrol>「クローン」</uicontrol>を選択します。</li>
<li>ゲストをリセットするには<uicontrol>「リセット」</uicontrol>を選択します。
-</li>
+始動しているゲストのみをリセットすることができます。</li>
<li>既存のゲストのプロパティーを編集するには、<uicontrol>「編集」</uicontrol>を選択します。
ゲストは、停止している間のみ編集できます。
</li>
+<li>ゲストを始動するには<uicontrol>「開始」</uicontrol>を選択します。</li>
+<li>ゲストの正常シャットダウンを行うには<uicontrol>「シャットダウン」</uicontrol>を選択します。</li>
+<li>ゲストの即時シャットダウンを強制するには<uicontrol>「電源オフ」</uicontrol>を選択します。</li>
<li>ゲストを削除するには<uicontrol>「削除」</uicontrol>を選択します。
</li>
-</ul>ゲスト (仮想マシン) を作成するには、ページの右上にある<uicontrol>正符号 (+)</uicontrol> アイコンをクリックしてください。
+</ul>ゲストを作成するには、ページ上の<uicontrol>正符号 (+)</uicontrol> アイコンをクリックしてください。
</p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="ja-jp">
-<title>仮想マシンの作成</title>
-<shortdesc>既存のテンプレートを編集することによって、仮想マシンを作成します。
-</shortdesc>
+<title>ゲストの作成</title>
+<shortdesc>既存のテンプレートを使用することによって、ゲストを作成します。</shortdesc>
<csbody>
<p> <ol>
-<li>仮想マシンを識別するための名前を入力します。
-</li>
-<li rev="rev1">テンプレートを選択します。
+<li>ゲストを識別するための名前を入力します。</li>
+<li>テンプレートを選択します。
<ul>
<li>テンプレートが存在する場合、表示されたテンプレートから選択してください。
</li>
<li>テンプレートが存在しない場合は、<uicontrol>「テンプレートの作成」</uicontrol>をクリックしてテンプレートを作成します。
</li>
-</ul></li>
+</ul>テンプレートの上にマウス・ポインターを置くことによって、そのテンプレートに関する情報を表示することができます。</li>
<li><uicontrol>「作成」</uicontrol>をクリックしてください。
</li>
</ol> </p>
@@ -85,88 +82,55 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="ja-jp">
<title>ゲストの編集</title>
-<shortdesc>既存の仮想マシンのプロパティーを編集します。
-一部のプロパティーは、ゲストが停止している間に限り編集可能です。
+<shortdesc>既存のゲストのプロパティーを編集します。一部のプロパティーは、ゲストが停止している間に限り編集可能です。
それとは別に、次のブートで有効になるプロパティーもあります。</shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
<csbody>
-<p>ゲストごとに、以下の情報が<wintitle>「一般」</wintitle>タブに表示されます。
-<dl>
-<dlentry>
-<dt>名前</dt>
-<dd>仮想マシンの名前。
-(ゲストが停止している間に限り編集可能)</dd>
-</dlentry><dlentry>
-<dt>CPU</dt>
-<dd>プロセッサーの数。
-(ゲストが稼働している場合、新規の数は次のブートで有効になる)</dd>
-</dlentry><dlentry>
-<dt>メモリー</dt>
-<dd>メモリーの量 (MB 単位)。
-(ゲストが稼働している場合、新規の量は次のブートで有効になる)</dd>
-</dlentry><dlentry>
-<dt>アイコン</dt>
-<dd>ゲストがアクティブではない場合に現在の状況 (ライブタイル) として表示される、Linux ディストリビューションを表すグラフィック・イメージ。
-</dd>
-</dlentry></dl></p>
-<p>次の情報が<wintitle>「ストレージ」</wintitle>タブに表示されます。
-</p>
<dl><dlentry>
+<dt>一般</dt>
+<dd>ゲストに関する情報を表示します。これには、ゲストに使用する名前、CPU、メモリー、およびアイコンが含まれます。停止しているゲストの名前を編集できます。CPU とメモリーの変更は、次回のブート後に反映されます。</dd>
+</dlentry><dlentry>
<dt>ストレージ</dt>
-<dd>インストールに使用される ISO ファイルのロケーションを表示します。
-</dd>
+<dd>選択したゲストのストレージのデバイスおよびパスを表示します。
+ゲスト用のストレージ・デバイスを追加、編集、および削除することができます。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>インターフェース</dt>
+<dd>ゲストのネットワーク情報を表示します。これには、名前、タイプ、および MAC アドレスが含まれます。ゲスト用のインターフェースを追加、編集、および削除することができます。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>許可</dt>
+<dd>ゲストに対して許可されているユーザーおよびグループを表示します。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>ホスト PCI デバイス</dt>
+<dd>ホスト上で使用可能なすべての PCI デバイスのリストを表示します。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>スナップショット</dt>
+<dd>ゲストのスナップショットを表示します。スナップショットの作成、編集、または削除が可能です。スナップショットを選択して「戻す」を選択することにより、ゲストは、スナップショット・データによって決定された過去のある時点にリストアされます。その時点より後に行われた変更はすべて破棄されます。</dd>
</dlentry></dl>
<p> 使用不可になっていないフィールドを編集できます。
フィールドを編集した後、<uicontrol>「保存」</uicontrol>をクリックしてください。
</p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="ja-jp">
-<title>ストレージ・デバイスの追加、交換、または切り離し</title>
-<shortdesc rev="rev1">仮想マシンにストレージ・デバイスを追加、デバイスを交換、または仮想マシンから切り離すことができます。
-サポートされているデバイスは CDROM だけです。
-ストレージ・デバイスを編集するには、以下の手順に従ってください。
-</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="ja-jp">
+<title>ゲストのクローン作成</title>
+<shortdesc>ゲストのクローンを作成して、ゲストのコピーを作成できます。</shortdesc>
<csbody>
+<p>ゲストのクローンを作成するには、以下のようにします。</p>
<ol>
-<li><wintitle>「ゲストの編集」</wintitle>ウィンドウで<wintitle>「ストレージ」</wintitle>を選択します。
-</li>
-<li>ストレージ・デバイスを交換するには、<uicontrol>オレンジのスラッシュ (/)</uicontrol> が付いた最初のアイコンをクリックしてください。
-ISO ファイル・パスを入力し、<uicontrol>「交換」</uicontrol>をクリックします。
-</li>
-<li>ストレージ・デバイスを切り離すには、<uicontrol>赤いダッシュ (-)</uicontrol> が付いた 2 番目のアイコンをクリックしてください。
-削除を確認して<uicontrol>「OK」</uicontrol>をクリックします。
-</li>
-<li>ストレージ・デバイスを追加するには、<uicontrol>緑の正符号 (+)</uicontrol> が付いた 3 番目のアイコンをクリックしてください。
-デバイス名と ISO ファイル・パスを入力し、<uicontrol>「接続」</uicontrol>をクリックします。
-</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="ja-jp">
-<title>VM の CDROM を交換</title>
-<shortdesc rev="rev1">インストールが完了した後で、仮想マシンの CDROM の内容を交換することができます。
-</shortdesc>
-<csbody>
-<ol>
-<li>仮想マシンが始動していることを確認します。
-</li>
-<li>「アクション」メニューから<uicontrol>「メディアの管理」</uicontrol>を選択します。
-</li>
-<li>CDROM にロードされている内容を変更するには、hdc フィールドの横にある<uicontrol>オレンジのスラッシュ (/)</uicontrol> アイコンをクリックします。
-</li>
-<li><wintitle>「VM の CDROM を交換」</wintitle>ページで、ISO ファイル・パスを入力します。
-これ以外の 2 つのフィールドは読み取り専用です。
-</li>
-<li><uicontrol>「交換」</uicontrol>をクリックしてください。
-</li>
+<li>ゲストの「アクション」メニューから<uicontrol>「クローン」</uicontrol>を選択します。</li>
+<li>警告を受け入れます。<note>ターゲット・ゲストが SCSI ボリュームまたは iSCSI ボリュームを使用している場合、あるいはターゲット・プールに十分なスペースがない場合、クローンはデフォルトのストレージ・プールに作成されます。</note></li>
</ol>
+<p>ゲストは、<uicontrol>「クローン作成中...」</uicontrol>のラベルが付いてリストに表示されます。処理が完了すると、クローンが作成されたゲストを使用できます。</p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ja_JP/host.dita b/ui/pages/help/ja_JP/host.dita
index 3a0141c..2b9c765 100644
--- a/ui/pages/help/ja_JP/host.dita
+++ b/ui/pages/help/ja_JP/host.dita
@@ -22,15 +22,14 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</li>
</ul></p>
<p>ホストに関する情報を表示するには、以下の選択項目をクリックしてください。
-<dl>
-<dlentry>
+</p>
+<dl><dlentry>
<dt>基本情報</dt>
-<dd>このセクションには、ホスト・オペレーティング・システムのディストリビューション、バージョン、およびコード名、さらにプロセッサー・タイプとメモリーの量 (GB 単位) が表示されます。
+<dd>このセクションには、ホスト・オペレーティング・システムのディストリビューション、バージョン、およびコード名、さらにプロセッサー・タイプ、オンライン CPU の数、およびメモリーの量 (GB 単位)が表示されます。
</dd>
</dlentry><dlentry>
<dt>システム統計情報</dt>
<dd>このセクションには、ホストの CPU、メモリー、ディスク入出力、およびネットワーク入出力の統計情報を表すグラフが表示されます。
-ホスト・タブを閉じたときにデータの収集を続行するには、<uicontrol>「このページを閉じた後、データを収集する」</uicontrol>を選択してください。
</dd>
</dlentry><dlentry>
<dt>ソフトウェア更新</dt>
@@ -48,7 +47,7 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
システムが Ubuntu または Debian であれば、<filepath>deb</filepath> リポジトリーを追加してください。
<p>yum リポジトリーを操作している場合、そのリポジトリーに入っているパッケージが壊れていないことを確認するため、GPG チェックを追加できます。
リポジトリーを選択し、<uicontrol>「編集」</uicontrol>をクリックしてください。
-<uicontrol>「はい」</uicontrol>を選択して GPG チェックを有効にしてから、そのリポジトリーの GPG 鍵ファイルの URL を入力してください。
+<uicontrol>「はい」</uicontrol>を選択して<uicontrol>「GPG チェック」</uicontrol>を有効にしてから、そのリポジトリーの GPG 鍵ファイルの URL を入力してください。
</p></dd>
</dlentry><dlentry>
<dt>デバッグ・レポート</dt>
@@ -59,12 +58,12 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
このコマンドは、構成および診断情報 (稼働中のカーネルのバージョン、ロードされているモジュール、システムおよびサービス構成ファイルなど) が入った .tar ファイルを生成します。
このコマンドはまた、外部プログラムを実行して情報をさらに収集し、その出力を結果のアーカイブに保管します。
</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 227 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 1 -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ja_JP/network.dita b/ui/pages/help/ja_JP/network.dita
index 5d9ce05..5a175af 100644
--- a/ui/pages/help/ja_JP/network.dita
+++ b/ui/pages/help/ja_JP/network.dita
@@ -40,7 +40,7 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</li>
<li>接続情報を削除するには<uicontrol>「削除」</uicontrol>を選択します。
</li>
-</ul>ネットワークを作成するには、表示の右上にある<uicontrol>正符号 (+)</uicontrol> アイコンをクリックしてください。
+</ul>ネットワークを作成するには、<uicontrol>正符号 (+)</uicontrol> アイコンをクリックしてください。
</p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="ja-jp">
@@ -78,6 +78,6 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ja_JP/storage.dita b/ui/pages/help/ja_JP/storage.dita
index f975e7a..7730862 100644
--- a/ui/pages/help/ja_JP/storage.dita
+++ b/ui/pages/help/ja_JP/storage.dita
@@ -17,8 +17,10 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dl>
<dlentry>
<dt>名前</dt>
-<dd>ストレージ・プールの名前および使用率。
-</dd>
+<dd>ストレージ・プールの名前。</dd>
+</dlentry><dlentry>
+<dt>使用率(%)</dt>
+<dd>使用されているストレージ・プールのパーセンテージ。</dd>
</dlentry><dlentry>
<dt>状態</dt>
<dd>ストレージ・プールの状態で、アクティブ (緑) または非アクティブ (赤) です。
@@ -42,32 +44,16 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry></dl></p>
<p>ストレージ・プールごとに、以下のアクションを選択できます。
<ul>
-<li>使用できるようストレージ・プールをアクティブにするには、<uicontrol>「アクティブにする」</uicontrol>を選択します。
+<li>使用できるようストレージ・プールをアクティブにするには、<uicontrol>「アクティブ化」</uicontrol>を選択します。
</li>
-<li>アクティブ・ストレージ・プールを非アクティブにするには、<uicontrol>「非アクティブにする」</uicontrol>を選択します。
+<li>アクティブ・ストレージ・プールを非アクティブにするには、<uicontrol>「非アクティブ化」</uicontrol>を選択します。
</li>
-<li>非アクティブ・ストレージ・プールを削除するには、<uicontrol>「定義を解除する」</uicontrol>を選択します。
+<li>アクティブ・ストレージ・プールにボリュームをさらに追加するには、<uicontrol>「ボリュームの追加」</uicontrol>を選択します。</li>
+<li>非アクティブ・ストレージ・プールを削除するには、<uicontrol>「定義の解除」</uicontrol>を選択します。
</li>
</ul></p>
<p>ストレージ・プールのストレージ・ボリューム詳細を表示するには、ストレージ・プール行の右側にある矢印をクリックしてください。
-詳細は以下のとおりです。
-<dl><dlentry>
-<dt>タイプ</dt>
-<dd>ボリュームのタイプで、例えば <uicontrol>file</uicontrol> です。
-</dd>
-</dlentry><dlentry>
-<dt>フォーマット</dt>
-<dd>タイプによって異なるフォーマット。
-</dd>
-</dlentry><dlentry>
-<dt>容量</dt>
-<dd>ストレージ・ボリュームのサイズ。
-</dd>
-</dlentry><dlentry>
-<dt>割り振り</dt>
-<dd>既にストレージ・プールに割り当てられているスペースの量。
-</dd>
-</dlentry></dl>ストレージ・プールを定義するには、表示の右上にある<uicontrol>正符号 (+)</uicontrol> アイコンをクリックしてください。
+ストレージ・プールを定義するには、<uicontrol>正符号 (+)</uicontrol> アイコンをクリックしてください。
</p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="ja-jp">
@@ -107,14 +93,29 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
使用する SCSI アダプターを選択してください。
</dd>
</dlentry></dl></li>
+<li>ストレージ・プールのストレージ・パスを指定します。ストレージ・パスは、プールのマップ先である、ローカル・ファイルシステム内のロケーションです。
+パスは固有でなければなりません。プールの作成時にそのディレクトリーが存在しない場合は、ディレクトリーが自動的に作成されます。</li>
<li><uicontrol>「作成」</uicontrol>をクリックしてください。
</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="ja-jp">
+<title>ボリュームの追加</title>
+<shortdesc>ボリュームをストレージ・プールに追加します。</shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>リモート URL からフェッチ</dt>
+<dd>ボリュームのダウンロード元のロケーションを指定します。例えば、<filepath>https://my-server/fedora22.img</filepath> を指定します。</dd>
+</dlentry><dlentry>
+<dt>ファイルのアップロード</dt>
+<dd>ローカル・システム上のロケーションを指定します。</dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ja_JP/templates.dita b/ui/pages/help/ja_JP/templates.dita
index 24dc2ab..53158d2 100644
--- a/ui/pages/help/ja_JP/templates.dita
+++ b/ui/pages/help/ja_JP/templates.dita
@@ -13,8 +13,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</shortdesc>
<csbody>
<p>テンプレートごとに、以下の情報が表示されます。
-<dl>
-<dlentry>
+</p>
+<dl><dlentry>
<dt>OS</dt>
<dd>オペレーティング・システムまたはディストリビューションの名前。
</dd>
@@ -30,14 +30,18 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dt>メモリー</dt>
<dd>割り当てられるランダム・アクセス・メモリーの量 (MB 単位)。
</dd>
-</dlentry></dl></p>
+</dlentry></dl>
<p>テンプレートごとに、以下のアクションを選択できます。
+</p>
<ul>
<li>テンプレートを編集するには<uicontrol>「編集」</uicontrol>を選択します。
</li>
+<li>テンプレートをコピーするには<uicontrol>「クローン」</uicontrol>を選択します。
+</li>
<li>テンプレートを削除するには<uicontrol>「削除」</uicontrol>を選択します。
</li>
-</ul>テンプレートを追加するには、表示の右上にある<uicontrol>正符号 (+)</uicontrol> アイコンをクリックしてください。
+</ul>
+<p>テンプレートを追加するには、<uicontrol>正符号 (+)</uicontrol> アイコンをクリックしてください。
</p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="ja-jp">
@@ -46,47 +50,23 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</shortdesc>
<csbody>
<p>テンプレートごとに、以下の情報が表示されます。
-<dl>
-<dlentry>
-<dt>名前</dt>
-<dd>テンプレートの名前。
-</dd>
-</dlentry><dlentry>
-<dt>ベンダー</dt>
-<dd>テンプレートが使用するよう構成されているオペレーティング・システムまたはディストリビューションを作成した会社の名前。
-</dd>
-</dlentry><dlentry>
-<dt>バージョン</dt>
-<dd>テンプレートが使用するよう構成されているオペレーティング・システムまたはディストリビューションのバージョン。
-</dd>
-</dlentry><dlentry>
-<dt>CPU 数</dt>
-<dd>テンプレートに定義されているプロセッサーの数。
-</dd>
-</dlentry><dlentry>
-<dt>メモリー</dt>
-<dd>仮想マシンに割り当てられるメモリーの量 (MB 単位)。
-</dd>
-</dlentry><dlentry>
-<dt>ディスク</dt>
-<dd>ディスク・サイズ (GB 単位)。
-</dd>
-</dlentry><dlentry>
-<dt>CDROM</dt>
-<dd>KVM ゲストをインストールするために使用される ISO ファイルのロケーションのファイル・パス。
-</dd>
+</p>
+<dl><dlentry>
+<dt>一般</dt>
+<dd>名前、ベンダーのディストリビューション、バージョン、メモリー、ISO ファイルのファイル・パス、およびグラフィックスの設定を表示します。</dd>
</dlentry><dlentry>
-<dt>ストレージ・プール</dt>
-<dd>特定のストレージ・プール、またはデフォルトのストレージ・プール。
-</dd>
+<dt>ストレージ</dt>
+<dd>テンプレートのストレージ・プール情報を指定します。</dd>
</dlentry><dlentry>
-<dt> ネットワーク</dt>
-<dd>KVM ゲストが使用できるデフォルトのネットワーク・インターフェース。
+<dt>インターフェース</dt>
+<dd>KVM ゲストが使用できるデフォルトのネットワーク・インターフェースを表示します。
複数のネットワークを選択することができます。
</dd>
-</dlentry></dl> 使用不可になっていないフィールドを編集できます。
-フィールドを編集した後、<uicontrol>「保存」</uicontrol>をクリックしてください。
-</p>
+</dlentry><dlentry>
+<dt>プロセッサー</dt>
+<dd><uicontrol>「CPU 数」</uicontrol>フィールドで、テンプレートに定義されるプロセッサーの数を指定します。</dd>
+<dd>これを選択して、ゲストごとに CPU トポロジーを手動で設定します。</dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
@@ -95,24 +75,27 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
今後のディスカバリーのために、独自の ISO イメージを「ISO」ストレージ・プールに追加できます。</shortdesc>
<csbody>
<p>ソース・メディアのロケーションを以下のオプションから選択してください。
-<dl>
-<dlentry>
+</p>
+<dl><dlentry>
<dt>ローカル ISO イメージ</dt>
<dd>これを選択して、システムで使用可能なインストール ISO イメージを、ストレージ・プールでスキャンします。
</dd>
</dlentry><dlentry>
+<dt>ローカル・イメージ・ファイル</dt>
+<dd>これを選択して、ローカル・イメージ・ファイルのパスを指定します。</dd>
+</dlentry><dlentry>
<dt>リモート ISO イメージ</dt>
<dd>これを選択して、インストール ISO イメージのリモート・ロケーションを指定します。
</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>テンプレートの追加 - ローカル ISO イメージ</title>
-<shortdesc>テンプレートをローカル ISO イメージから追加します。
-</shortdesc>
+<title>テンプレートの追加 - ISO イメージ</title>
+<shortdesc>テンプレートを ISO イメージから追加します。</shortdesc>
<csbody>
-<p>システムで使用可能な ISO イメージが表示されます。
+<p>システム上で使用可能な ISO イメージがリモート側で表示されます。
+</p>
<dl><dlentry>
<dt>OS</dt>
<dd>オペレーティング・システムまたはディストリビューションの名前。
@@ -125,8 +108,9 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dt>サイズ</dt>
<dd>ISO イメージのサイズ。
</dd>
-</dlentry></dl></p>
+</dlentry></dl>
<p>テンプレートを ISO イメージから作成するには、以下のオプションを選択してください。
+</p>
<ul>
<li>テンプレートを作成する元になる ISO イメージを選択して、<uicontrol>「選択した ISO からテンプレートを作成」</uicontrol>をクリックします。
</li>
@@ -139,12 +123,12 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li>それ以上の ISO イメージを検索するには、<uicontrol>「ISO をさらに検索」</uicontrol>をクリックします。
</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/pt_BR/guests.dita b/ui/pages/help/pt_BR/guests.dita
index ac58d5c..9967178 100644
--- a/ui/pages/help/pt_BR/guests.dita
+++ b/ui/pages/help/pt_BR/guests.dita
@@ -9,22 +9,21 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="pt-br">
<title>Máquinas Virtuais</title>
-<shortdesc>A página <wintitle>Máquinas Virtuais</wintitle> lista as máquinas virtuais
-KVM definidas.</shortdesc>
+<shortdesc>A página <wintitle>Convidados</wintitle> lista os convidados definidos para o seu servidor.</shortdesc>
<csbody>
<p>Para cada convidado, as informações a seguir são exibidas:<dl><dlentry>
<dt>Nome</dt>
-<dd>Nome da máquina virtual.</dd>
+<dd>Nome do convidado.</dd>
</dlentry><dlentry>
<dt>CPU</dt>
-<dd>Porcentagem de utilização do processador na máquina virtual.</dd>
-</dlentry><dlentry>
-<dt>E/S de rede</dt>
-<dd>Taxa de transmissão de entrada/saída de rede em KB por segundo.</dd>
+<dd>Porcentagem de utilização do processador no convidado.</dd>
</dlentry><dlentry>
<dt>E/S de disco</dt>
<dd>Taxa de transmissão de entrada/saída de disco em KB por segundo.</dd>
</dlentry><dlentry>
+<dt>E/S de rede</dt>
+<dd>Taxa de transmissão de entrada/saída de rede em KB por segundo.</dd>
+</dlentry><dlentry>
<dt>Livetile</dt>
<dd>Estado do console do sistema operacional guest ou um ícone que representa
a distribuição <tm tmtype="tm" trademark="Linux">Linux</tm> se o
@@ -42,96 +41,80 @@ a energia está desligada; se o ícone estiver verde, a energia está ligada.</d
<p>As ações a seguir podem ser selecionadas para cada convidado:<ul>
<li>Selecione <uicontrol>Conectar</uicontrol> para conectar-se ao console
remoto para o sistema operacional guest.</li>
-<li>Selecione <uicontrol>Gerenciar mídia</uicontrol> para alterar o caminho
-para a mídia de instalação.</li>
-<li>Selecione <uicontrol>Reiniciar</uicontrol> para Reiniciar o convidado.</li>
+<li>Selecione <uicontrol>Clonar</uicontrol> para copiar uma definição de convidado existente para criar um convidado.</li>
+<li>Selecione <uicontrol>Reiniciar</uicontrol> para Reiniciar o convidado. Somente é possível reconfigurar um convidado que esteja iniciado.</li>
<li>Selecione <uicontrol>Editar</uicontrol> para editar as propriedades de um
convidado existente. Os Máquinas Virtuais podem ser editados somente quando interrompidos.</li>
+<li>Selecione <uicontrol>Iniciar</uicontrol> para iniciar um convidado.</li>
+<li>Selecione <uicontrol>Encerrar</uicontrol> para encerrar um convidado corretamente.</li>
+<li>Selecione <uicontrol>Desligar</uicontrol> para forçar um encerramento imediato do convidado.</li>
<li>Selecione <uicontrol>Excluir</uicontrol> para excluir o convidado.</li>
-</ul>Para criar um convidado, ou máquina virtual, clique no ícone <uicontrol>mais
-(+)</uicontrol> na parte superior direita da página.</p>
+</ul>Para criar um convidado, clique no ícone de <uicontrol>mais (+)</uicontrol> na página.</p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="en-us">
-<title>Criar máquina virtual</title>
-<shortdesc>Crie uma máquina virtual usando um modelo existente.</shortdesc>
+<title>Criar um convidado</title>
+<shortdesc>Crie um convidado usando um modelo existente.</shortdesc>
<csbody>
<p> <ol>
-<li>Digite o nome a ser usado para identificar a máquina virtual.</li>
-<li rev="rev1">Selecione um modelo. <ul>
+<li>Digite o nome a ser usado para identificar o convidado.</li>
+<li>Selecione um modelo. <ul>
<li>Se existirem modelos, selecione a partir dos modelos exibidos.</li>
<li>Se não existir nenhum modelo, clique em <uicontrol>Criar um modelo</uicontrol> para
criar um modelo.</li>
-</ul></li>
+</ul>É possível visualizar informações sobre um modelo passando o mouse sobre ele.</li>
<li>Clique em <uicontrol>Criar</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="en-us">
<title>Editar convidado</title>
-<shortdesc>Edite as propriedades de uma máquina virtual existente. Algumas propriedades podem ser editadas enquanto o convidado está interrompido. Outras entrarão em vigor na próxima inicialização.</shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
+<shortdesc>Edite as propriedades de um convidado existente. Algumas propriedades podem ser editadas enquanto a máquina virtual está interrompida. Outras entrarão em vigor na próxima inicialização.</shortdesc>
<csbody>
-<p>Para cada convidado, as informações a seguir são exibidas na guia <wintitle>Geral</wintitle>:<dl>
-<dlentry>
-<dt>Nome</dt>
-<dd>Nome da máquina virtual. (somente pode ser editado enquanto o convidado está interrompido)</dd>
-</dlentry><dlentry>
-<dt>CPUs</dt>
-<dd>Número de processadores. (se o convidado estiver em execução, uma nova quantia entrará em vigor na próxima inicialização)</dd>
-</dlentry><dlentry>
-<dt>Memória</dt>
-<dd>Quantia de memória em MB. (se o convidado estiver em execução, uma nova quantia entrará em vigor na próxima inicialização)</dd>
-</dlentry><dlentry>
-<dt>Ícone</dt>
-<dd>Imagem gráfica representando a distribuição Linux a ser exibida
-no lugar do status atual (Livetile) quando o convidado não está ativo.</dd>
-</dlentry></dl></p>
-<p>As informações a seguir são exibidas na guia <wintitle>Armazenamento</wintitle>.</p>
<dl><dlentry>
+<dt>Geral</dt>
+<dd>Exibe informações sobre o seu convidado, incluindo nome, CPUs, memória e ícone para usar para o seu convidado. É possível editar o nome de um convidado interrompido. A mudança de CPUs e memória entra em vigor após a próxima inicialização.</dd>
+</dlentry><dlentry>
<dt>Armazenamento</dt>
-<dd>Exibe o local do arquivo ISO usado para instalação.</dd>
+<dd>Exibe o dispositivo e o caminho para armazenamento para o convidado selecionado.
+É possível incluir, editar e remover dispositivos de armazenamento para o seu convidado.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Interface</dt>
+<dd>Exibe informações de rede para o convidado, incluindo nome, tipo e endereço MAC. É possível incluir, editar e remover interfaces para o seu convidado.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Permissão</dt>
+<dd>Exibe os usuários e grupos que estão autorizados para o convidado. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Dispositivo PCI do host</dt>
+<dd>Exibe uma lista de todos os dispositivos PCI disponíveis no host. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Captura instantânea</dt>
+<dd>Exibe capturas instantâneas do convidado.É possível criar, editar ou excluir uma captura instantânea. Ao selecionar uma captura instantânea e selecionar reverter, o convidado é restaurado para um ponto no passado, determinado pelos dados da captura instantânea e descarta quaisquer mudanças feitas além desse momento.</dd>
</dlentry></dl>
<p> Os campos que não estão desativados podem ser editados. Depois de editar um campo,
clique em <uicontrol>Salvar</uicontrol>. </p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="en-us">
-<title>Incluir, substituir ou remover um dispositivo de armazenamento</title>
-<shortdesc rev="rev1">É possível incluir, substituir ou remover um dispositivo de armazenamento
-para sua máquina virtual. O único dispositivo suportado é CD-ROM. Para editar
-seus dispositivos de armazenamento, siga estas etapas:</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="en-us">
+<title>Clonando um convidado</title>
+<shortdesc>A clonagem de convidados permite criar uma cópia de um convidado.</shortdesc>
<csbody>
+<p>Para clonar um convidado:</p>
<ol>
-<li>Na janela <wintitle>Editar convidado</wintitle>, selecione <wintitle>Armazenamento</wintitle>.</li>
-<li>Para substituir um dispositivo de armazenamento, clique no primeiro ícone com a <uicontrol>barra
-laranja (/)</uicontrol>. Insira o caminho do arquivo ISO e clique em <uicontrol>Substituir</uicontrol>.</li>
-<li>Para remover um dispositivo de armazenamento, clique no segundo ícone com o <uicontrol>traço
-vermelho (-)</uicontrol>. Confirme a exclusão e clique em <uicontrol>OK</uicontrol>.</li>
-<li>Para incluir um dispositivo de armazenamento, clique no terceiro ícone com o <uicontrol>sinal de
-mais (+)</uicontrol> verde. Insira um nome de dispositivo e um caminho de arquivo ISO e clique em <uicontrol>Conectar</uicontrol>.</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="en-us">
-<title>Substituir um CD-ROM da VM</title>
-<shortdesc rev="rev1">É possível substituir o conteúdo do CD-ROM para
-uma máquina virtual após a instalação ser concluída.</shortdesc>
-<csbody>
-<ol>
-<li>Assegure-se de que a máquina virtual esteja iniciada.</li>
-<li>No menu Ações, selecione <uicontrol>Gerenciar mídia</uicontrol>.</li>
-<li>Para alterar o que está atualmente carregado no CD-ROM, clique no ícone <uicontrol>barra
-laranja (/)</uicontrol> próximo ao campo hdc.</li>
-<li>Na página <wintitle>Substituir um CD-ROM da VM</wintitle>, insira
-o caminho do arquivo ISO. Os outros dois campos são somente leitura.</li>
-<li>Clique em <uicontrol>Substituir</uicontrol>.</li>
+<li>Selecione <uicontrol>Clonar</uicontrol> no menu Ação de um convidado.</li>
+<li>Aceite o aviso. <note>Quando um convidado de destino está usando volumes SCSI ou iSCSI ou se o conjunto de destino não tiver espaço suficiente, o clone será criado em um conjunto de armazenamentos padrão. </note></li>
</ol>
+<p>Um convidado aparece na sua lista com o rótulo <uicontrol>Clonando...</uicontrol> Quando o processo for concluído, o convidado clonado estará disponível para uso.</p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/pt_BR/host.dita b/ui/pages/help/pt_BR/host.dita
index 88f7eb2..a9814e8 100644
--- a/ui/pages/help/pt_BR/host.dita
+++ b/ui/pages/help/pt_BR/host.dita
@@ -20,18 +20,16 @@ host.</li>
<li>Selecione <uicontrol>Conectar</uicontrol> para abrir uma conexão VNC
para o sistema host, se ele já não estiver conectado.</li>
</ul></p>
-<p>Clique nas seções a seguir para exibir informações sobre o host:<dl>
-<dlentry>
+<p>Clique nas seções a seguir para exibir informações sobre o host:</p>
+<dl><dlentry>
<dt>Informações básicas</dt>
<dd>Esta seção exibe a distribuição do sistema operacional do host,
-a versão e o nome do código, bem como o tipo de processador e quantia de
+a versão e o nome do código, bem como o tipo de processador, o número de CPUs on-line e a quantia de
memória em GB.</dd>
</dlentry><dlentry>
<dt>Estatísticas do sistema</dt>
<dd>Esta seção exibe gráficos para mostrar estatísticas para CPU, memória,
-E/S de disco e E/S de rede para o host. Selecione <uicontrol>Coletando
-dados depois de sair desta página</uicontrol> para continuar a coletar dados
-quando a guia do host estiver fora de visualização.</dd>
+E/S de disco e E/S de rede para o host. </dd>
</dlentry><dlentry>
<dt>Atualizações de software</dt>
<dd>Esta seção exibe informações de todos os pacotes que
@@ -49,7 +47,7 @@ Se o seu sistema for Ubuntu ou Debian, inclua repositórios <filepath>deb</filep
você estiver trabalhando com repositórios yum, será possível incluir uma verificação de GPG para
verificar se um pacote desse repositório não foi corrompido.
Selecione um repositório e, em seguida, <uicontrol>Editar</uicontrol>. Selecione <uicontrol>Sim</uicontrol> para
-ativar a Verificação de GPG e, em seguida, insira uma URL no arquivo-chave de GPG para o
+ativar a <uicontrol>Verificação de GPG</uicontrol> e, então, insira uma URL no arquivo-chave de GPG para o
repositório.</p></dd>
</dlentry><dlentry>
<dt>Relatórios de depuração</dt>
@@ -63,12 +61,12 @@ informações de configuração e de diagnóstico, como versão do kernel
em execução, módulos carregados e arquivos de configuração de sistema e de serviço.
O comando também executa programas externos para coletar informações adicionais
e armazena essa saída no archive resultante.</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/pt_BR/network.dita b/ui/pages/help/pt_BR/network.dita
index 1585298..a22ac77 100644
--- a/ui/pages/help/pt_BR/network.dita
+++ b/ui/pages/help/pt_BR/network.dita
@@ -35,8 +35,7 @@ de rede.</li>
<li>Selecione <uicontrol>Parar</uicontrol> para terminar a conexão de rede.</li>
<li>Selecione <uicontrol>Excluir</uicontrol> para excluir as informações
de conexão.</li>
-</ul>Para criar uma rede, clique no ícone <uicontrol>mais (+)</uicontrol> na
-parte superior direita da exibição.</p>
+</ul>Para criar uma rede, clique no ícone de <uicontrol>mais (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="en-us">
<title>Criar uma rede</title>
@@ -67,6 +66,6 @@ de destino e de VLAN.</dd>
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/pt_BR/storage.dita b/ui/pages/help/pt_BR/storage.dita
index 03c8cab..103e2d5 100644
--- a/ui/pages/help/pt_BR/storage.dita
+++ b/ui/pages/help/pt_BR/storage.dita
@@ -9,13 +9,15 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhstor" xml:lang="pt-br">
<title>Armazenamento</title>
-<shortdesc>A página <wintitle>Armazenamento</wintitle> lista os conjuntos de armazenamentos disponíveis, inclusive o conjunto de armazenamentos 'padrão' e 'ISO' integrado.
-Se desejar usar seu próprio ISO, inclua-o em seu caminho do conjunto de armazenamentos 'ISO'.</shortdesc>
+<shortdesc>A página <wintitle>Armazenamento</wintitle> lista os conjuntos de armazenamentos disponíveis, inclusive o conjunto de armazenamentos 'padrão' e 'ISO' integrado. Se desejar usar seu próprio ISO, inclua-o em seu caminho do conjunto de armazenamentos 'ISO'.</shortdesc>
<csbody>
<p>Para cada storage pool, as informações a seguir são exibidas:<dl>
<dlentry>
<dt>Nome</dt>
-<dd>Nome do storage pool e porcentagem usada.</dd>
+<dd>Nome do conjunto de armazenamentos.</dd>
+</dlentry><dlentry>
+<dt>% Usado</dt>
+<dd>Porcentagem do conjunto de armazenamentos que está sendo usada.</dd>
</dlentry><dlentry>
<dt>Estado</dt>
<dd>Estado do storage pool, ativo (verde) ou inativo (vermelho). </dd>
@@ -37,25 +39,12 @@ Se desejar usar seu próprio ISO, inclua-o em seu caminho do conjunto de armazen
para que ele possa ser usado.</li>
<li>Selecione <uicontrol>Desativar</uicontrol> para desativar um storage pool
ativo.</li>
+<li>Selecione <uicontrol>Incluir volume</uicontrol> para incluir mais volume em um conjunto de armazenamentos ativo.</li>
<li>Selecione <uicontrol>Indefinir</uicontrol> para remover um storage pool
inativo.</li>
</ul></p>
<p>Para exibir detalhes do volume de armazenamento para um storage pool, clique na
-seta no lado direito da linha do storage pool. Os detalhes incluem
-os seguintes:<dl><dlentry>
-<dt>Tipo</dt>
-<dd>O tipo de volume, por exemplo, <uicontrol>arquivo</uicontrol>.</dd>
-</dlentry><dlentry>
-<dt>Formato</dt>
-<dd>O formato, que varia dependendo do tipo.</dd>
-</dlentry><dlentry>
-<dt>Capacidade</dt>
-<dd>Tamanho do volume de armazenamento.</dd>
-</dlentry><dlentry>
-<dt>Alocação</dt>
-<dd>Quantia de espaço já alocado no storage pool.</dd>
-</dlentry></dl>Para definir um storage pool, clique no ícone <uicontrol>mais
-(+)</uicontrol> na parte superior direita da exibição.</p>
+seta no lado direito da linha do storage pool. Para definir um conjunto de armazenamentos, clique no ícone de <uicontrol>mais (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="en-us">
<title>Definir um storage pool</title>
@@ -90,13 +79,28 @@ o dispositivo em <uicontrol>Caminho do dispositivo</uicontrol>.</dd>
<dd>Especifica um conjunto com base em um Fibre Channel SCSI. Selecione qual
adaptador SCSI deve ser usado.</dd>
</dlentry></dl></li>
+<li>Especifique um caminho do armazenamento para o conjunto de armazenamentos. O caminho do armazenamento é o local no sistema de arquivos local para o qual o conjunto está mapeado.
+O caminho deve ser exclusivo. Se o diretório não existir quando o conjunto for criado, ele será criado para você.</li>
<li>Clique em <uicontrol>Criar</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="en-us">
+<title>Incluir volume</title>
+<shortdesc>Inclui volume em um conjunto de armazenamentos.</shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>Buscar a partir da URL remota</dt>
+<dd>Especifica um local do qual fazer o download do volume. Por exemplo: <filepath>https://my-server/fedora22.img</filepath>.</dd>
+</dlentry><dlentry>
+<dt>Fazer upload de um arquivo</dt>
+<dd>Especifica um local em seu sistema local. </dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/pt_BR/templates.dita b/ui/pages/help/pt_BR/templates.dita
index f3c6515..5431c72 100644
--- a/ui/pages/help/pt_BR/templates.dita
+++ b/ui/pages/help/pt_BR/templates.dita
@@ -12,8 +12,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<shortdesc>A página <wintitle>Modelos</wintitle> mostra os modelos de
máquina virtual definidos que podem ser usados para criar Máquinas Virtuais do KVM.</shortdesc>
<csbody>
-<p>Para cada modelo, as informações a seguir são exibidas:<dl>
-<dlentry>
+<p>Para cada modelo, as informações a seguir são exibidas:</p>
+<dl><dlentry>
<dt>S.O.</dt>
<dd>Nome do sistema operacional ou distribuição.</dd>
</dlentry><dlentry>
@@ -25,74 +25,62 @@ máquina virtual definidos que podem ser usados para criar Máquinas Virtuais do
</dlentry><dlentry>
<dt>Memória</dt>
<dd>Quantia de memória de acesso aleatório a ser alocada, em MB.</dd>
-</dlentry></dl></p>
-<p>As ações a seguir podem ser selecionadas para cada modelo:<ul>
+</dlentry></dl>
+<p>As ações a seguir podem ser selecionadas para cada modelo:</p>
+<ul>
<li>Selecione <uicontrol>Editar</uicontrol> para editar o modelo.</li>
+<li>Selecione <uicontrol>Clonar</uicontrol> para copiar um modelo.</li>
<li>Selecione <uicontrol>Excluir</uicontrol> para excluir o modelo.</li>
-</ul>Para incluir um modelo, clique no ícone <uicontrol>mais (+)</uicontrol> na
-parte superior direita da exibição.</p>
+</ul>
+<p>Para incluir um modelo, clique no ícone de <uicontrol>mais (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="en-us">
<title>Editar modelo</title>
<shortdesc>Edite um modelo existente.</shortdesc>
<csbody>
-<p>Para cada modelo, as informações a seguir são exibidas: <dl>
-<dlentry>
-<dt>Nome</dt>
-<dd>Nome do modelo.</dd>
+<p>Para cada modelo, as informações a seguir são exibidas: </p>
+<dl><dlentry>
+<dt>Geral</dt>
+<dd>Exibe o nome, distribuição do fornecedor, versão, memória, caminho do arquivo para arquivo ISO e preferências de gráfico.</dd>
</dlentry><dlentry>
-<dt>Fornecedor</dt>
-<dd>O nome da empresa que criou o sistema operacional ou a distribuição
-que o modelo está configurado para usar.</dd>
+<dt>Armazenamento</dt>
+<dd>Especifique as informações do conjunto de armazenamentos para o modelo.</dd>
</dlentry><dlentry>
-<dt>Versão</dt>
-<dd>A versão do sistema operacional ou distribuição que o modelo
-está configurado para usar.</dd>
-</dlentry><dlentry>
-<dt>Número de CPU</dt>
-<dd>Número de processadores que estão definidos para o modelo.</dd>
-</dlentry><dlentry>
-<dt>Memória</dt>
-<dd>Quantia de memória em MB a ser alocada para a máquina virtual.</dd>
-</dlentry><dlentry>
-<dt>Disco</dt>
-<dd>O tamanho do disco em GB.</dd>
-</dlentry><dlentry>
-<dt>CD-ROM</dt>
-<dd>O caminho do arquivo para o local do arquivo ISO usado para instalar o
-convidado do KVM.</dd>
-</dlentry><dlentry>
-<dt>storage pool</dt>
-<dd>storage pool específico ou storage pool padrão.</dd>
-</dlentry><dlentry>
-<dt>Rede</dt>
-<dd>As interfaces de rede padrão disponíveis para o convidado do KVM. É possível
+<dt>Interface</dt>
+<dd>Exibe as interfaces de rede padrão disponíveis ao convidado KVM.
+É possível
selecionar diversas redes.</dd>
-</dlentry></dl> Os campos que não estão desativados podem ser editados. Depois
-de editar um campo, clique em <uicontrol>Salvar</uicontrol>. </p>
+</dlentry><dlentry>
+<dt>Processador</dt>
+<dd>No campo <uicontrol>Número da CPU</uicontrol>, especifique o número de processadores que são definidos para o modelo.</dd>
+<dd>Selecione para Manualmente configurar a topologia da CPU para cada convidado.</dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>Incluir modelo</title>
-<shortdesc>Inclua um modelo a partir da mídia de origem.
-É possível incluir sua própria imagem ISO em seu conjunto de armazenamentos 'ISO' para a descoberta a seguir.</shortdesc>
+<shortdesc>Inclua um modelo a partir da mídia de origem. É possível incluir sua própria imagem ISO em seu conjunto de armazenamentos 'ISO' para a descoberta a seguir.</shortdesc>
<csbody>
-<p>Selecione o local da mídia de origem a partir das opções a seguir:<dl>
-<dlentry>
+<p>Selecione o local da mídia de origem a partir das opções a seguir:</p>
+<dl><dlentry>
<dt>Imagem ISO local</dt>
<dd>Selecione para varrer conjuntos de armazenamentos para imagens ISO de instalação disponíveis
no sistema.</dd>
</dlentry><dlentry>
+<dt>Arquivo da imagem local</dt>
+<dd>Selecione para especificar um caminho para o arquivo de imagem local.</dd>
+</dlentry><dlentry>
<dt>Imagem ISO remota</dt>
<dd>Selecione para especificar um local remoto para uma imagem ISO de instalação.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>Incluir modelo - imagem ISO local</title>
-<shortdesc>Inclua um modelo a partir de uma imagem ISO local.</shortdesc>
+<title>Incluir modelo - imagem ISO</title>
+<shortdesc>Inclua um modelo a partir de uma imagem ISO.</shortdesc>
<csbody>
-<p>As imagens ISO disponíveis no sistema são exibidas.<dl><dlentry>
+<p>As imagens ISO disponíveis no sistema são exibidas remotamente.</p>
+<dl><dlentry>
<dt>S.O.</dt>
<dd>Nome do sistema operacional ou distribuição.</dd>
</dlentry><dlentry>
@@ -101,9 +89,10 @@ no sistema.</dd>
</dlentry><dlentry>
<dt>Tamanho</dt>
<dd>Tamanho da imagem ISO.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
<p>Para criar um modelo a partir de uma imagem ISO, escolha a partir das opções
-a seguir:<ul>
+a seguir:</p>
+<ul>
<li>Selecione uma imagem ISO para criar um modelo a partir dela, em seguida, clique em <uicontrol>Criar
modelos a partir do ISO selecionado</uicontrol>.</li>
<li>Selecione <uicontrol>Todos</uicontrol> para criar um modelo a partir de cada
@@ -116,12 +105,12 @@ especificar um caminho para a imagem ISO.</li>
<li>Clique em <uicontrol>Procurar mais ISOs</uicontrol> para procurar mais
imagens ISO.</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
--
2.1.0
1
1
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
po/de_DE.po | 8 +++++++-
po/en_US.po | 8 +++++++-
po/es_ES.po | 8 +++++++-
po/fr_FR.po | 8 +++++++-
po/it_IT.po | 8 +++++++-
po/ja_JP.po | 8 +++++++-
po/kimchi.pot | 8 +++++++-
po/ko_KR.po | 8 +++++++-
po/pt_BR.po | 8 +++++++-
po/ru_RU.po | 8 +++++++-
po/zh_CN.po | 8 +++++++-
po/zh_TW.po | 8 +++++++-
ui/pages/guest-edit.html.tmpl | 2 +-
ui/pages/template-add.html.tmpl | 2 +-
14 files changed, 86 insertions(+), 14 deletions(-)
diff --git a/po/de_DE.po b/po/de_DE.po
index 64ce72a..fcdf63a 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1573,6 +1573,9 @@ msgstr "Abhängen"
msgid "Cancel"
msgstr "Abbrechen"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "zurücksetzen"
@@ -2331,6 +2334,9 @@ msgstr "Vorlagen aus ausgewähltem ISO erstellen"
msgid "I want to use a specific ISO file"
msgstr "Ich möchte eine bestimmte ISO-Datei verwenden"
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "Standardmäßige ferne ISOs werden geladen..."
diff --git a/po/en_US.po b/po/en_US.po
index 3539989..0e9e3a4 100644
--- a/po/en_US.po
+++ b/po/en_US.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1327,6 +1327,9 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr ""
@@ -2022,6 +2025,9 @@ msgstr ""
msgid "I want to use a specific ISO file"
msgstr ""
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr ""
diff --git a/po/es_ES.po b/po/es_ES.po
index 1e29291..4eb4336 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1571,6 +1571,9 @@ msgstr "Desconectar"
msgid "Cancel"
msgstr "Cancelar"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "revertir"
@@ -2329,6 +2332,9 @@ msgstr "Crear plantillas a partir de ISO seleccionadas"
msgid "I want to use a specific ISO file"
msgstr "Deseo utilizar un archivo ISO específico"
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "Cargando ISO remotas predeterminadas ..."
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 2a6642a..30bd5f3 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1575,6 +1575,9 @@ msgstr "Détacher"
msgid "Cancel"
msgstr "Annuler"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "rétablir"
@@ -2336,6 +2339,9 @@ msgstr "Créer des modèles à partir de l'image ISO sélectionnée"
msgid "I want to use a specific ISO file"
msgstr "Je souhaite utiliser un fichier ISO spécifique"
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "Chargement d'ISO distants par défaut..."
diff --git a/po/it_IT.po b/po/it_IT.po
index 8500df5..b995fbb 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1534,6 +1534,9 @@ msgstr "Scollega"
msgid "Cancel"
msgstr "Annulla"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "Inverti"
@@ -2293,6 +2296,9 @@ msgstr "Crea modelli da ISO selezionato"
msgid "I want to use a specific ISO file"
msgstr "Utilizzare un file ISO specifico"
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "Caricamento di ISO remoti predefiniti in corso..."
diff --git a/po/ja_JP.po b/po/ja_JP.po
index 5da8882..97e1d90 100644
--- a/po/ja_JP.po
+++ b/po/ja_JP.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1526,6 +1526,9 @@ msgstr "切り離し"
msgid "Cancel"
msgstr "取消"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "戻す"
@@ -2270,6 +2273,9 @@ msgstr "選択した ISO からテンプレートを作成"
msgid "I want to use a specific ISO file"
msgstr "特定の ISO ファイルを使用する"
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "デフォルトのリモート ISO をロード中..."
diff --git a/po/kimchi.pot b/po/kimchi.pot
index 91a70f0..5e3b1d5 100755
--- a/po/kimchi.pot
+++ b/po/kimchi.pot
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
@@ -1326,6 +1326,9 @@ msgstr ""
msgid "Cancel"
msgstr ""
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr ""
@@ -2021,6 +2024,9 @@ msgstr ""
msgid "I want to use a specific ISO file"
msgstr ""
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr ""
diff --git a/po/ko_KR.po b/po/ko_KR.po
index 4421f46..41e1b14 100644
--- a/po/ko_KR.po
+++ b/po/ko_KR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1429,6 +1429,9 @@ msgstr "분리"
msgid "Cancel"
msgstr "취소"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "되돌리기"
@@ -2161,6 +2164,9 @@ msgstr "선택한 ISO로부터 템플리트 작성"
msgid "I want to use a specific ISO file"
msgstr "특정 ISO 파일을 사용하려고 합니다."
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "기본 원격 ISO 로드 중..."
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 0064985..6932b27 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1540,6 +1540,9 @@ msgstr "Desanexar"
msgid "Cancel"
msgstr "Cancelar"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "reverter"
@@ -2291,6 +2294,9 @@ msgstr "Criar modelos a partir do ISO selecionado"
msgid "I want to use a specific ISO file"
msgstr "Eu desejo usar um arquivo ISO específico"
+msgid "File Path:"
+msgstr "Local do arquivo:"
+
msgid "Loading default remote ISOs ..."
msgstr "Carregando ISOs remotos padrão..."
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 1dc4421..5920dc6 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1474,6 +1474,9 @@ msgstr "Отключить"
msgid "Cancel"
msgstr "Отмена"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "восстановить"
@@ -2212,6 +2215,9 @@ msgstr "Создать шаблоны из выбранных образов ISO
msgid "I want to use a specific ISO file"
msgstr "Использовать конкретный файл ISO"
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "Загрузка удаленных ISO по умолчанию..."
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 97ddf56..22af9e2 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1347,6 +1347,9 @@ msgstr "拆离"
msgid "Cancel"
msgstr "取消"
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "还原"
@@ -2052,6 +2055,9 @@ msgstr "从所选 ISO 创建模板"
msgid "I want to use a specific ISO file"
msgstr "我要使用特定 ISO 文件"
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "正在装入缺省远程 ISO..."
diff --git a/po/zh_TW.po b/po/zh_TW.po
index e169167..7b93055 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-10 10:00-0300\n"
+"POT-Creation-Date: 2015-09-14 10:29-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -1347,6 +1347,9 @@ msgstr "分離"
msgid "Cancel"
msgstr "取消 "
+msgid "LDAP User ID,e.g.foo(a)foo.com"
+msgstr ""
+
msgid "revert"
msgstr "回復"
@@ -2053,6 +2056,9 @@ msgstr "從所選 ISO 建立範本"
msgid "I want to use a specific ISO file"
msgstr "我想使用特定的 ISO 檔案"
+msgid "File Path:"
+msgstr ""
+
msgid "Loading default remote ISOs ..."
msgstr "正在載入預設遠端 ISO ..."
diff --git a/ui/pages/guest-edit.html.tmpl b/ui/pages/guest-edit.html.tmpl
index a56d96c..0806b4d 100644
--- a/ui/pages/guest-edit.html.tmpl
+++ b/ui/pages/guest-edit.html.tmpl
@@ -250,7 +250,7 @@
<div class="item" id="{user}">
<span class="cell">
<label class="{viewMode}">{user}</label>
- <input type="text" placeholder="LDAP User ID,e.g.foo(a)foo.com" class="{editMode}"/>
+ <input type="text" placeholder=$_("LDAP User ID,e.g.foo(a)foo.com") class="{editMode}"/>
</span>
<span class="action-area">
<button class="delete"></button>
diff --git a/ui/pages/template-add.html.tmpl b/ui/pages/template-add.html.tmpl
index 58cb20f..5b2ec37 100644
--- a/ui/pages/template-add.html.tmpl
+++ b/ui/pages/template-add.html.tmpl
@@ -130,7 +130,7 @@
<h2 class="step-title">$_("Local Image File")</h2>
</header>
<div class="body">
- <label for="vm-image-local-text">File Path:</label>
+ <label for="vm-image-local-text">$_("File Path:")</label>
<input type="text" id="vm-image-local-text" />
<button class="ui-button-primary">$_("Create")</button>
</div>
--
2.1.0
2
1
From: Socorro Stoppler <socorrob(a)us.ibm.com>
When editing the VM, in the PCI tab, removing a device or adding a pci
to the list, only the '+' or '-' icon changes but the list doesn't get
refreshed. This behavior is ok when in the 'All' filter. However, when
in the 'ToAdd' filter, the device should no longer be shown after it has
been added and same behavior should occur when in 'Added' filter after
it has been removed.
Signed-off-by: Socorro Stoppler <socorrob(a)us.ibm.com>
---
ui/js/src/kimchi.guest_edit_main.js | 67 ++++++++++++++++++++-----------------
1 file changed, 37 insertions(+), 30 deletions(-)
diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js
index fc1b4c1..682b044 100644
--- a/ui/js/src/kimchi.guest_edit_main.js
+++ b/ui/js/src/kimchi.guest_edit_main.js
@@ -429,26 +429,31 @@ kimchi.guest_edit_main = function() {
filterNodes("", $("#permission-avail-groups"));
});
}
- var filterPCINodes = function(group, text){
- text = text.toLowerCase();
- $(".body", "#form-guest-edit-pci").children().each(function(){
- var textFilter = $(".name", this).text().toLowerCase().indexOf(text)!=-1;
- textFilter = textFilter || $(".product", this).text().toLowerCase().indexOf(text)!=-1;
- textFilter = textFilter || $(".vendor", this).text().toLowerCase().indexOf(text)!=-1;
- var display = "none";
- var itemGroup = $("button", this).button("option", "icons").primary;
- if(textFilter){
- if(group == "all"){
- display = "";
- }else if(group=="toAdd" && itemGroup=="ui-icon-plus"){
- display = ""
- }else if(group == "added" && itemGroup=="ui-icon-minus"){
- display = ""
- }
+ var filterPCINodes = function(group, text, targetName, targetIcon){
+ text = text.toLowerCase();
+ targetName = targetName.toLowerCase();
+ $(".body", "#form-guest-edit-pci").children().each(function(){
+ var currentName = $(".name", this).text().toLowerCase();
+ var textFilter = currentName.indexOf(text)!=-1;
+ textFilter = textFilter || $(".product", this).text().toLowerCase().indexOf(text)!=-1;
+ textFilter = textFilter || $(".vendor", this).text().toLowerCase().indexOf(text)!=-1;
+ var display = "none";
+ var itemGroup = $("button", this).button("option", "icons").primary;
+ if (currentName == targetName){
+ itemGroup = targetIcon;
+ }
+ if(textFilter){
+ if(group == "all"){
+ display = "";
+ }else if(group=="toAdd" && itemGroup=="ui-icon-plus"){
+ display = ""
+ }else if(group == "added" && itemGroup=="ui-icon-minus"){
+ display = ""
}
- $(this).css("display", display);
- });
- }
+ }
+ $(this).css("display", display);
+ });
+ }
var setupPCIDevice = function(){
kimchi.getAvailableHostPCIDevices(function(hostPCIs){
kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs){
@@ -457,24 +462,23 @@ kimchi.guest_edit_main = function() {
});
});
$("select", "#form-guest-edit-pci").change(function(){
- filterPCINodes($(this).val(), $("input", "#form-guest-edit-pci").val());
+ filterPCINodes($(this).val(), $("input", "#form-guest-edit-pci").val(), "", "");
});
$("input", "#form-guest-edit-pci").on("keyup", function() {
- filterPCINodes($("select", "#form-guest-edit-pci").val(), $(this).val());
+ filterPCINodes($("select", "#form-guest-edit-pci").val(), $(this).val(), "", "");
});
};
-
- var setupNode = function(arrPCIDevices, iconClass) {
+ var setupNode = function(arrPCIDevices, iconClass){
var pciEnabled = kimchi.capabilities.kernel_vfio;
- var pciDeviceName, pciDeviceProduct, pciDeviceProductDesc, pciDeviceVendor, pciDeviceVendorDesc;
+ var pciDeviceName, pciDeviceProduct, pciDeviceProductDesc, pciDeviceVendor, pciDeviceVendorDesc;
for(var i=0; i<arrPCIDevices.length; i++){
pciDeviceName = arrPCIDevices[i].name;
pciDeviceProduct = arrPCIDevices[i].product;
pciDeviceVendor = arrPCIDevices[i].vendor;
- if(pciDeviceProduct!=null) {
+ if(pciDeviceProduct!=null){
pciDeviceProductDesc = pciDeviceProduct.description;
}
- if(pciDeviceVendor!=null) {
+ if(pciDeviceVendor!=null){
pciDeviceVendorDesc = pciDeviceVendor.description;
}
var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{
@@ -489,8 +493,9 @@ kimchi.guest_edit_main = function() {
text: false
}).click(function(){
var obj = $(this);
+ var id = obj.parent().prop("id");
if(obj.button("option", "icons").primary == "ui-icon-minus"){
- kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){
+ kimchi.removeVMPCIDevice(kimchi.selectedGuest, id, function(){
kimchi.getAvailableHostPCIDevices(function(arrPCIDevices1){
kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){
for(var k=0; k<arrPCIDevices1.length; k++) {
@@ -501,16 +506,18 @@ kimchi.guest_edit_main = function() {
}
});
});
- filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val());
+ //id is for the object that is being added back to the available PCI devices
+ filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val(), id, "ui-icon-plus");
});
} else {
- kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){
+ kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: id }, function(){
kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){
for(var k=0; k<vmPCIs1.length; k++) {
$("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"});
}
});
- filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val());
+ //id is for the object that is being removed from the available PCI devices
+ filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val(), id, "ui-icon-minus");
});
}
});
--
1.9.1
2
1
From: Socorro Stoppler <socorrob(a)us.ibm.com>
Fix confirmatoin box so delete and clone msgs are not obstructed
Signed-off-by: Socorro Stoppler <socorrob(a)us.ibm.com>
---
ui/css/theme-default/message.css | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ui/css/theme-default/message.css b/ui/css/theme-default/message.css
index 28c392b..c97bd4c 100644
--- a/ui/css/theme-default/message.css
+++ b/ui/css/theme-default/message.css
@@ -78,8 +78,8 @@
box-sizing: border-box;
max-width: 100%;
max-height: 100%;
- width: 350px;
- height: 200px;
+ width: 425px;
+ height: 250px;
z-index: 9999;
}
--
1.9.1
2
3
14 Sep '15
From: pappu <papsagar(a)in.ibm.com>
Signed-off-by: pappu <papsagar(a)in.ibm.com>
---
ui/css/theme-default/window.css | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/ui/css/theme-default/window.css b/ui/css/theme-default/window.css
index 5cb2790..f3924a3 100644
--- a/ui/css/theme-default/window.css
+++ b/ui/css/theme-default/window.css
@@ -78,7 +78,24 @@
overflow-x: hidden;
margin: 48px 0 56px;
}
-
+.window .close {
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ top: 7px;
+ right: 7px;
+ -webkit-border-radius: 30px;
+ -moz-border-radius: 30px;
+ border-radius: 30px;
+ border: 2px solid #ccc;
+ color: #ccc;
+ font-size: 24px;
+ text-align: center;
+ line-height: 30px;
+ font-weight: bold;
+ background: #eee;
+ cursor: pointer;
+}
.window>header>.title,
.window>form>header>.title {
height: 48px;
--
2.1.0
3
3
This patch fixes Kimchi config test and adds Wok config
test.
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
---
plugins/kimchi/config.py.in | 6 +-
plugins/kimchi/kimchi.conf | 8 --
plugins/kimchi/tests/test_config.py.in | 148 ++++++++++++++++++++++------
plugins/kimchi/ui/images/Makefile.am | 2 +-
plugins/kimchi/ui/images/logo.ico | Bin 1214 -> 0 bytes
plugins/kimchi/ui/pages/help/dita-help.xsl | 2 +-
src/wok/config.py.in | 8 ++
7 files changed, 131 insertions(+), 43 deletions(-)
delete mode 100644 plugins/kimchi/ui/images/logo.ico
diff --git a/plugins/kimchi/config.py.in b/plugins/kimchi/config.py.in
index 65150aa..4b82e45 100644
--- a/plugins/kimchi/config.py.in
+++ b/plugins/kimchi/config.py.in
@@ -23,7 +23,7 @@ import os
import platform
import threading
-from wok.config import PluginPaths
+from wok.config import PluginConfig, PluginPaths
from wok.xmlutils.utils import xpath_get_text
kimchiLock = threading.Lock()
@@ -103,9 +103,9 @@ class KimchiPaths(PluginPaths):
kimchiPaths = KimchiPaths()
-class KimchiConfig(dict):
+class KimchiConfig(PluginConfig):
def __init__(self):
- super(KimchiConfig, self).__init__(self)
+ super(KimchiConfig, self).__init__('kimchi')
custom_config = {
'/novnc': {
diff --git a/plugins/kimchi/kimchi.conf b/plugins/kimchi/kimchi.conf
index 78f4f3f..1bf78e4 100644
--- a/plugins/kimchi/kimchi.conf
+++ b/plugins/kimchi/kimchi.conf
@@ -30,14 +30,6 @@ tools.nocache.on = False
tools.wokauth.on = True
tools.staticdir.content_types = {'xz': 'application/x-xz'}
-[/favicon.ico]
-tools.staticfile.on = True
-tools.staticfile.filename = wok.config.PluginPaths('kimchi').ui_dir + '/images/logo.ico'
-
-[/robots.txt]
-tools.staticfile.on = True
-tools.staticfile.filename = wok.config.PluginPaths('kimchi').ui_dir + '/robots.txt'
-
[/help]
tools.staticdir.on = True
tools.staticdir.dir = wok.config.PluginPaths('kimchi').ui_dir + '/pages/help'
diff --git a/plugins/kimchi/tests/test_config.py.in b/plugins/kimchi/tests/test_config.py.in
index 7b5f190..0167610 100644
--- a/plugins/kimchi/tests/test_config.py.in
+++ b/plugins/kimchi/tests/test_config.py.in
@@ -20,11 +20,11 @@
import unittest
from cherrypy.lib.reprconf import Parser
-from wok.config import Paths
+from wok.config import Paths, PluginPaths, WokConfig
from wok.plugins.kimchi.config import get_debugreports_path
from wok.plugins.kimchi.config import get_screenshot_path
-from wok.plugins.kimchi.config import KimchiPaths
+from wok.plugins.kimchi.config import KimchiConfig, KimchiPaths
get_prefix = None
@@ -90,8 +90,9 @@ class ConfigTests(unittest.TestCase):
self.assertEquals(paths.ui_dir, '/home/user/wok/plugins/kimchi/ui')
self.assertEquals(paths.mo_dir, '/home/user/wok/plugins/kimchi/mo')
- def test_kimchi_config(self):
- Paths.get_prefix = KimchiPaths.get_prefix = get_prefix
+ def test_wok_config(self):
+ Paths.get_prefix = PluginPaths.get_prefix = get_prefix
+ paths = Paths()
CACHEEXPIRES = 31536000
SESSIONSTIMEOUT = 10
configObj = {
@@ -109,56 +110,154 @@ class ConfigTests(unittest.TestCase):
'tools.sessions.timeout': SESSIONSTIMEOUT,
'tools.wokauth.on': False
},
+ '/wok-ui.html': {
+ 'tools.wokauth.on': True
+ },
+ '/css': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/css' % paths.prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/fontello': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/fontello' % paths.prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/js': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/js' % paths.prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/libs': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/libs' % paths.prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/images': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/images' % paths.prefix,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/favicon.ico': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename':
+ '%s/images/logo.ico' % paths.ui_dir
+ },
+ '/robots.txt': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/robots.txt' % paths.ui_dir
+ },
+ }
+
+ wok_config = WokConfig()
+ self.assertEquals(wok_config, configObj)
+
+
+ def test_kimchi_config(self):
+ KimchiPaths.get_prefix = PluginPaths.get_prefix = get_prefix
+ paths = KimchiPaths()
+ pluginPrefix = paths.add_prefix(paths.plugin_dir)
+ CACHEEXPIRES = 31536000
+ SESSIONSTIMEOUT = 10
+ configObj = {
+ 'wok': {
+ 'enable': True,
+ 'plugin_class': "KimchiRoot",
+ 'uri': '/%s' % paths.plugin_dir,
+ 'extra_auth_api_class': "control.sub_nodes"
+ },
+ '/': {
+ 'tools.trailing_slash.on': False,
+ 'request.methods_with_bodies': ('POST', 'PUT'),
+ 'tools.nocache.on': True,
+ 'tools.proxy.on': True,
+ 'tools.sessions.on': True,
+ 'tools.sessions.name': 'wok',
+ 'tools.sessions.secure': True,
+ 'tools.sessions.httponly': True,
+ 'tools.sessions.locking': 'explicit',
+ 'tools.sessions.storage_type': 'ram',
+ 'tools.sessions.timeout': SESSIONSTIMEOUT,
+ 'tools.wokauth.on': True
+ },
'/novnc': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': KimchiPaths().novnc_dir,
+ 'tools.staticdir.dir': paths.novnc_dir,
'tools.nocache.on': True,
'tools.wokauth.on': True
},
'/spice_auto.html': {
'tools.staticfile.on': True,
- 'tools.staticfile.filename': KimchiPaths().spice_file,
+ 'tools.staticfile.filename': paths.spice_file,
'tools.nocache.on': True,
'tools.wokauth.on': True
},
'/spice-html5': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': KimchiPaths().spice_dir,
+ 'tools.staticdir.dir': paths.spice_dir,
'tools.nocache.on': True
},
'/spice-html5/spice.css': {
'tools.staticfile.on': True,
- 'tools.staticfile.filename': KimchiPaths().spice_css_file,
+ 'tools.staticfile.filename': paths.spice_css_file,
'tools.nocache.on': True,
},
- '/kimchi-ui.html': {
- 'tools.wokauth.on': True
+ '/ui/config/tab-ext.xml': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/ui/config/tab-ext.xml' %
+ pluginPrefix,
+ 'tools.nocache.on': True
},
'/css': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/css' % KimchiPaths().prefix,
+ 'tools.staticdir.dir': '%s/ui/css' % pluginPrefix,
'tools.expires.on': True,
'tools.expires.secs': CACHEEXPIRES,
- 'tools.nocache.on': False
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
+ },
+ '/fontello': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/fontello' % pluginPrefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
},
'/js': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/js' % KimchiPaths().prefix,
+ 'tools.staticdir.dir': '%s/ui/js' % pluginPrefix,
'tools.expires.on': True,
'tools.expires.secs': CACHEEXPIRES,
- 'tools.nocache.on': False
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
},
'/libs': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/libs' % KimchiPaths().prefix,
+ 'tools.staticdir.dir': '%s/ui/libs' % pluginPrefix,
'tools.expires.on': True,
'tools.expires.secs': CACHEEXPIRES,
'tools.nocache.on': False,
+ 'tools.wokauth.on': False,
},
'/images': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/images' % KimchiPaths().prefix,
- 'tools.nocache.on': False
+ 'tools.staticdir.dir': '%s/ui/images' % pluginPrefix,
+ 'tools.nocache.on': False,
+ 'tools.wokauth.on': False
},
'/data/screenshots': {
'tools.staticdir.on': True,
@@ -172,24 +271,13 @@ class ConfigTests(unittest.TestCase):
'tools.wokauth.on': True,
'tools.staticdir.content_types': {'xz': 'application/x-xz'}
},
- '/favicon.ico': {
- 'tools.staticfile.on': True,
- 'tools.staticfile.filename':
- '%s/images/logo.ico' % KimchiPaths().ui_dir
- },
- '/robots.txt': {
- 'tools.staticfile.on': True,
- 'tools.staticfile.filename': '%s/robots.txt' %
- KimchiPaths().ui_dir
- },
'/help': {
'tools.staticdir.on': True,
- 'tools.staticdir.dir': '%s/ui/pages/help' %
- KimchiPaths().prefix,
- 'tools.staticdir.index': 'en_US/index.html',
+ 'tools.staticdir.dir': '%s/ui/pages/help' % pluginPrefix,
'tools.nocache.on': True
}
}
kimchi_config = Parser().dict_from_file(KimchiPaths().conf_file)
+ kimchi_config.update(KimchiConfig())
self.assertEquals(kimchi_config, configObj)
diff --git a/plugins/kimchi/ui/images/Makefile.am b/plugins/kimchi/ui/images/Makefile.am
index 0562e6a..ca3ee6e 100644
--- a/plugins/kimchi/ui/images/Makefile.am
+++ b/plugins/kimchi/ui/images/Makefile.am
@@ -19,4 +19,4 @@ SUBDIRS = theme-default
imagedir = $(datadir)/wok/plugins/kimchi/ui/images
-dist_image_DATA = *.png *.ico
+dist_image_DATA = *.png
diff --git a/plugins/kimchi/ui/images/logo.ico b/plugins/kimchi/ui/images/logo.ico
deleted file mode 100644
index 446143f066a60f479b2cb8f8d04ab3c97ff60e56..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1214
zcma)*3rLeu6vyu=X_;nPV)$&PPF)r(wTQ|dTGOUtnOdf0mZ=cR#99xbub1{BqnD9^
z^Z>PV6h)fUny6#CN{3di2P{*h2ek@Oq0a4o*=I}2Iv?krbAR`oKi_vQA0faVCr83o
zF{!X2#Dx$Nz}$(sm^sgR<Jj30yCMGpMl1z837jm3H1$<DU4IV>Tbdw<FM-;Hi<#et
z=I}n~iB^qh8{XzCNyvT<I;$&znmT~?eFXZgAE@Om?1h(6Iq+2e1-ca!zOAO7n3*};
zXq6n?2kF<!f%cez;-Fgx4$e+xo{WR;oqhc_OW;#nF!Zm|JK}m8gi6aC+##`QA5PmJ
zfeZ(o(}%&&1P5#*1vVbnssk~XhN5bNz=T)>5^+BS=V54SJ|^z)5I7%kU;>-skiq*{
z5B^=eF<T)pK9+)bV;9UCK>t-HOi+bkR-wK1xpfXL;S<?ho1pQ5gYzxiHR~=e+XHS(
zYe7QMZb3IjWV72H-JpD~6z(tbgwn1o$D2s!YteWNJS!i9l%iW?+34Lvr*KL(6{_X|
zobEjAb{lD|4qsmYvGF;~r0Aunc#>=c)0W4s|D{#(q9~vaX{rGms=((Wn*~LeWqIu}
zkGvlzwaxjL25hey2bVweu<xK*t+@Oa_)UKTK^x4IwmKMOjm@oL`l)}_NGPy}tdb}w
zHa>H`ji2N7m}Xsj#j7-`#=Dv}`)h&)9th^&^dR%>WH_MB8KcIXVf8p&s1xD|_k)R-
zrk$Z0-|Gf}&4Au$KhU$k?3YR5by~D9M&-q$=ocNz4!IY&p7%OxuJf&+Ei-G(23hU;
zHTLhMtjFR9ExVbPQVLzBFlROcIZ|#jmX6fm_hsVa3XP<aKAeAt8dqp&oBW=V^+d>Q
zkcNnm%Ds?ggd^Rv2~9_o82cv;p6LSBD_g_s-n1uZ8#<EeLwTm~LE9J!Zdo@M&*jFU
zoM+Z%F5)(8$8y`Wz~%Pd;Nlx@aH{<lk}}CcRMRXZMD&%Uhz3Ze$jpg#uec1IlFMPW
MDQ4iZEk#_;cNAJoqyPW_
diff --git a/plugins/kimchi/ui/pages/help/dita-help.xsl b/plugins/kimchi/ui/pages/help/dita-help.xsl
index 8583a4e..45f0a3b 100644
--- a/plugins/kimchi/ui/pages/help/dita-help.xsl
+++ b/plugins/kimchi/ui/pages/help/dita-help.xsl
@@ -9,7 +9,7 @@
<head>
<title><xsl:value-of select="/cshelp/title" /></title>
<meta charset="UTF-8" />
- <link rel="shortcut icon" href="../../images/logo.ico" />
+ <link rel="shortcut icon" href="images/logo.ico" />
<link rel="stylesheet" type="text/css" href="../kimchi.css" />
</head>
<body>
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index 08da028..82a6c8b 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -145,6 +145,14 @@ class WokConfig(dict):
'/wok-ui.html': {
'tools.wokauth.on': True
},
+ '/favicon.ico': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/images/logo.ico' % paths.ui_dir
+ },
+ '/robots.txt': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/robots.txt' % paths.ui_dir
+ },
}
def __init__(self):
--
1.7.1
2
1
The modules network and netinfo are specific to kimchi. This
patch moves them from wok to kimchi plugin and adapts the
respective imports.
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
---
plugins/kimchi/model/host.py | 2 +-
plugins/kimchi/model/interfaces.py | 2 +-
plugins/kimchi/model/networks.py | 4 ++--
{src/wok => plugins/kimchi}/netinfo.py | 0
{src/wok => plugins/kimchi}/network.py | 0
plugins/kimchi/tests/test_model.py | 2 +-
6 files changed, 5 insertions(+), 5 deletions(-)
rename {src/wok => plugins/kimchi}/netinfo.py (100%)
rename {src/wok => plugins/kimchi}/network.py (100%)
diff --git a/plugins/kimchi/model/host.py b/plugins/kimchi/model/host.py
index 3ff034c..8c891a1 100644
--- a/plugins/kimchi/model/host.py
+++ b/plugins/kimchi/model/host.py
@@ -25,7 +25,6 @@ import time
from cherrypy.process.plugins import BackgroundTask
from collections import defaultdict
-from wok import netinfo
from wok.basemodel import Singleton
from wok.exception import InvalidOperation, InvalidParameter
from wok.exception import NotFoundError, OperationFailed
@@ -34,6 +33,7 @@ from wok.xmlutils.utils import xpath_get_text
import hostdev
from .. import disks
+from .. import netinfo
from ..repositories import Repositories
from ..swupdate import SoftwareUpdate
from config import CapabilitiesModel
diff --git a/plugins/kimchi/model/interfaces.py b/plugins/kimchi/model/interfaces.py
index 81b379a..149afe3 100644
--- a/plugins/kimchi/model/interfaces.py
+++ b/plugins/kimchi/model/interfaces.py
@@ -17,9 +17,9 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-from wok import netinfo
from wok.exception import NotFoundError
+from .. import netinfo
from networks import NetworksModel
diff --git a/plugins/kimchi/model/networks.py b/plugins/kimchi/model/networks.py
index 57af9e7..621055e 100644
--- a/plugins/kimchi/model/networks.py
+++ b/plugins/kimchi/model/networks.py
@@ -23,8 +23,6 @@ import sys
import time
from xml.sax.saxutils import escape
-from wok import netinfo
-from wok import network as knetwork
from wok.config import PluginPaths
from wok.exception import InvalidOperation, InvalidParameter
from wok.exception import MissingParameter, NotFoundError, OperationFailed
@@ -32,6 +30,8 @@ from wok.rollbackcontext import RollbackContext
from wok.utils import run_command, wok_log
from wok.xmlutils.utils import xpath_get_text
+from .. import netinfo
+from .. import network as knetwork
from ..osinfo import defaults as tmpl_defaults
from ..xmlutils.network import create_vlan_tagged_bridge_xml
from ..xmlutils.network import to_network_xml
diff --git a/src/wok/netinfo.py b/plugins/kimchi/netinfo.py
similarity index 100%
rename from src/wok/netinfo.py
rename to plugins/kimchi/netinfo.py
diff --git a/src/wok/network.py b/plugins/kimchi/network.py
similarity index 100%
rename from src/wok/network.py
rename to plugins/kimchi/network.py
diff --git a/plugins/kimchi/tests/test_model.py b/plugins/kimchi/tests/test_model.py
index c70e4fb..027b3c2 100644
--- a/plugins/kimchi/tests/test_model.py
+++ b/plugins/kimchi/tests/test_model.py
@@ -28,7 +28,6 @@ import unittest
import uuid
import wok.objectstore
-from wok import netinfo
from wok.basemodel import Singleton
from wok.config import config
from wok.exception import InvalidOperation
@@ -36,6 +35,7 @@ from wok.exception import InvalidParameter, NotFoundError, OperationFailed
from wok.rollbackcontext import RollbackContext
from wok.utils import add_task
+from wok.plugins.kimchi import netinfo
from wok.plugins.kimchi.osinfo import get_template_default
from wok.plugins.kimchi.model import model
from wok.plugins.kimchi.model.libvirtconnection import LibvirtConnection
--
1.7.1
2
4
14 Sep '15
From: Socorro Stoppler <socorrob(a)us.ibm.com>
Add volume to storage label is not formatted properly in the following
languages: Portuguese(Brazil) and Spanish
Tested all languages supported and all is good now.
Socorro Stoppler (1):
Add volume to storage pool label not formatted properly in some
languages
ui/css/theme-default/storagepool-add-volume.css | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--
1.9.1
1
0
This patch aims to improve the repo url check. It expands variables used
to compose the url and handles url redirection if the server returns
that.
Jose Ricardo Ziviani (3):
Implement a method to expand variables in a url
Expands all possible variables in a repo url to validate it
Handles http redirection when checking url path
src/kimchi/repositories.py | 16 ++++++++--------
src/kimchi/utils.py | 16 +++++++++++++---
src/kimchi/yumparser.py | 24 ++++++++++++++++++------
3 files changed, 39 insertions(+), 17 deletions(-)
--
1.9.1
2
4
[PATCH WOK] Add fontawesome-fonts as dependency and expose .ttf file on web server
by Aline Manera 11 Sep '15
by Aline Manera 11 Sep '15
11 Sep '15
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
contrib/DEBIAN/control.in | 3 ++-
contrib/wok.spec.fedora.in | 1 +
contrib/wok.spec.suse.in | 1 +
src/wok/config.py.in | 19 +++++++++++++++++++
4 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/contrib/DEBIAN/control.in b/contrib/DEBIAN/control.in
index ef4e0c2..5d65bd0 100644
--- a/contrib/DEBIAN/control.in
+++ b/contrib/DEBIAN/control.in
@@ -15,7 +15,8 @@ Depends: python-cherrypy3 (>= 3.2.0),
python-lxml,
nginx,
python-ldap,
- spice-html5
+ spice-html5,
+ fonts-font-awesome
Build-Depends: libxslt,
openssl,
python-lxml
diff --git a/contrib/wok.spec.fedora.in b/contrib/wok.spec.fedora.in
index 30319a9..e82f946 100644
--- a/contrib/wok.spec.fedora.in
+++ b/contrib/wok.spec.fedora.in
@@ -19,6 +19,7 @@ Requires: python-jsonschema >= 1.3.0
Requires: python-lxml
Requires: nginx
Requires: python-ldap
+Requires: fontawesome-fonts
BuildRequires: libxslt
BuildRequires: openssl
BuildRequires: python-lxml
diff --git a/contrib/wok.spec.suse.in b/contrib/wok.spec.suse.in
index 63bdce3..0e9117e 100644
--- a/contrib/wok.spec.suse.in
+++ b/contrib/wok.spec.suse.in
@@ -20,6 +20,7 @@ Requires: python-ldap
Requires: python-lxml
Requires: python-xml
Requires: nginx
+Requires: fontawesome-fonts
BuildRequires: libxslt-tools
BuildRequires: openssl
BuildRequires: python-lxml
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index 08da028..6b8951d 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -60,6 +60,18 @@ class Paths(object):
self.plugins_dir = self.add_prefix('plugins')
self.mo_dir = self.add_prefix('mo')
+ self.fontawesome_file = None
+ for path in ['/usr/share/fonts/fontawesome',
+ '/usr/share/fonts/truetype/font-awesome',
+ '/usr/share/fonts/truetype']:
+ if os.path.exists(path):
+ self.fontawesome_file = os.path.join(path,
+ 'fontawesome-webfont.ttf')
+ break
+
+ if self.fontawesome_file is None:
+ raise Exception("Font Awesome is not installed.")
+
def get_prefix(self):
if __file__.startswith("/"):
base = os.path.dirname(__file__)
@@ -120,6 +132,13 @@ class UIConfig(dict):
ui_configs['/' + sub_dir].update({
'tools.expires.on': True,
'tools.expires.secs': self.CACHEEXPIRES})
+
+ ui_configs['/fontawesome/font/fontawesome-webfont.ttf'] = {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': paths.fontawesome_file,
+ 'tools.wokauth.on': False,
+ 'tools.nocache.on': False}
+
self.update(ui_configs)
--
2.1.0
1
0
11 Sep '15
Changes:
v2:
Remove fuzzy translations
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
po/de_DE.po | 132 ++++++++++++++++++++++++-----------------
po/en_US.po | 104 +++++++++++++++++++-------------
po/es_ES.po | 132 ++++++++++++++++++++++++-----------------
po/fr_FR.po | 134 +++++++++++++++++++++++++-----------------
po/it_IT.po | 132 ++++++++++++++++++++++++-----------------
po/ja_JP.po | 128 ++++++++++++++++++++++++----------------
po/kimchi.pot | 105 +++++++++++++++++++--------------
po/ko_KR.po | 130 +++++++++++++++++++++++-----------------
po/pt_BR.po | 132 ++++++++++++++++++++++++-----------------
po/ru_RU.po | 130 +++++++++++++++++++++++-----------------
po/zh_CN.po | 126 +++++++++++++++++++++++----------------
po/zh_TW.po | 129 +++++++++++++++++++++++-----------------
ui/pages/guest-edit.html.tmpl | 8 +--
13 files changed, 900 insertions(+), 622 deletions(-)
diff --git a/po/de_DE.po b/po/de_DE.po
index 439dce4..64ce72a 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -310,13 +310,6 @@ msgstr ""
"Virtuelle Maschine %(name)s konnte nicht heruntergefahren werden. Details: "
"%(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Zugriff auf die Metadaten der virtuellen Maschine %(name)s nicht möglich. "
-"Details: %(err)s"
-
msgid "The guest console password must be a string."
msgstr "Das Konsolenkennwort des Gastes muss eine Zeichenfolge sein."
@@ -407,6 +400,21 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Fehler beim Anschließen der Speichereinheit. Details: %(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1520,6 +1528,12 @@ msgstr "MAC-Adresse"
msgid "Available system users and groups"
msgstr "Verfügbare Systembenutzer und -gruppen"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Ausgewählte Systembenutzer und -gruppen"
@@ -1562,37 +1576,6 @@ msgstr "Abbrechen"
msgid "revert"
msgstr "zurücksetzen"
-msgid "Add a Storage Device to VM"
-msgstr "Speichereinheit zur virtuellen Maschine hinzufügen"
-
-msgid "Device Type"
-msgstr "Einheitentyp"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"Der Einheitentyp. Derzeit werden nur \"cdrom\" und \"disk\" unterstützt."
-
-msgid "Storage Pool"
-msgstr "Speicherpool"
-
-msgid "Storage pool which volume located in"
-msgstr "Speicherpool, in dem sich der Datenträger befindet"
-
-msgid "Storage Volume"
-msgstr "Speicherdatenträger"
-
-msgid "Storage volume to be attached"
-msgstr "Anzuhängender Speicherdatenträger"
-
-msgid "File Path"
-msgstr "Dateipfad"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "Der ISO-Dateipfad auf dem Server für die CD-ROM."
-
-msgid "Attach"
-msgstr "Anhängen"
-
msgid "Start"
msgstr "Starten"
@@ -1626,6 +1609,37 @@ msgstr "Herunterfahren"
msgid "Delete"
msgstr "Löschen"
+msgid "Add a Storage Device to VM"
+msgstr "Speichereinheit zur virtuellen Maschine hinzufügen"
+
+msgid "Device Type"
+msgstr "Einheitentyp"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"Der Einheitentyp. Derzeit werden nur \"cdrom\" und \"disk\" unterstützt."
+
+msgid "Storage Pool"
+msgstr "Speicherpool"
+
+msgid "Storage pool which volume located in"
+msgstr "Speicherpool, in dem sich der Datenträger befindet"
+
+msgid "Storage Volume"
+msgstr "Speicherdatenträger"
+
+msgid "Storage volume to be attached"
+msgstr "Anzuhängender Speicherdatenträger"
+
+msgid "File Path"
+msgstr "Dateipfad"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Der ISO-Dateipfad auf dem Server für die CD-ROM."
+
+msgid "Attach"
+msgstr "Anhängen"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"Der Benutzername oder das Kennwort, den bzw. das Sie eingegeben haben, ist "
@@ -1649,6 +1663,9 @@ msgstr "Gäste"
msgid "Templates"
msgstr "Vorlagen"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "Anwendungskonfiguration konnte nicht abgerufen werden"
@@ -2182,21 +2199,6 @@ msgstr "Ja"
msgid "No"
msgstr "Nein"
-msgid "Add a Volume to Storage Pool"
-msgstr "Datenträger zu Speicherpool hinzufügen"
-
-msgid "Fetch from remote URL"
-msgstr "Über Remote URL abrufen"
-
-msgid "Enter the remote URL here."
-msgstr "Remote URL hier eingeben."
-
-msgid "Upload a file"
-msgstr "Datei hochladen"
-
-msgid "Choose the file you want to upload."
-msgstr "Wählen Sie die hochzuladende Datei aus."
-
msgid "Define a New Storage Pool"
msgstr "Neuen Speicherpool definieren"
@@ -2275,6 +2277,21 @@ msgstr "SCSI-Adapter"
msgid "Please, wait..."
msgstr "Bitte warten..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Datenträger zu Speicherpool hinzufügen"
+
+msgid "Fetch from remote URL"
+msgstr "Über Remote URL abrufen"
+
+msgid "Enter the remote URL here."
+msgstr "Remote URL hier eingeben."
+
+msgid "Upload a file"
+msgstr "Datei hochladen"
+
+msgid "Choose the file you want to upload."
+msgstr "Wählen Sie die hochzuladende Datei aus."
+
msgid "Add Template"
msgstr "Vorlage hinzufügen"
@@ -2476,3 +2493,10 @@ msgstr "Zuordnung"
msgid "No templates found."
msgstr "Keine Vorlagen gefunden."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "Zugriff auf die Metadaten der virtuellen Maschine %(name)s nicht möglich. "
+#~ "Details: %(err)s"
diff --git a/po/en_US.po b/po/en_US.po
index 26dbaac..3539989 100644
--- a/po/en_US.po
+++ b/po/en_US.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -267,11 +267,6 @@ msgstr ""
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr ""
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-
msgid "The guest console password must be a string."
msgstr ""
@@ -340,6 +335,22 @@ msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
#, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
+#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
@@ -1271,6 +1282,12 @@ msgstr ""
msgid "Available system users and groups"
msgstr ""
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr ""
@@ -1313,67 +1330,67 @@ msgstr ""
msgid "revert"
msgstr ""
-msgid "Add a Storage Device to VM"
+msgid "Start"
msgstr ""
-msgid "Device Type"
+msgid "Reset"
msgstr ""
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgid "Pause"
msgstr ""
-msgid "Storage Pool"
+msgid "Resume"
msgstr ""
-msgid "Storage pool which volume located in"
+msgid "Power Off"
msgstr ""
-msgid "Storage Volume"
+msgid "Actions"
msgstr ""
-msgid "Storage volume to be attached"
+msgid "Connect"
msgstr ""
-msgid "File Path"
+msgid "Clone"
msgstr ""
-msgid "The ISO file path in the server for CDROM."
+msgid "Edit"
msgstr ""
-msgid "Attach"
+msgid "Shut Down"
msgstr ""
-msgid "Start"
+msgid "Delete"
msgstr ""
-msgid "Reset"
+msgid "Add a Storage Device to VM"
msgstr ""
-msgid "Pause"
+msgid "Device Type"
msgstr ""
-msgid "Resume"
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
-msgid "Power Off"
+msgid "Storage Pool"
msgstr ""
-msgid "Actions"
+msgid "Storage pool which volume located in"
msgstr ""
-msgid "Connect"
+msgid "Storage Volume"
msgstr ""
-msgid "Clone"
+msgid "Storage volume to be attached"
msgstr ""
-msgid "Edit"
+msgid "File Path"
msgstr ""
-msgid "Shut Down"
+msgid "The ISO file path in the server for CDROM."
msgstr ""
-msgid "Delete"
+msgid "Attach"
msgstr ""
msgid "The username or password you entered is incorrect. Please try again."
@@ -1397,6 +1414,9 @@ msgstr ""
msgid "Templates"
msgstr ""
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr ""
@@ -1878,21 +1898,6 @@ msgstr ""
msgid "No"
msgstr ""
-msgid "Add a Volume to Storage Pool"
-msgstr ""
-
-msgid "Fetch from remote URL"
-msgstr ""
-
-msgid "Enter the remote URL here."
-msgstr ""
-
-msgid "Upload a file"
-msgstr ""
-
-msgid "Choose the file you want to upload."
-msgstr ""
-
msgid "Define a New Storage Pool"
msgstr ""
@@ -1963,6 +1968,21 @@ msgstr ""
msgid "Please, wait..."
msgstr ""
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
msgid "Add Template"
msgstr ""
diff --git a/po/es_ES.po b/po/es_ES.po
index 173af93..1e29291 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -304,13 +304,6 @@ msgstr "No existe el grupo (o grupos) '%(groups)s'"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "No se puede apagar la máquina virtual %(name)s. Detalles: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede obtener acceso a los metadatos de la máquina virtual %(name)s. "
-"Detalles: %(err)s"
-
msgid "The guest console password must be a string."
msgstr "La contraseña de la consola del invitado debe ser una serie. "
@@ -393,6 +386,21 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Error al conectar el dispositivo de memoria. Detalles: %(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1518,6 +1526,12 @@ msgstr "Dirección MAC"
msgid "Available system users and groups"
msgstr "Usuarios y grupos del sistema disponibles"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Usuarios y grupos del sistema seleccionados"
@@ -1560,37 +1574,6 @@ msgstr "Cancelar"
msgid "revert"
msgstr "revertir"
-msgid "Add a Storage Device to VM"
-msgstr "Añadir un dispositivo de almacenamiento a VM"
-
-msgid "Device Type"
-msgstr "Tipo de dispositivo"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"El tipo de dispositivo. Actualmente se da soporte a \"cdrom\" y \"disk\"."
-
-msgid "Storage Pool"
-msgstr "Agrupación de almacenamiento"
-
-msgid "Storage pool which volume located in"
-msgstr "Agrupación de almacenamiento con volumen ubicado en"
-
-msgid "Storage Volume"
-msgstr "Volumen de almacenamiento"
-
-msgid "Storage volume to be attached"
-msgstr "Volumen de almacenamiento que se va a adjuntar"
-
-msgid "File Path"
-msgstr "Vía de acceso de archivo"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "La vía de acceso del archivo ISO en el servidor para el CDROM."
-
-msgid "Attach"
-msgstr "Conectar"
-
msgid "Start"
msgstr "Iniciar"
@@ -1624,6 +1607,37 @@ msgstr "Concluir"
msgid "Delete"
msgstr "Suprimir"
+msgid "Add a Storage Device to VM"
+msgstr "Añadir un dispositivo de almacenamiento a VM"
+
+msgid "Device Type"
+msgstr "Tipo de dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"El tipo de dispositivo. Actualmente se da soporte a \"cdrom\" y \"disk\"."
+
+msgid "Storage Pool"
+msgstr "Agrupación de almacenamiento"
+
+msgid "Storage pool which volume located in"
+msgstr "Agrupación de almacenamiento con volumen ubicado en"
+
+msgid "Storage Volume"
+msgstr "Volumen de almacenamiento"
+
+msgid "Storage volume to be attached"
+msgstr "Volumen de almacenamiento que se va a adjuntar"
+
+msgid "File Path"
+msgstr "Vía de acceso de archivo"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "La vía de acceso del archivo ISO en el servidor para el CDROM."
+
+msgid "Attach"
+msgstr "Conectar"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"El nombre de usuario o contraseña que ha especificado es incorrecto. Por "
@@ -1647,6 +1661,9 @@ msgstr "Invitados"
msgid "Templates"
msgstr "Plantillas"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "No se ha podido obtener la configuración de la aplicación"
@@ -2182,21 +2199,6 @@ msgstr "Sí"
msgid "No"
msgstr "No"
-msgid "Add a Volume to Storage Pool"
-msgstr "Añadir un volumen a la agrupación de almacenamiento"
-
-msgid "Fetch from remote URL"
-msgstr "Captar de URL remoto"
-
-msgid "Enter the remote URL here."
-msgstr "Escriba el URL remoto aquí. "
-
-msgid "Upload a file"
-msgstr "Cargar un archivo"
-
-msgid "Choose the file you want to upload."
-msgstr "Elija el archivo que desee cargar. "
-
msgid "Define a New Storage Pool"
msgstr "Definir una agrupación de almacenamiento nueva"
@@ -2273,6 +2275,21 @@ msgstr "Adaptador SCSI"
msgid "Please, wait..."
msgstr "Por favor, espere..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Añadir un volumen a la agrupación de almacenamiento"
+
+msgid "Fetch from remote URL"
+msgstr "Captar de URL remoto"
+
+msgid "Enter the remote URL here."
+msgstr "Escriba el URL remoto aquí. "
+
+msgid "Upload a file"
+msgstr "Cargar un archivo"
+
+msgid "Choose the file you want to upload."
+msgstr "Elija el archivo que desee cargar. "
+
msgid "Add Template"
msgstr "Añadir plantilla"
@@ -2475,3 +2492,10 @@ msgstr "Asignación"
msgid "No templates found."
msgstr "No se han encontrado plantillas."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "No se puede obtener acceso a los metadatos de la máquina virtual "
+#~ "%(name)s. Detalles: %(err)s"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 42bb004..2a6642a 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -314,13 +314,6 @@ msgstr "Le ou les groupes '%(groups)s' n'existent pas"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "Impossible d'arrêter la machine virtuelle %(name)s. Détails : %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossible d'obtenir l'accès aux métadonnées de la machine virtuelle "
-"%(name)s. Détails : %(err)s"
-
msgid "The guest console password must be a string."
msgstr "Le mot de passe de la console invité doit être une chaîne."
@@ -409,6 +402,21 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Erreur d'attachement de l'unité de mémoire. Détails : %(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1522,6 +1530,12 @@ msgstr "Adresse MAC"
msgid "Available system users and groups"
msgstr "Groupes et utilisateurs système disponibles"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Groupes et utilisateurs système sélectionnés"
@@ -1564,38 +1578,6 @@ msgstr "Annuler"
msgid "revert"
msgstr "rétablir"
-msgid "Add a Storage Device to VM"
-msgstr "Ajouter une unité de stockage à la machine virtuelle"
-
-msgid "Device Type"
-msgstr "Type d'unité"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"Type d'unité. Actuellement, \"cdrom\" et \"disk\" seulement sont pris en "
-"charge."
-
-msgid "Storage Pool"
-msgstr "Pool de stockage"
-
-msgid "Storage pool which volume located in"
-msgstr "Pool de stockage dans lequel le volume est situé"
-
-msgid "Storage Volume"
-msgstr "Volume de stockage"
-
-msgid "Storage volume to be attached"
-msgstr "Volume de stockage à attacher"
-
-msgid "File Path"
-msgstr "Chemin d'accès au fichier"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "Chemin d'accès au fichier ISO sur le serveur pour le CD-ROM."
-
-msgid "Attach"
-msgstr "Attacher"
-
msgid "Start"
msgstr "Démarrer"
@@ -1629,6 +1611,38 @@ msgstr "Arrêter"
msgid "Delete"
msgstr "Supprimer"
+msgid "Add a Storage Device to VM"
+msgstr "Ajouter une unité de stockage à la machine virtuelle"
+
+msgid "Device Type"
+msgstr "Type d'unité"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"Type d'unité. Actuellement, \"cdrom\" et \"disk\" seulement sont pris en "
+"charge."
+
+msgid "Storage Pool"
+msgstr "Pool de stockage"
+
+msgid "Storage pool which volume located in"
+msgstr "Pool de stockage dans lequel le volume est situé"
+
+msgid "Storage Volume"
+msgstr "Volume de stockage"
+
+msgid "Storage volume to be attached"
+msgstr "Volume de stockage à attacher"
+
+msgid "File Path"
+msgstr "Chemin d'accès au fichier"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Chemin d'accès au fichier ISO sur le serveur pour le CD-ROM."
+
+msgid "Attach"
+msgstr "Attacher"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"Le nom d'utilisateur ou le mot de passe entré est incorrect. Veuillez "
@@ -1652,6 +1666,9 @@ msgstr "Invités"
msgid "Templates"
msgstr "Modèles"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "Echec d'obtention de la configuration d'application"
@@ -2188,21 +2205,6 @@ msgstr "Oui"
msgid "No"
msgstr "Non"
-msgid "Add a Volume to Storage Pool"
-msgstr "Ajouter un volume au pool de stockage"
-
-msgid "Fetch from remote URL"
-msgstr "Extraire de l'URL distante"
-
-msgid "Enter the remote URL here."
-msgstr "Indiquez ici l'URL distante."
-
-msgid "Upload a file"
-msgstr "Télécharger un fichier"
-
-msgid "Choose the file you want to upload."
-msgstr "Sélectionnez le fichier à télécharger."
-
msgid "Define a New Storage Pool"
msgstr "Définir un nouveau pool de stockage"
@@ -2280,6 +2282,21 @@ msgstr "Adaptateur SCSI"
msgid "Please, wait..."
msgstr "Veuillez patienter..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Ajouter un volume au pool de stockage"
+
+msgid "Fetch from remote URL"
+msgstr "Extraire de l'URL distante"
+
+msgid "Enter the remote URL here."
+msgstr "Indiquez ici l'URL distante."
+
+msgid "Upload a file"
+msgstr "Télécharger un fichier"
+
+msgid "Choose the file you want to upload."
+msgstr "Sélectionnez le fichier à télécharger."
+
msgid "Add Template"
msgstr "Ajouter un modèle"
@@ -2480,3 +2497,10 @@ msgstr "Allocation"
msgid "No templates found."
msgstr "Aucun modèle trouvé."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "Impossible d'obtenir l'accès aux métadonnées de la machine virtuelle "
+#~ "%(name)s. Détails : %(err)s"
diff --git a/po/it_IT.po b/po/it_IT.po
index 5d0b407..8500df5 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -298,13 +298,6 @@ msgstr "Il gruppo o i gruppi '%(groups)s' non esistono"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile ottenere i metadati di accesso della macchina virtuale %(name)s. "
-"Dettagli: %(err)s"
-
msgid "The guest console password must be a string."
msgstr ""
"La password della console della macchina guest deve essere una stringa. "
@@ -388,6 +381,21 @@ msgstr ""
"Errore durante il collegamento del dispositivo di memoria. Dettagli: "
"%(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1481,6 +1489,12 @@ msgstr "Indirizzo MAC"
msgid "Available system users and groups"
msgstr "Utenti e gruppi di sistema disponibili"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Utenti e gruppi di sistema selezionati"
@@ -1523,37 +1537,6 @@ msgstr "Annulla"
msgid "revert"
msgstr "Inverti"
-msgid "Add a Storage Device to VM"
-msgstr "Aggiungi un dispositivo di memoria alla VM"
-
-msgid "Device Type"
-msgstr "Tipo dispositivo"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"Il tipo di dispositivo. Attualmente, sono supportati \"cdrom\" e \"disk\"."
-
-msgid "Storage Pool"
-msgstr "Pool di memoria"
-
-msgid "Storage pool which volume located in"
-msgstr "Pool di memoria in cui si trova il volume"
-
-msgid "Storage Volume"
-msgstr "Volume di memoria"
-
-msgid "Storage volume to be attached"
-msgstr "Volume di memoria oggetto del collegamento"
-
-msgid "File Path"
-msgstr "Percorso file"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "Il percorso file ISO nel server per CDROM."
-
-msgid "Attach"
-msgstr "Allega"
-
msgid "Start"
msgstr "Avvia"
@@ -1587,6 +1570,37 @@ msgstr "Arresta"
msgid "Delete"
msgstr "Elimina"
+msgid "Add a Storage Device to VM"
+msgstr "Aggiungi un dispositivo di memoria alla VM"
+
+msgid "Device Type"
+msgstr "Tipo dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"Il tipo di dispositivo. Attualmente, sono supportati \"cdrom\" e \"disk\"."
+
+msgid "Storage Pool"
+msgstr "Pool di memoria"
+
+msgid "Storage pool which volume located in"
+msgstr "Pool di memoria in cui si trova il volume"
+
+msgid "Storage Volume"
+msgstr "Volume di memoria"
+
+msgid "Storage volume to be attached"
+msgstr "Volume di memoria oggetto del collegamento"
+
+msgid "File Path"
+msgstr "Percorso file"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Il percorso file ISO nel server per CDROM."
+
+msgid "Attach"
+msgstr "Allega"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"Il nome utente o la password immessi non sono corretti. Ripetere "
@@ -1610,6 +1624,9 @@ msgstr "Guest"
msgid "Templates"
msgstr "Modelli"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "Richiamo della configurazione dell'applicazione non riuscito"
@@ -2143,21 +2160,6 @@ msgstr "Sì"
msgid "No"
msgstr "No"
-msgid "Add a Volume to Storage Pool"
-msgstr "Aggiungi un volume al pool di memoria"
-
-msgid "Fetch from remote URL"
-msgstr "Richiama da URL remoto"
-
-msgid "Enter the remote URL here."
-msgstr "Immettere qui l'URL remoto. "
-
-msgid "Upload a file"
-msgstr "Carica un file"
-
-msgid "Choose the file you want to upload."
-msgstr "Selezionare il file da caricare. "
-
msgid "Define a New Storage Pool"
msgstr "Definisci un nuovo pool di memoria"
@@ -2237,6 +2239,21 @@ msgstr "Adattatore SCSI"
msgid "Please, wait..."
msgstr "Attendere..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Aggiungi un volume al pool di memoria"
+
+msgid "Fetch from remote URL"
+msgstr "Richiama da URL remoto"
+
+msgid "Enter the remote URL here."
+msgstr "Immettere qui l'URL remoto. "
+
+msgid "Upload a file"
+msgstr "Carica un file"
+
+msgid "Choose the file you want to upload."
+msgstr "Selezionare il file da caricare. "
+
msgid "Add Template"
msgstr "Aggiungi modello"
@@ -2438,3 +2455,10 @@ msgstr "Assegnazione"
msgid "No templates found."
msgstr "Nessun modello trovato."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "Impossibile ottenere i metadati di accesso della macchina virtuale "
+#~ "%(name)s. Dettagli: %(err)s"
diff --git a/po/ja_JP.po b/po/ja_JP.po
index a95a210..5da8882 100644
--- a/po/ja_JP.po
+++ b/po/ja_JP.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -286,12 +286,6 @@ msgstr "グループ「%(groups)s」は存在しません"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "仮想マシン %(name)s をシャットダウンできません。詳細: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"仮想マシン %(name)s のアクセス・メタデータを取得できません。詳細: %(err)s"
-
msgid "The guest console password must be a string."
msgstr "ゲスト・コンソール・パスワードはストリングでなければなりません。"
@@ -367,6 +361,21 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "メモリー・デバイスの接続エラーです。詳細: %(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1472,6 +1481,12 @@ msgstr "MAC アドレス"
msgid "Available system users and groups"
msgstr "使用可能なシステム・ユーザーおよびグループ"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "選択されたシステム・ユーザーおよびグループ"
@@ -1514,36 +1529,6 @@ msgstr "取消"
msgid "revert"
msgstr "戻す"
-msgid "Add a Storage Device to VM"
-msgstr "VM にストレージ・デバイスを追加"
-
-msgid "Device Type"
-msgstr "デバイス・タイプ"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "デバイス・タイプ。現在、「cdrom」と「disk」がサポートされています。"
-
-msgid "Storage Pool"
-msgstr "ストレージ・プール"
-
-msgid "Storage pool which volume located in"
-msgstr "ボリュームが含まれているストレージ・プール"
-
-msgid "Storage Volume"
-msgstr "ストレージ・ボリューム"
-
-msgid "Storage volume to be attached"
-msgstr "接続されるストレージ・ボリューム"
-
-msgid "File Path"
-msgstr "ファイル・パス"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "サーバー内での CDROM の ISO ファイル・パス。"
-
-msgid "Attach"
-msgstr "接続"
-
msgid "Start"
msgstr "開始"
@@ -1577,6 +1562,36 @@ msgstr "シャットダウン"
msgid "Delete"
msgstr "削除"
+msgid "Add a Storage Device to VM"
+msgstr "VM にストレージ・デバイスを追加"
+
+msgid "Device Type"
+msgstr "デバイス・タイプ"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "デバイス・タイプ。現在、「cdrom」と「disk」がサポートされています。"
+
+msgid "Storage Pool"
+msgstr "ストレージ・プール"
+
+msgid "Storage pool which volume located in"
+msgstr "ボリュームが含まれているストレージ・プール"
+
+msgid "Storage Volume"
+msgstr "ストレージ・ボリューム"
+
+msgid "Storage volume to be attached"
+msgstr "接続されるストレージ・ボリューム"
+
+msgid "File Path"
+msgstr "ファイル・パス"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "サーバー内での CDROM の ISO ファイル・パス。"
+
+msgid "Attach"
+msgstr "接続"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "入力したユーザー名またはパスワードが誤っています。やり直してください。"
@@ -1598,6 +1613,9 @@ msgstr "ゲスト"
msgid "Templates"
msgstr "テンプレート"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "アプリケーション構成を取得できませんでした"
@@ -2123,21 +2141,6 @@ msgstr " はい"
msgid "No"
msgstr " いいえ"
-msgid "Add a Volume to Storage Pool"
-msgstr "ボリュームをストレージ・プールに追加"
-
-msgid "Fetch from remote URL"
-msgstr "リモート URL からフェッチ"
-
-msgid "Enter the remote URL here."
-msgstr "ここにリモート URL を入力します。"
-
-msgid "Upload a file"
-msgstr "ファイルのアップロード"
-
-msgid "Choose the file you want to upload."
-msgstr "アップロードしたいファイルを選択してください。"
-
msgid "Define a New Storage Pool"
msgstr "新規ストレージ・プールの定義"
@@ -2213,6 +2216,21 @@ msgstr "SCSI アダプター"
msgid "Please, wait..."
msgstr "お待ちください..."
+msgid "Add a Volume to Storage Pool"
+msgstr "ボリュームをストレージ・プールに追加"
+
+msgid "Fetch from remote URL"
+msgstr "リモート URL からフェッチ"
+
+msgid "Enter the remote URL here."
+msgstr "ここにリモート URL を入力します。"
+
+msgid "Upload a file"
+msgstr "ファイルのアップロード"
+
+msgid "Choose the file you want to upload."
+msgstr "アップロードしたいファイルを選択してください。"
+
msgid "Add Template"
msgstr "テンプレートの追加"
@@ -2413,3 +2431,9 @@ msgstr "割り振り"
msgid "No templates found."
msgstr "テンプレートが見つかりません。"
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "仮想マシン %(name)s のアクセス・メタデータを取得できません。詳細: %(err)s"
diff --git a/po/kimchi.pot b/po/kimchi.pot
index 1179357..91a70f0 100755
--- a/po/kimchi.pot
+++ b/po/kimchi.pot
@@ -3,12 +3,11 @@
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
@@ -267,11 +266,6 @@ msgstr ""
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr ""
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-
msgid "The guest console password must be a string."
msgstr ""
@@ -340,6 +334,22 @@ msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
#, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
+#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
@@ -1271,6 +1281,12 @@ msgstr ""
msgid "Available system users and groups"
msgstr ""
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr ""
@@ -1313,67 +1329,67 @@ msgstr ""
msgid "revert"
msgstr ""
-msgid "Add a Storage Device to VM"
+msgid "Start"
msgstr ""
-msgid "Device Type"
+msgid "Reset"
msgstr ""
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgid "Pause"
msgstr ""
-msgid "Storage Pool"
+msgid "Resume"
msgstr ""
-msgid "Storage pool which volume located in"
+msgid "Power Off"
msgstr ""
-msgid "Storage Volume"
+msgid "Actions"
msgstr ""
-msgid "Storage volume to be attached"
+msgid "Connect"
msgstr ""
-msgid "File Path"
+msgid "Clone"
msgstr ""
-msgid "The ISO file path in the server for CDROM."
+msgid "Edit"
msgstr ""
-msgid "Attach"
+msgid "Shut Down"
msgstr ""
-msgid "Start"
+msgid "Delete"
msgstr ""
-msgid "Reset"
+msgid "Add a Storage Device to VM"
msgstr ""
-msgid "Pause"
+msgid "Device Type"
msgstr ""
-msgid "Resume"
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
-msgid "Power Off"
+msgid "Storage Pool"
msgstr ""
-msgid "Actions"
+msgid "Storage pool which volume located in"
msgstr ""
-msgid "Connect"
+msgid "Storage Volume"
msgstr ""
-msgid "Clone"
+msgid "Storage volume to be attached"
msgstr ""
-msgid "Edit"
+msgid "File Path"
msgstr ""
-msgid "Shut Down"
+msgid "The ISO file path in the server for CDROM."
msgstr ""
-msgid "Delete"
+msgid "Attach"
msgstr ""
msgid "The username or password you entered is incorrect. Please try again."
@@ -1397,6 +1413,9 @@ msgstr ""
msgid "Templates"
msgstr ""
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr ""
@@ -1878,21 +1897,6 @@ msgstr ""
msgid "No"
msgstr ""
-msgid "Add a Volume to Storage Pool"
-msgstr ""
-
-msgid "Fetch from remote URL"
-msgstr ""
-
-msgid "Enter the remote URL here."
-msgstr ""
-
-msgid "Upload a file"
-msgstr ""
-
-msgid "Choose the file you want to upload."
-msgstr ""
-
msgid "Define a New Storage Pool"
msgstr ""
@@ -1963,6 +1967,21 @@ msgstr ""
msgid "Please, wait..."
msgstr ""
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
msgid "Add Template"
msgstr ""
diff --git a/po/ko_KR.po b/po/ko_KR.po
index 4504a4b..4421f46 100644
--- a/po/ko_KR.po
+++ b/po/ko_KR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -281,13 +281,6 @@ msgstr "그룹 '%(groups)s'이(가) 없습니다."
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "가상 머신 %(name)s을(를) 종료할 수 없습니다. 세부사항: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s의 액세스 권한 메타데이터를 가져올 수 없습니다. 세부사항: "
-"%(err)s"
-
msgid "The guest console password must be a string."
msgstr "게스트 콘솔 비밀번호는 문자열이어야 합니다."
@@ -362,6 +355,21 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "메모리 장치를 연결하는 중 오류가 발생했습니다. 세부사항: %(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1376,6 +1384,12 @@ msgstr "MAC 주소"
msgid "Available system users and groups"
msgstr "사용 가능한 시스템 사용자 및 그룹"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "선택한 시스템 사용자 및 그룹"
@@ -1418,36 +1432,6 @@ msgstr "취소"
msgid "revert"
msgstr "되돌리기"
-msgid "Add a Storage Device to VM"
-msgstr "스토리지 장치를 VM에 추가"
-
-msgid "Device Type"
-msgstr "장치 유형"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "장치 유형. 현재 \"cdrom\" 및 \"disk\"가 지원됩니다."
-
-msgid "Storage Pool"
-msgstr "스토리지 풀"
-
-msgid "Storage pool which volume located in"
-msgstr "볼륨이 위치한 스토리지 풀"
-
-msgid "Storage Volume"
-msgstr "스토리지 볼륨"
-
-msgid "Storage volume to be attached"
-msgstr "연결될 스토리지 볼륨"
-
-msgid "File Path"
-msgstr "파일 경로"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "CDROM을 위한 서버의 ISO 파일 경로입니다."
-
-msgid "Attach"
-msgstr "연결"
-
msgid "Start"
msgstr "시작"
@@ -1481,6 +1465,36 @@ msgstr "종료"
msgid "Delete"
msgstr "삭제"
+msgid "Add a Storage Device to VM"
+msgstr "스토리지 장치를 VM에 추가"
+
+msgid "Device Type"
+msgstr "장치 유형"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "장치 유형. 현재 \"cdrom\" 및 \"disk\"가 지원됩니다."
+
+msgid "Storage Pool"
+msgstr "스토리지 풀"
+
+msgid "Storage pool which volume located in"
+msgstr "볼륨이 위치한 스토리지 풀"
+
+msgid "Storage Volume"
+msgstr "스토리지 볼륨"
+
+msgid "Storage volume to be attached"
+msgstr "연결될 스토리지 볼륨"
+
+msgid "File Path"
+msgstr "파일 경로"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "CDROM을 위한 서버의 ISO 파일 경로입니다."
+
+msgid "Attach"
+msgstr "연결"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"입력한 사용자 이름 또는 비밀번호가 올바르지 않습니다. 다시 시도하십시오."
@@ -1503,6 +1517,9 @@ msgstr "게스트"
msgid "Templates"
msgstr "템플리트"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "애플리케이션 구성을 가져오지 못했습니다."
@@ -2017,21 +2034,6 @@ msgstr "예"
msgid "No"
msgstr "아니오"
-msgid "Add a Volume to Storage Pool"
-msgstr "스토리지 풀에 볼륨 추가"
-
-msgid "Fetch from remote URL"
-msgstr "원격 URL에서 페치"
-
-msgid "Enter the remote URL here."
-msgstr "여기에 원격 URL을 입력하십시오."
-
-msgid "Upload a file"
-msgstr "파일 업로드"
-
-msgid "Choose the file you want to upload."
-msgstr "업로드할 파일을 선택하십시오."
-
msgid "Define a New Storage Pool"
msgstr "새 스토리지 풀 정의"
@@ -2105,6 +2107,21 @@ msgstr "SCSI 어댑터"
msgid "Please, wait..."
msgstr "잠시 기다려 주십시오."
+msgid "Add a Volume to Storage Pool"
+msgstr "스토리지 풀에 볼륨 추가"
+
+msgid "Fetch from remote URL"
+msgstr "원격 URL에서 페치"
+
+msgid "Enter the remote URL here."
+msgstr "여기에 원격 URL을 입력하십시오."
+
+msgid "Upload a file"
+msgstr "파일 업로드"
+
+msgid "Choose the file you want to upload."
+msgstr "업로드할 파일을 선택하십시오."
+
msgid "Add Template"
msgstr "템플리트 추가"
@@ -2305,3 +2322,10 @@ msgstr "할당"
msgid "No templates found."
msgstr "템플리트가 없습니다."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "가상 머신 %(name)s의 액세스 권한 메타데이터를 가져올 수 없습니다. 세부사"
+#~ "항: %(err)s"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 61ffe9e..0064985 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -295,13 +295,6 @@ msgstr "O(s) grupo(s) '%(groups)s' não existem"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "Não é possível encerrar a máquina virtual %(name)s. Detalhes: %(err)s "
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Não é possível obter metadados de acesso da máquina virtual %(name)s. "
-"Detalhes: %(err)s "
-
msgid "The guest console password must be a string."
msgstr "A senha do console do convidado deve ser uma sequência."
@@ -378,6 +371,21 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Erro ao anexar dispositivo de memória. Detalhes: %(error)s "
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr "Não é possível ligar a VM '%(name)s' porque ela está em execução."
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1487,6 +1495,12 @@ msgstr "Endereço MAC"
msgid "Available system users and groups"
msgstr "Usuários e grupos do sistema disponível"
+msgid "Users"
+msgstr "Usuários"
+
+msgid "Groups"
+msgstr "Grupos"
+
msgid "Selected system users and groups"
msgstr "Usuários e grupos do sistema selecionado"
@@ -1529,37 +1543,6 @@ msgstr "Cancelar"
msgid "revert"
msgstr "reverter"
-msgid "Add a Storage Device to VM"
-msgstr "Incluir um Dispositivo de Armazenamento na VM"
-
-msgid "Device Type"
-msgstr "Tipo de Dispositivo"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"O tipo de dispositivo. Atualmente, \"cdrom\" e \"disk\" são suportados."
-
-msgid "Storage Pool"
-msgstr "storage pool"
-
-msgid "Storage pool which volume located in"
-msgstr "Conjunto de armazenamentos no qual o volume está localizado"
-
-msgid "Storage Volume"
-msgstr "Volume de Armazenamento"
-
-msgid "Storage volume to be attached"
-msgstr "Volume de armazenamento a ser conectado"
-
-msgid "File Path"
-msgstr "Caminho do arquivo"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "O caminho do arquivo ISO no servidor para o CDROM."
-
-msgid "Attach"
-msgstr "Anexar"
-
msgid "Start"
msgstr "Iniciar"
@@ -1593,6 +1576,37 @@ msgstr "Encerrar"
msgid "Delete"
msgstr "Excluir"
+msgid "Add a Storage Device to VM"
+msgstr "Incluir um Dispositivo de Armazenamento na VM"
+
+msgid "Device Type"
+msgstr "Tipo de Dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"O tipo de dispositivo. Atualmente, \"cdrom\" e \"disk\" são suportados."
+
+msgid "Storage Pool"
+msgstr "storage pool"
+
+msgid "Storage pool which volume located in"
+msgstr "Conjunto de armazenamentos no qual o volume está localizado"
+
+msgid "Storage Volume"
+msgstr "Volume de Armazenamento"
+
+msgid "Storage volume to be attached"
+msgstr "Volume de armazenamento a ser conectado"
+
+msgid "File Path"
+msgstr "Caminho do arquivo"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "O caminho do arquivo ISO no servidor para o CDROM."
+
+msgid "Attach"
+msgstr "Anexar"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "O nome de usuário ou senha inserido está incorreto. Tente novamente."
@@ -1614,6 +1628,9 @@ msgstr "Máquinas Virtuais"
msgid "Templates"
msgstr "Modelos"
+msgid "Administration"
+msgstr "Administração"
+
msgid "Failed to get application configuration"
msgstr "Falha ao obter a configuração do aplicativo"
@@ -2144,21 +2161,6 @@ msgstr "Sim"
msgid "No"
msgstr "Não"
-msgid "Add a Volume to Storage Pool"
-msgstr "Incluir um volume no conjunto de armazenamentos"
-
-msgid "Fetch from remote URL"
-msgstr "Buscar a partir da URL remota"
-
-msgid "Enter the remote URL here."
-msgstr "Inserir a URL remota aqui."
-
-msgid "Upload a file"
-msgstr "Fazer upload de um arquivo"
-
-msgid "Choose the file you want to upload."
-msgstr "Escolher o arquivo do qual você deseja fazer upload."
-
msgid "Define a New Storage Pool"
msgstr "Definir um novo storage pool"
@@ -2235,6 +2237,21 @@ msgstr "Adaptador SCSI"
msgid "Please, wait..."
msgstr "Aguarde..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Incluir um volume no conjunto de armazenamentos"
+
+msgid "Fetch from remote URL"
+msgstr "Buscar a partir da URL remota"
+
+msgid "Enter the remote URL here."
+msgstr "Inserir a URL remota aqui."
+
+msgid "Upload a file"
+msgstr "Fazer upload de um arquivo"
+
+msgid "Choose the file you want to upload."
+msgstr "Escolher o arquivo do qual você deseja fazer upload."
+
msgid "Add Template"
msgstr "Incluir modelo"
@@ -2435,3 +2452,10 @@ msgstr "Alocação"
msgid "No templates found."
msgstr "Nenhum modelo localizado."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "Não é possível obter metadados de acesso da máquina virtual %(name)s. "
+#~ "Detalhes: %(err)s "
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 804ff61..1dc4421 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -286,13 +286,6 @@ msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr ""
"Не удалось завершить работу виртуальной машины %(name)s. Сведения: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось получить доступ к метаданным виртуальной машины %(name)s. "
-"Сведения: %(err)s"
-
msgid "The guest console password must be a string."
msgstr "Пароль консоли гостевой системы должен быть строкой."
@@ -378,6 +371,21 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Ошибка подключения устройства памяти. Сведения: %(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1421,6 +1429,12 @@ msgstr "MAC-адрес"
msgid "Available system users and groups"
msgstr "Доступные системные пользователи и группы"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Выбранные системные пользователи и группы"
@@ -1463,36 +1477,6 @@ msgstr "Отмена"
msgid "revert"
msgstr "восстановить"
-msgid "Add a Storage Device to VM"
-msgstr "Добавить устройство хранения в VM"
-
-msgid "Device Type"
-msgstr "Тип устройства"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "Тип устройства. В данный момент поддерживается \"cdrom\" и \"disk\"."
-
-msgid "Storage Pool"
-msgstr "Пул памяти"
-
-msgid "Storage pool which volume located in"
-msgstr "Том пула памяти находится в"
-
-msgid "Storage Volume"
-msgstr "Том памяти"
-
-msgid "Storage volume to be attached"
-msgstr "Том подключен"
-
-msgid "File Path"
-msgstr "Путь к файлу"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "Путь к файлу ISO для CDROM на сервере."
-
-msgid "Attach"
-msgstr "Подключить"
-
msgid "Start"
msgstr "Запустить"
@@ -1526,6 +1510,36 @@ msgstr "Завершить работу"
msgid "Delete"
msgstr "Удалить"
+msgid "Add a Storage Device to VM"
+msgstr "Добавить устройство хранения в VM"
+
+msgid "Device Type"
+msgstr "Тип устройства"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "Тип устройства. В данный момент поддерживается \"cdrom\" и \"disk\"."
+
+msgid "Storage Pool"
+msgstr "Пул памяти"
+
+msgid "Storage pool which volume located in"
+msgstr "Том пула памяти находится в"
+
+msgid "Storage Volume"
+msgstr "Том памяти"
+
+msgid "Storage volume to be attached"
+msgstr "Том подключен"
+
+msgid "File Path"
+msgstr "Путь к файлу"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Путь к файлу ISO для CDROM на сервере."
+
+msgid "Attach"
+msgstr "Подключить"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "Указано неверное имя пользователя или пароль. Введите еще раз."
@@ -1547,6 +1561,9 @@ msgstr "Гостевые системы"
msgid "Templates"
msgstr "Шаблоны"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "Не удалось получить конфигурацию приложения"
@@ -2069,21 +2086,6 @@ msgstr "Да"
msgid "No"
msgstr "Нет"
-msgid "Add a Volume to Storage Pool"
-msgstr "Добавить том в пул памяти"
-
-msgid "Fetch from remote URL"
-msgstr "Загрузить с удаленного URL"
-
-msgid "Enter the remote URL here."
-msgstr "Введите сюда удаленный URL."
-
-msgid "Upload a file"
-msgstr "Передать файл"
-
-msgid "Choose the file you want to upload."
-msgstr "Выберите файл для передачи."
-
msgid "Define a New Storage Pool"
msgstr "Создать пул памяти"
@@ -2156,6 +2158,21 @@ msgstr "Адаптер SCSI"
msgid "Please, wait..."
msgstr "Подождите..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Добавить том в пул памяти"
+
+msgid "Fetch from remote URL"
+msgstr "Загрузить с удаленного URL"
+
+msgid "Enter the remote URL here."
+msgstr "Введите сюда удаленный URL."
+
+msgid "Upload a file"
+msgstr "Передать файл"
+
+msgid "Choose the file you want to upload."
+msgstr "Выберите файл для передачи."
+
msgid "Add Template"
msgstr "Добавить шаблон"
@@ -2356,3 +2373,10 @@ msgstr "Выделение"
msgid "No templates found."
msgstr "Не найдены шаблоны."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "Не удалось получить доступ к метаданным виртуальной машины %(name)s. "
+#~ "Сведения: %(err)s"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 7d3723b..97ddf56 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -273,11 +273,6 @@ msgstr "组“%(groups)s”不存在"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "无法关闭虚拟机 %(name)s。详细信息:%(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "无法访问虚拟机 %(name)s 的元数据。详细信息:%(err)s"
-
msgid "The guest console password must be a string."
msgstr "访客控制台密码必须是字符串。"
@@ -346,6 +341,21 @@ msgstr "主机的 Libvirt 版本不支持内存设备。Libvirt 必须 >= 1.2.14
msgid "Error attaching memory device. Details: %(error)s"
msgstr "连接内存设备时出错。详细信息:%(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1292,6 +1302,12 @@ msgstr "MAC 地址"
msgid "Available system users and groups"
msgstr "可用系统用户和组"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "所选系统用户和组"
@@ -1334,36 +1350,6 @@ msgstr "取消"
msgid "revert"
msgstr "还原"
-msgid "Add a Storage Device to VM"
-msgstr "将存储设备添加至 VM"
-
-msgid "Device Type"
-msgstr "设备类型"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "设备类型。当前支持“cdrom”和“disk”。"
-
-msgid "Storage Pool"
-msgstr "存储池"
-
-msgid "Storage pool which volume located in"
-msgstr "卷位于以下位置的存储池"
-
-msgid "Storage Volume"
-msgstr "存储卷"
-
-msgid "Storage volume to be attached"
-msgstr "要连接的存储卷"
-
-msgid "File Path"
-msgstr "文件路径"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "CDROM 服务器中的 ISO 文件。"
-
-msgid "Attach"
-msgstr "连接"
-
msgid "Start"
msgstr "启动"
@@ -1397,6 +1383,36 @@ msgstr "关闭"
msgid "Delete"
msgstr "删除"
+msgid "Add a Storage Device to VM"
+msgstr "将存储设备添加至 VM"
+
+msgid "Device Type"
+msgstr "设备类型"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "设备类型。当前支持“cdrom”和“disk”。"
+
+msgid "Storage Pool"
+msgstr "存储池"
+
+msgid "Storage pool which volume located in"
+msgstr "卷位于以下位置的存储池"
+
+msgid "Storage Volume"
+msgstr "存储卷"
+
+msgid "Storage volume to be attached"
+msgstr "要连接的存储卷"
+
+msgid "File Path"
+msgstr "文件路径"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "CDROM 服务器中的 ISO 文件。"
+
+msgid "Attach"
+msgstr "连接"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "您所输入的用户名或密码不正确。请重试。"
@@ -1418,6 +1434,9 @@ msgstr "访客"
msgid "Templates"
msgstr "模板"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "未能获取应用程序配置"
@@ -1909,21 +1928,6 @@ msgstr "是"
msgid "No"
msgstr "否"
-msgid "Add a Volume to Storage Pool"
-msgstr "将卷添加至存储池"
-
-msgid "Fetch from remote URL"
-msgstr "从远程 URL 中访存"
-
-msgid "Enter the remote URL here."
-msgstr "在此处输入远程 URL。"
-
-msgid "Upload a file"
-msgstr "上载文件"
-
-msgid "Choose the file you want to upload."
-msgstr "选择要上载的文件。"
-
msgid "Define a New Storage Pool"
msgstr "定义新存储池"
@@ -1994,6 +1998,21 @@ msgstr "SCSI 适配器"
msgid "Please, wait..."
msgstr "请稍等..."
+msgid "Add a Volume to Storage Pool"
+msgstr "将卷添加至存储池"
+
+msgid "Fetch from remote URL"
+msgstr "从远程 URL 中访存"
+
+msgid "Enter the remote URL here."
+msgstr "在此处输入远程 URL。"
+
+msgid "Upload a file"
+msgstr "上载文件"
+
+msgid "Choose the file you want to upload."
+msgstr "选择要上载的文件。"
+
msgid "Add Template"
msgstr "添加模板"
@@ -2194,3 +2213,8 @@ msgstr "分配"
msgid "No templates found."
msgstr "找不到任何模板。"
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr "无法访问虚拟机 %(name)s 的元数据。详细信息:%(err)s"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index c772f99..e169167 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -85,9 +85,8 @@ msgstr "\"_passthrough\" 應該是 \"true\" 或 \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr "\"_passthrough_affected_by\" 應該是裝置名稱字串"
-#, fuzzy
msgid "\"_available_only\" should be \"true\" or \"false\""
-msgstr "\"_passthrough\" 應該是 \"true\" 或 \"false\""
+msgstr ""
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
@@ -274,11 +273,6 @@ msgstr "群組 '%(groups)s' 不存在"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "無法關閉虛擬機器 %(name)s。詳細資料:%(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "無法取得虛擬機器 %(name)s 的存取 meta 資料。詳細資料:%(err)s"
-
msgid "The guest console password must be a string."
msgstr "客體主控台密碼必須是字串。"
@@ -348,6 +342,21 @@ msgstr "主機的 libvirt 版本不支援記憶體裝置。Libvirt 必須大於
msgid "Error attaching memory device. Details: %(error)s"
msgstr "連接記憶體裝置時發生錯誤。詳細資料:%(error)s"
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1293,6 +1302,12 @@ msgstr "MAC 位址"
msgid "Available system users and groups"
msgstr "可用的系統使用者及群組"
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "選定的系統使用者及群組"
@@ -1335,36 +1350,6 @@ msgstr "取消 "
msgid "revert"
msgstr "回復"
-msgid "Add a Storage Device to VM"
-msgstr "將儲存裝置新增至 VM"
-
-msgid "Device Type"
-msgstr "裝置類型"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "裝置類型。目前支援 \"cdrom\" 和 \"disk\"。"
-
-msgid "Storage Pool"
-msgstr "儲存區"
-
-msgid "Storage pool which volume located in"
-msgstr "磁區所在的儲存區"
-
-msgid "Storage Volume"
-msgstr "儲存磁區"
-
-msgid "Storage volume to be attached"
-msgstr "要連接的儲存磁區"
-
-msgid "File Path"
-msgstr "檔案路徑"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "CDROM 的 ISO 檔案路徑在伺服器中。"
-
-msgid "Attach"
-msgstr "連接"
-
msgid "Start"
msgstr "開始"
@@ -1398,6 +1383,36 @@ msgstr "關閉"
msgid "Delete"
msgstr "刪除"
+msgid "Add a Storage Device to VM"
+msgstr "將儲存裝置新增至 VM"
+
+msgid "Device Type"
+msgstr "裝置類型"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "裝置類型。目前支援 \"cdrom\" 和 \"disk\"。"
+
+msgid "Storage Pool"
+msgstr "儲存區"
+
+msgid "Storage pool which volume located in"
+msgstr "磁區所在的儲存區"
+
+msgid "Storage Volume"
+msgstr "儲存磁區"
+
+msgid "Storage volume to be attached"
+msgstr "要連接的儲存磁區"
+
+msgid "File Path"
+msgstr "檔案路徑"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "CDROM 的 ISO 檔案路徑在伺服器中。"
+
+msgid "Attach"
+msgstr "連接"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "您輸入的使用者名稱或密碼不正確。請重試。"
@@ -1419,6 +1434,9 @@ msgstr "客體"
msgid "Templates"
msgstr "範本"
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr "無法取得應用程式配置"
@@ -1911,21 +1929,6 @@ msgstr "是"
msgid "No"
msgstr "否"
-msgid "Add a Volume to Storage Pool"
-msgstr "將磁區新增至儲存區"
-
-msgid "Fetch from remote URL"
-msgstr "從遠端 URL 提取"
-
-msgid "Enter the remote URL here."
-msgstr "在這裡輸入遠端 URL。"
-
-msgid "Upload a file"
-msgstr "上傳檔案"
-
-msgid "Choose the file you want to upload."
-msgstr "選擇要上傳的檔案。"
-
msgid "Define a New Storage Pool"
msgstr "定義新的儲存區"
@@ -1996,6 +1999,21 @@ msgstr "SCSI 配接卡"
msgid "Please, wait..."
msgstr "請稍候..."
+msgid "Add a Volume to Storage Pool"
+msgstr "將磁區新增至儲存區"
+
+msgid "Fetch from remote URL"
+msgstr "從遠端 URL 提取"
+
+msgid "Enter the remote URL here."
+msgstr "在這裡輸入遠端 URL。"
+
+msgid "Upload a file"
+msgstr "上傳檔案"
+
+msgid "Choose the file you want to upload."
+msgstr "選擇要上傳的檔案。"
+
msgid "Add Template"
msgstr "新增範本"
@@ -2196,3 +2214,8 @@ msgstr "配置"
msgid "No templates found."
msgstr "找不到範本。"
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr "無法取得虛擬機器 %(name)s 的存取 meta 資料。詳細資料:%(err)s"
diff --git a/ui/pages/guest-edit.html.tmpl b/ui/pages/guest-edit.html.tmpl
index 389f3c5..a56d96c 100644
--- a/ui/pages/guest-edit.html.tmpl
+++ b/ui/pages/guest-edit.html.tmpl
@@ -122,8 +122,8 @@
<input type="text" id="permission-avail-searchBox">
<div class="body">
<div class="head">
- <div class="column column-user"><div class="item">Users</div></div>
- <div class="column column-group"><div class="item">Groups</div></div>
+ <div class="column column-user"><div class="item">$_("Users")</div></div>
+ <div class="column column-group"><div class="item">$_("Groups")</div></div>
</div>
<div id="permission-avail-users" class="column column-user"></div>
<div id="permission-avail-groups" class="column column-group"></div>
@@ -138,8 +138,8 @@
<input type="text" id="permission-sel-searchBox">
<div class="body">
<div class="head">
- <div class="column column-user"><div class="item">Users</div></div>
- <div class="column column-group"><div class="item">Groups</div></div>
+ <div class="column column-user"><div class="item">$_("Users")</div></div>
+ <div class="column column-group"><div class="item">$_("Groups")</div></div>
</div>
<div id="permission-sel-users" class="column column-user"></div>
<div id="permission-sel-groups" class="column column-group"></div>
--
2.1.0
2
1
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
configure.ac | 1 +
ui/Makefile.am | 2 +-
ui/base64/Makefile.am | 19 +++++++++++++++++++
3 files changed, 21 insertions(+), 1 deletion(-)
create mode 100644 ui/base64/Makefile.am
diff --git a/configure.ac b/configure.ac
index 0261b5f..9eee3c7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -105,6 +105,7 @@ AC_CONFIG_FILES([
plugins/sample/ui/js/Makefile
plugins/sample/ui/pages/Makefile
ui/Makefile
+ ui/base64/Makefile
ui/css/Makefile
ui/images/Makefile
ui/images/theme-default/Makefile
diff --git a/ui/Makefile.am b/ui/Makefile.am
index d541355..2209ada 100644
--- a/ui/Makefile.am
+++ b/ui/Makefile.am
@@ -15,7 +15,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-SUBDIRS = css images js libs pages spice-html5
+SUBDIRS = base64 css images js libs pages spice-html5
uidir = $(datadir)/kimchi/ui
diff --git a/ui/base64/Makefile.am b/ui/base64/Makefile.am
new file mode 100644
index 0000000..6ce3ca8
--- /dev/null
+++ b/ui/base64/Makefile.am
@@ -0,0 +1,19 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+jquerybase64dir = $(datadir)/kimchi/ui/base64
+dist_jquerybase64_DATA = $(wildcard *.js) $(NULL)
--
2.1.0
2
2
Hi team,
As we discussed on the chat today, I need help creating a widget for the new-ui while I'm still working on the current Grid widget for Hosts, Storage and Network tabs.
According to the new-ui design spec doc, in the Host tab, Debug Reports and Repositories panels shouldn't be presented as tables but as lists with each line having a drop-down button on the right instead of one on the top below the panel header:
[cid:image001.png@01D0E586.91066C40]
This is the current json response for Repositories:
[
{
"config":{
"gpgcheck":false,
"gpgkey":"file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch",
"metalink":"https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$ba…",
"mirrorlist":"",
"repo_name":"Fedora $releasever - $basearch"
},
"repo_id":"fedora",
"enabled":true,
"baseurl":""
}
]
And Debug Reports:
[
{
"time":"2015-08-31-15:13:10",
"name":"test2",
"uri":"plugins/kimchi/data/debugreports/test2.tar.xz"
},
{
"time":"2015-08-31-15:12:57",
"name":"test",
"uri":"plugins/kimchi/data/debugreports/test.tar.xz"
}
]
I've planned the following HTML output for this widget:
- A <i class="fa fa-power-off"></i> tag, empty when repository is not enabled;
- repo_id: Displays the repository name
- repo_name: Repository description
- Bootstrap modal button (don't worry about styles since I'm still customizing it)
Reference: http://plnkr.co/edit/SgQcpfu5b5vVXWD9imND?p=preview
For debug reports lists:
-name;
-time;
- Bootstrap modal button (don't worry about styles since I'm still customizing it)
It is very important that we keep the same model from kimchi.hosts.js by replacing only the current widget with the new one (example: repositoriesGrid = new kimchi.widget.Grid({ }); to repositoriesGrid = new kimchi.widget.List({ }); ).
I don't think it is necessary to fetch the whole branch and apply the patches to edit kimchi files, this can be done using www.jsfiddle.net<http://www.jsfiddle.net>, www.jsbin.com<http://www.jsbin.com> , http://plnkr.co/ or http://codepen.io/ (I suggest plnkr or jsfiddle since we can easily include jQuery, FonAwesome and Bootstrap from their CDN servers).
Thanks,
Samuel
2
2
[PATCH 16/17] Ginger Base : base plugin ui/config, make and robot files
by chandra@linux.vnet.ibm.com 11 Sep '15
by chandra@linux.vnet.ibm.com 11 Sep '15
11 Sep '15
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/Makefile.am | 20 ++++++++++++++++++++
plugins/gingerbase/ui/config/Makefile.am | 22 ++++++++++++++++++++++
plugins/gingerbase/ui/config/tab-ext.xml | 10 ++++++++++
plugins/gingerbase/ui/robots.txt | 2 ++
4 files changed, 54 insertions(+)
create mode 100644 plugins/gingerbase/ui/Makefile.am
create mode 100644 plugins/gingerbase/ui/config/Makefile.am
create mode 100644 plugins/gingerbase/ui/config/tab-ext.xml
create mode 100644 plugins/gingerbase/ui/robots.txt
diff --git a/plugins/gingerbase/ui/Makefile.am b/plugins/gingerbase/ui/Makefile.am
new file mode 100644
index 0000000..e9d7b94
--- /dev/null
+++ b/plugins/gingerbase/ui/Makefile.am
@@ -0,0 +1,20 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = config css images js libs pages
+
+uidir = $(datadir)/wok/plugins/gingerbase/ui
diff --git a/plugins/gingerbase/ui/config/Makefile.am b/plugins/gingerbase/ui/config/Makefile.am
new file mode 100644
index 0000000..d750a99
--- /dev/null
+++ b/plugins/gingerbase/ui/config/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+xmldir = $(datadir)/wok/plugins/gingerbase/ui/config
+
+dist_xml_DATA = \
+ tab-ext.xml \
+ $(NULL)
diff --git a/plugins/gingerbase/ui/config/tab-ext.xml b/plugins/gingerbase/ui/config/tab-ext.xml
new file mode 100644
index 0000000..2d2d9bd
--- /dev/null
+++ b/plugins/gingerbase/ui/config/tab-ext.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<tabs-ext>
+ <tab>
+ <access role="admin" mode="admin"/>
+ <access role="user" mode="none"/>
+
+ <title>Host</title>
+ <path>plugins/gingerbase/host.html</path>
+ </tab>
+</tabs-ext>
diff --git a/plugins/gingerbase/ui/robots.txt b/plugins/gingerbase/ui/robots.txt
new file mode 100644
index 0000000..1f53798
--- /dev/null
+++ b/plugins/gingerbase/ui/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
--
2.1.0
3
2
11 Sep '15
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/images/Makefile.am | 22 ++++++++++++++++++++++
plugins/gingerbase/ui/images/icon-centos.png | Bin 0 -> 4734 bytes
plugins/gingerbase/ui/images/icon-debian.png | Bin 0 -> 4239 bytes
plugins/gingerbase/ui/images/icon-fedora.png | Bin 0 -> 4449 bytes
plugins/gingerbase/ui/images/icon-gentoo.png | Bin 0 -> 15307 bytes
plugins/gingerbase/ui/images/icon-opensuse.png | Bin 0 -> 3046 bytes
plugins/gingerbase/ui/images/icon-ubuntu.png | Bin 0 -> 4818 bytes
plugins/gingerbase/ui/images/icon-vm.png | Bin 0 -> 2976 bytes
plugins/gingerbase/ui/images/logo.ico | Bin 0 -> 1214 bytes
9 files changed, 22 insertions(+)
create mode 100644 plugins/gingerbase/ui/images/Makefile.am
create mode 100644 plugins/gingerbase/ui/images/icon-centos.png
create mode 100644 plugins/gingerbase/ui/images/icon-debian.png
create mode 100644 plugins/gingerbase/ui/images/icon-fedora.png
create mode 100644 plugins/gingerbase/ui/images/icon-gentoo.png
create mode 100644 plugins/gingerbase/ui/images/icon-opensuse.png
create mode 100644 plugins/gingerbase/ui/images/icon-ubuntu.png
create mode 100644 plugins/gingerbase/ui/images/icon-vm.png
create mode 100644 plugins/gingerbase/ui/images/logo.ico
diff --git a/plugins/gingerbase/ui/images/Makefile.am b/plugins/gingerbase/ui/images/Makefile.am
new file mode 100644
index 0000000..99defe8
--- /dev/null
+++ b/plugins/gingerbase/ui/images/Makefile.am
@@ -0,0 +1,22 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SUBDIRS = theme-default
+
+imagedir = $(datadir)/wok/plugins/gingerbase/ui/images
+
+dist_image_DATA = *.png *.ico
diff --git a/plugins/gingerbase/ui/images/icon-centos.png b/plugins/gingerbase/ui/images/icon-centos.png
new file mode 100644
index 0000000000000000000000000000000000000000..5afb7b4b63462412d825f63542beb1f7e26b3d7f
GIT binary patch
literal 4734
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
M07*qoM6N<$f~4IfuK)l5
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/icon-debian.png b/plugins/gingerbase/ui/images/icon-debian.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff49a39696fdfa5f232b0e79de04d90af6557111
GIT binary patch
literal 4239
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
D^V29c
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/icon-fedora.png b/plugins/gingerbase/ui/images/icon-fedora.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b9dd06d1f766a3285cd0fb587c0be4114bfac47
GIT binary patch
literal 4449
zcmaJ_c{J2t*#FKj_9goWk+p>ETQP%#7_w#Gml9b*CXBIV-zj9vQiQRDDBCEzWGAvU
zmPupzp|OPVj`RNep7-4I+~?lso^#K=_dK8H`8+rNzM&2y-DNre02uXj@0gHv_=V6=
zk^8UePD5lx<*cuB2ROfIZ`#W<$rf5)T`PY8pl7=f5b!!5N;Xml=pnSJ7bv+InZ>uS
z*nKCP_&m%k1GIdeJaO|5AWs26>#3VlfSap8kVn8H0UbTWeOD<rY5=&@qjyKc3^}(|
z@I1g~s-O>MlqYGG5wxjnsL9DnNqZHp3obSjF;FgZ@?dg`!8B6HOH&x|y`n8p!H#~N
z7I?)J3(r+q%QCs96+s2QTIQ_RuQ?9L7%SeoYL8p^AUR;Yln1LGkM2GQ8P7ajZQD^%
zRaFl&I&42VTU<I@2tgkPX~Z(|sRsNWE!O%!2c>LZ9-(BiTi@~KygD^NgjoPg*syLT
zIPm)xu9f2lYPAnfJPHIo%JZf0z2d9ACug-L_>96w43>woPc5T&T-6()-~=qdi4mC}
z%mV1^E+gqJclLt?KLa0hg0KGf)%8Z_Dvg}F2@T+x>5QDg69Wj~euiBLoY6Pv!}+ve
zB$f?(uV`kXoF2}HLtqiuGq_vI?<Phh4RR4r><$2x8Io9+f0c0+C00;`fliI93`^e_
z<8D%3p;%AK&=`ESY+p3fV9$je?M{UhQgbGcZ^SoYCDm*3X;R@X12Clxy;P@wQjV5!
zJke|X%U7tpCMgixCk7l#OY>|5e)9BI{v`>2da%v1Txjbo4I9z4dQNM%&>kIG91!-$
z&+)|wfyGD})H1JNxXdAWco-=ly`SV^`?uXHU(t<Wtp}3D_4ArUU1$ix!Y8`-0AR$Z
z$@6YIpNTnqAQ04aoi)8>sv<l??TwbBS;B|x<W!DvQj)Cb#WpJmYhNa={6JZ^7sm-Z
zOZByxv0?i%)C6YM-R6E4Ey=nccp@(^5$yZPb6u|PjY)|DuH2|-aA8Qw<-lX3Rj|Dn
z8dN)XZ;SLm6GI($#2h8RY6cH6p|rV+0Wu`fRnz^om6eXiPhhx==cbp;s?*=4TvAd$
zp#AkI@{Y1@g&S<F<NL2WzTS$G5i*IZx59~7q+~j}>-gb*XX?3JxskZV%TS<v*uei`
z94fgTYQVXdAT9$%bVo+jaB%?igJR!L?E1P8W5#j}2Eiw_K)FZ!Y0;uD_lVk&k+RqN
zxAv2xl2V;ZZY#cpx7oTLU2YTu+v`owR^(D6b0S1+5m*5z@-NAzh0sec1C{+rFWT*L
zf@)}w{xX1fY_z0qed6~NnSXL|{Tj&jl*y1o{i&){tFQHg!MT|q{-+&EBQY+xT$)}D
z%!t}-j)bgh&gm>R(OU5QkH|T;Df|1kdsYi5WA%ku)fNi(dK?s1a5X=b%Xa(qbCv4=
z+20c)KAnYP(qJJ64BIx({2mP6i(^ggJm664Dn_X^wC6<1MAbaQgM2>EE3EjBfp1fr
zdAtbC8&1G?pu4@y@GphxDRF-P4x_KtyP(BjXH(@~&=Mm58uV344^D!AbBO~>ucE-5
zmcMyyrvL8zz|F#sF#hTK0*{eyXh&5pv1rSg@QfcLS@0JErlAu0u1PK8_BQK5l1Bf{
zvSJ}kiQ>@5Fc#WhOU-T-10|5$II;dLKoR8Mq#35?!NT9x2DT~G`@}Z0j9=nML5ga<
zj|SzT_2!16osFt*@eGPvSLdhXe{?oeG)$$C-zNN2#9EMl*}><tiOeyrF|G&p#AN`H
z+AqitXJw<zI~=#^q>!1bJyOANu(2>ieIG7hl$dIS=u-KHCC4})@jko7LkfVoXNF>e
zh}tb%Fne58L5NAMWfV&Y@x3M8jmbuEV7UG;+_Xs&JN!r@eB$iPpFN%Vzh$|q3Bhxp
zX@Sv}yl72*>1a6`iq?X#cLP$`wVHalOP?{<Z39RF+B3Bz*PDdtDmIKrJS~{96*yk_
zIBOs62>sCdZ)Ejz!ny?3Zs2O7yQ5;BiqE?8>`e2s7e{M@OI80EcJDKv@iE@}$0YH6
zytqdBy4B3w1<*_xBxbA$MIqbV?5jgTq$?;A>L2(I_4?oDNuk~^doKvr__j0F22^K~
zAeP<zJ7c$~R;t!^I2dDAs?V><)k8CcSvNc~QSD>SJlh#yGizH@eZb<4Mpm|pn?vhH
z6&0=?*;^<wHz8HT-XP)`SojghuxaFaYyybvLF&%)J|?N_3-V?eCFs2ZILR(_Y+VO%
zd5oPh)4)kCO@Xe8pg7^)H61$onBrIQshd<%(~*F@2MLt0xyPg14BI!JrPJ(TN$Rbh
zL|I>8fRd`jLY`K`xY6jH(heOoX-{jUtfe{)+p`gq^41fyo^dPWK!=?wllzl#xrtzk
z@SwG^1od}*J&<jU=?#A`pKO>H*Ghs3lU*^r0JZct-t#eVoOVO6#^A-~3E`%Jk7HwH
zMq*~IL{I)9J4^m*W@f6eG<bso_S{s_2amZT1v)EB+qdq~=PI&-eK%H_m_28e4L)i@
z&d^!N3MDbhH#Xr;2sCJVP%mLS{@_`etT4g~5VZri_x{l*)Tf%d{{xkfrp*#~SU_gK
z<@w9|jD)1+Ie%Yyyz=|Lu8Ov|s$Doro+apCBW-08k-q$!p^CWj<OkSP37?P?h}Y_|
z2{{5WxYI{Emi0Ti;aX&qWEGL@mTN}s_Nal}zp<sE#x}6kz;@Kxq(VTNZXAuM991U7
zrGqcA!C+f_(T`=fS)7mbejJK;{Q-ysHMBz$8yFfem!hsScge$X%<jp**7*%fKUWI~
zsrvu;HXk;8+@EWe+|3$#5XfWHzN=u@z9B}J&FZHq8JKj(WilF4r+jbVMostTwOih{
zr+ZcJ{CiGmA3>hG3vJ8w`F@|2-9FkG-t_r{h(g78Xf-8h_D*^wZ5#m}56z`#^OeO4
zUaYL<l97|5PlCvaD`=B~FukamZ{0a}QzDjsp}N6#LI+Gj8P~=gFJf2JMO2i!c6o1(
z|7L!P2Yxr}v6#Q@`{C}GTX{4=ij}+2h<ujtS$oZ~tXWIC*jo990qm-{n02hDW;!n9
z-%lo1uf@`7p|VZ2*B`8mkKI<TSL92C*v)$@ILSUfH%Jt04c$RI_NAphO0ATM10~bL
zvGyqO=RJdaJAsGV9y_$A_Bpj4ph<-x&+zz1un4WD4TeLrX25C#?DaB}J@Z`2Yks!U
zW6#Ae{YmSsn6|q~I<$&AU7bPxqW!TEZ1)<khqsl`Rj<7d*{xcfMT8hxHh_<c4iCnE
zu<*Ku@(WE`r=mwhzZ4+8y3rx1L*%amnNu2FKmI;Qjym%TBW-d%LzQCuc}iu{&8vd;
zV~IK=yb1Nvzf!1z2|=T4KjG+~8roynSx)$RD4>B=-wvSE3cj4l>i4J9<JUU}Mc>6F
zal<0Z-T@c7*nB#vI_n$-qOi6K5XASp>?<tv&*7pY<x&Kb;+9v*t}mDK?MP^%V6TvH
z$ytJ8c+z9gDpzV(&O`n5ztCSb?j>ql-6!YjLm%IHQ+v9SdXqLxpKoy=+ialsE3=yj
zis_}JuK>y@7SEottnK83z)N29$xx%4=G))r+Bbdv%Dw#@XPlx+W;`|5L95xxrfssK
z@qUrRCvgG%54KbU>nX*6MZ+PZq3#@qjo=n&;;3n}+5#k<jl<`yf5V?rAanSA3z7PD
zsOs_iV!j_0*FpWcE3iR>AO$u8Vf?)TW7UM3?>!Xg+8l^Y6p8FKT%pNDPeI5jHFhup
z%|LcvU1!^J83oFSz}KwdU4rPbyBXcC3~edw_0xD_bdv~RTDa-CqJdU?ryICmWDd$%
z3ptP1)h(9}qzn&g6ayff@FeYk%cgy7>b2!I{$P05msDXlQj2Y(73n?lm#@4<zYoQO
z%DcI*jot~@N3eRPix1MRrRrMGJ$0ADbxz)XXlV}8r8CKce#_;67xrkT+l6sUN^X6E
zlful@)$h8|3pfDxp01ZgKHqmARHv2aMT}0c^+Q1O<?B|UKlB1MW%PB9AKau?L%JY)
zsWG01hj{R@4a$Cm@c6u<5*!yBmEe9*Er$4}i$LT^ztYDK!J2VZ?XmtEz@aNnXNnJ^
zD_CD_)TchDAC#40QN2CzG*aNd{}KrO&HenK(4!4QOy+sb2;tcB1Pt^{v_i~HrE{hd
zPtFI3iMa~qVI9%B5?x|EA3bwVzgC1A7{owEY3X{8BD<p7tqZ*5GDVZ|2cGyFpC9T!
zkvltkovckmVR6(}_>K%v;a(0Ka_phRmsurnW_Bd%-^?8uGLjTB>RM&S7R@}FcuMG;
zCG*r_R}gnREkn~Zb2o%$@9T$QNDq5~Z0!9ZQUros*4WIf|LoAV@5`sbsQY9Wb{#(9
zX}m{TA#>g}1Fj4fkg(v@FAKw~*-7T>SnectGsIWi?Re71sBTS?M$iO1r>bR(qg1oQ
zIqF`)d#e;Nd!$8!A%C4955&#O0gfhs$V@L*m3ANc1LH2G-kLCAE(bOJoaTs5Dl7!l
zP*;P4qb&C&v$B<Qq(4T>y~`?pnd7u#k?b|M_m*?u5HwT9^G5*(zO-Vji6OElsc26V
zmu{72tm&7V;`&c7Ye@6r(;qI53Le{GoyjoB!+_;JtKFU-3m^C+Q2Xe&5Jc2M<@s{2
zRVCk+dYQCHJjactvJO%j=RoH?o;c~&Fq$-jtn)iG{@I!mdn-Ht6~`W^Fyx6GKgq3u
zbC~o=y;h8H#iQ5LF5}L>j#-u8n(1Q#(r2r<>b6blJi_yX7v~d~k3GXb&3Yd{4gk@@
zU&Sib?LXv6p_P-iO0@?nuYD9(pI6~H-Cnqf{I(y0Nk6Cb9Z6?ef&{g-K42|VLHlUL
z35FWMgW>WA4xJkVZ<lIphdW(}6d8^`T6Q<I33oLCb@;)+H)jb=p9P2O73#!mMQ`4=
z7Wv8-KiamZEs;s5E<&X$ou6_^vhYK~*7t+MLXxyMo9qnJVKAxJu$RK#i7rRua}Sey
z3%W#NqKR6L9N1HvC2r*!i>%W!mMevZ6DPM{ZVQaoC6Y76(p}2LlJ4HQZ)FiGlXHEH
zLG2X^dq080-G1t$-_6_q=@{8<P_t$j|Ngm0(C-X<LwTf>MhOf^NNT<C!faTEKfxNA
z@bTR_!&u%B&2X^osa=}y;k8hCR%P|_^7bZU!yjfIBr%y;w_AZDxP!B$2Tv@MrHmJ#
z;oIM_ZRj`KM8Ot0Y-8wnv<zk&fu#a58pSQ{OIkg`q_vF^<m&pY*~>W-5&|vorD_M&
zm3R{)%06zE*7v_<n|c91%ca6B;rF6r-2FP2o<-D&E$lN*uwWe`FxXEUx8Z`UB|G;e
ze_jsq58UFiZ92Lg_BU#xLMl6({quV@tWMF)?k_Qi|BmrZaTygNI6}Asfd2bj&EsKQ
zr597j)a~AntQtr&)@U0@yta@#h+KtzS*tmgsiV*h(Qsg02~gyBp4yMKBu0WB`pK+R
z-GEw{8wQ$Rce#<EC(POycrd;=re&j}gg`vuRsIo2HAZ!t@^;Z(28a6ziB93_i9${y
zztLyJxAFTsNIYn{CfVqwwbJ?bASqcI6KS=o3{i5m(HibhOhKjSr4FjTIGG4#zW>Q(
zd^*!|I(p>f_(UYHu&s=+Y4hNxXyBoaJsRcVEDUkfRaK%lygyDcaEMNf7{zSc1|!W`
zcgZyJ?y~o?2KFg9Z4q2;n9)J5kXJX=mCWU2TIUty!n4DzO4I%>FbKN_^ZcleF;)6Q
znZ_Q$okNii$uBs4cGZ6lNqNadVD_oQc>W;>qxYrr?5OPu?Em>4xL8V;J3`mux>fJu
S9$oyI0D9VncWN{pBmW0TFKp8Q
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/icon-gentoo.png b/plugins/gingerbase/ui/images/icon-gentoo.png
new file mode 100644
index 0000000000000000000000000000000000000000..50d928fbfa30560fe873cf3de438a8f0c10a8f96
GIT binary patch
literal 15307
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
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/icon-opensuse.png b/plugins/gingerbase/ui/images/icon-opensuse.png
new file mode 100644
index 0000000000000000000000000000000000000000..83fe4d5df0f59b52dd609b3bd16838f4d2570ab8
GIT binary patch
literal 3046
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
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/icon-ubuntu.png b/plugins/gingerbase/ui/images/icon-ubuntu.png
new file mode 100644
index 0000000000000000000000000000000000000000..d92c00f357b6b0e1542413f6aaf0de8ef4b8d130
GIT binary patch
literal 4818
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
T?|XFr3GiA;OR-Yk^22`sn~zF<
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/icon-vm.png b/plugins/gingerbase/ui/images/icon-vm.png
new file mode 100644
index 0000000000000000000000000000000000000000..50dac50c5a0ee59f4e79170434f53bb3b94390e3
GIT binary patch
literal 2976
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
literal 0
HcmV?d00001
diff --git a/plugins/gingerbase/ui/images/logo.ico b/plugins/gingerbase/ui/images/logo.ico
new file mode 100644
index 0000000000000000000000000000000000000000..446143f066a60f479b2cb8f8d04ab3c97ff60e56
GIT binary patch
literal 1214
zcma)*3rLeu6vyu=X_;nPV)$&PPF)r(wTQ|dTGOUtnOdf0mZ=cR#99xbub1{BqnD9^
z^Z>PV6h)fUny6#CN{3di2P{*h2ek@Oq0a4o*=I}2Iv?krbAR`oKi_vQA0faVCr83o
zF{!X2#Dx$Nz}$(sm^sgR<Jj30yCMGpMl1z837jm3H1$<DU4IV>Tbdw<FM-;Hi<#et
z=I}n~iB^qh8{XzCNyvT<I;$&znmT~?eFXZgAE@Om?1h(6Iq+2e1-ca!zOAO7n3*};
zXq6n?2kF<!f%cez;-Fgx4$e+xo{WR;oqhc_OW;#nF!Zm|JK}m8gi6aC+##`QA5PmJ
zfeZ(o(}%&&1P5#*1vVbnssk~XhN5bNz=T)>5^+BS=V54SJ|^z)5I7%kU;>-skiq*{
z5B^=eF<T)pK9+)bV;9UCK>t-HOi+bkR-wK1xpfXL;S<?ho1pQ5gYzxiHR~=e+XHS(
zYe7QMZb3IjWV72H-JpD~6z(tbgwn1o$D2s!YteWNJS!i9l%iW?+34Lvr*KL(6{_X|
zobEjAb{lD|4qsmYvGF;~r0Aunc#>=c)0W4s|D{#(q9~vaX{rGms=((Wn*~LeWqIu}
zkGvlzwaxjL25hey2bVweu<xK*t+@Oa_)UKTK^x4IwmKMOjm@oL`l)}_NGPy}tdb}w
zHa>H`ji2N7m}Xsj#j7-`#=Dv}`)h&)9th^&^dR%>WH_MB8KcIXVf8p&s1xD|_k)R-
zrk$Z0-|Gf}&4Au$KhU$k?3YR5by~D9M&-q$=ocNz4!IY&p7%OxuJf&+Ei-G(23hU;
zHTLhMtjFR9ExVbPQVLzBFlROcIZ|#jmX6fm_hsVa3XP<aKAeAt8dqp&oBW=V^+d>Q
zkcNnm%Ds?ggd^Rv2~9_o82cv;p6LSBD_g_s-n1uZ8#<EeLwTm~LE9J!Zdo@M&*jFU
zoM+Z%F5)(8$8y`Wz~%Pd;Nlx@aH{<lk}}CcRMRXZMD&%Uhz3Ze$jpg#uec1IlFMPW
MDQ4iZEk#_;cNAJoqyPW_
literal 0
HcmV?d00001
--
2.1.0
3
2
11 Sep '15
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/ui/js/Makefile.am | 27 +
plugins/gingerbase/ui/js/src/gingerbase.api.js | 371 +++++++++
plugins/gingerbase/ui/js/src/gingerbase.form.js | 48 ++
plugins/gingerbase/ui/js/src/gingerbase.grid.js | 528 +++++++++++++
plugins/gingerbase/ui/js/src/gingerbase.host.js | 859 +++++++++++++++++++++
.../gingerbase/ui/js/src/gingerbase.line-chart.js | 202 +++++
plugins/gingerbase/ui/js/src/gingerbase.main.js | 26 +
.../ui/js/src/gingerbase.report_add_main.js | 72 ++
.../ui/js/src/gingerbase.report_rename_main.js | 66 ++
.../ui/js/src/gingerbase.repository_add_main.js | 96 +++
.../ui/js/src/gingerbase.repository_edit_main.js | 74 ++
plugins/gingerbase/ui/js/src/gingerbase.select.js | 50 ++
plugins/gingerbase/ui/js/widgets/circleGauge.js | 100 +++
plugins/kimchi/ui/js/src/kimchi.host.js | 858 --------------------
plugins/kimchi/ui/js/src/kimchi.report_add_main.js | 72 --
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 66 --
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 96 ---
.../ui/js/src/kimchi.repository_edit_main.js | 74 --
18 files changed, 2519 insertions(+), 1166 deletions(-)
create mode 100644 plugins/gingerbase/ui/js/Makefile.am
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.api.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.form.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.grid.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.host.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.line-chart.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.select.js
create mode 100644 plugins/gingerbase/ui/js/widgets/circleGauge.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.host.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
diff --git a/plugins/gingerbase/ui/js/Makefile.am b/plugins/gingerbase/ui/js/Makefile.am
new file mode 100644
index 0000000..142ccdb
--- /dev/null
+++ b/plugins/gingerbase/ui/js/Makefile.am
@@ -0,0 +1,27 @@
+#
+# Kimchi
+#
+# Copyright IBM, Corp. 2013
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+EXTRA_DIST = src widgets
+
+jsdir = $(datadir)/wok/plugins/gingerbase/ui/js
+
+dist_js_DATA = gingerbase.min.js $(filter-out gingerbase.min.js, $(wildcard *.js))
+
+gingerbase.min.js: widgets/*.js src/*.js
+ cat $(sort $^) > $@
+
+CLEANFILES = gingerbase.min.js
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.api.js b/plugins/gingerbase/ui/js/src/gingerbase.api.js
new file mode 100644
index 0000000..480f6fb
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.api.js
@@ -0,0 +1,371 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var kimchi = {
+
+ widget: {},
+
+ trackingTasks: [],
+
+ /**
+ *
+ * Get host capabilities
+ * suc: callback if succeed err: callback if failed
+ */
+ getCapabilities : function(suc, err, done) {
+ done = typeof done !== 'undefined' ? done: function(){};
+ wok.requestJSON({
+ url : "plugins/gingerbase/host/capabilities",
+ type : "GET",
+ contentType : "application/json",
+ dataType : "json",
+ success: suc,
+ error: err,
+ complete: done
+ });
+ },
+
+ /**
+ * Get the i18 strings.
+ */
+ getI18n: function(suc, err, url, sync) {
+ wok.requestJSON({
+ url : url ? url : 'plugins/gingerbase/i18n.json',
+ type : 'GET',
+ resend: true,
+ dataType : 'json',
+ async : !sync,
+ success : suc,
+ error: err
+ });
+ },
+
+ /**
+ * Get the host static information.
+ */
+ getHost: function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host',
+ type : 'GET',
+ resend: true,
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error: err
+ });
+ },
+
+ /**
+ * Get the dynamic host stats (usually used for monitoring).
+ */
+ getHostStats : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/stats',
+ type : 'GET',
+ contentType : 'application/json',
+ headers: {'Wok-Robot': 'wok-robot'},
+ dataType : 'json',
+ success : suc,
+ error: err
+ });
+ },
+
+ /**
+ * Get the historic host stats.
+ */
+ getHostStatsHistory : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/stats/history',
+ type : 'GET',
+ resend: true,
+ contentType : 'application/json',
+ headers: {'Wok-Robot': 'wok-robot'},
+ dataType : 'json',
+ success : suc,
+ error: err
+ });
+ },
+
+ getTask : function(taskId, suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/tasks/' + encodeURIComponent(taskId),
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ getTasksByFilter : function(filter, suc, err, sync) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/tasks?' + filter,
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ async : !sync,
+ success : suc,
+ error : err
+ });
+ },
+
+ listReports : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/debugreports',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ resend: true,
+ success : suc,
+ error : err
+ });
+ },
+
+ trackTask : function(taskID, suc, err, progress) {
+ var onTaskResponse = function(result) {
+ var taskStatus = result['status'];
+ switch(taskStatus) {
+ case 'running':
+ progress && progress(result);
+ setTimeout(function() {
+ kimchi.trackTask(taskID, suc, err, progress);
+ }, 2000);
+ break;
+ case 'finished':
+ suc && suc(result);
+ break;
+ case 'failed':
+ err && err(result);
+ break;
+ default:
+ break;
+ }
+ };
+
+ kimchi.getTask(taskID, onTaskResponse, err);
+ if(kimchi.trackingTasks.indexOf(taskID) < 0)
+ kimchi.trackingTasks.push(taskID);
+ },
+
+ createReport: function(settings, suc, err, progress) {
+ var onResponse = function(data) {
+ taskID = data['id'];
+ kimchi.trackTask(taskID, suc, err, progress);
+ };
+
+ wok.requestJSON({
+ url : 'plugins/gingerbase/debugreports',
+ type : "POST",
+ contentType : "application/json",
+ data : JSON.stringify(settings),
+ dataType : "json",
+ success : onResponse,
+ error : err
+ });
+ },
+
+ renameReport : function(name, settings, suc, err) {
+ $.ajax({
+ url : "plugins/gingerbase/debugreports/" + encodeURIComponent(name),
+ type : 'PUT',
+ contentType : 'application/json',
+ data : JSON.stringify(settings),
+ dataType : 'json',
+ success: suc,
+ error: err
+ });
+ },
+
+ deleteReport: function(settings, suc, err) {
+ var reportName = encodeURIComponent(settings['name']);
+ wok.requestJSON({
+ url : 'plugins/gingerbase/debugreports/' + reportName,
+ type : 'DELETE',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ downloadReport: function(settings, suc, err) {
+ window.open(settings['file']);
+ },
+
+ shutdown: function(settings, suc, err) {
+ var reboot = settings && settings['reboot'] === true;
+ var url = 'plugins/gingerbase/host/' + (reboot ? 'reboot' : 'shutdown');
+ wok.requestJSON({
+ url : url,
+ type : 'POST',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ listHostPartitions : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/partitions',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ listSoftwareUpdates : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/packagesupdate',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ resend: true,
+ success : suc,
+ error : err
+ });
+ },
+
+ updateSoftware : function(suc, err, progress) {
+ var taskID = -1;
+ var onResponse = function(data) {
+ taskID = data['id'];
+ trackTask();
+ };
+
+ var trackTask = function() {
+ kimchi.getTask(taskID, onTaskResponse, err);
+ };
+
+ var onTaskResponse = function(result) {
+ var taskStatus = result['status'];
+ switch(taskStatus) {
+ case 'running':
+ progress && progress(result);
+ setTimeout(function() {
+ trackTask();
+ }, 200);
+ break;
+ case 'finished':
+ case 'failed':
+ suc(result);
+ break;
+ default:
+ break;
+ }
+ };
+
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/swupdate',
+ type : "POST",
+ contentType : "application/json",
+ dataType : "json",
+ success : onResponse,
+ error : err
+ });
+ },
+
+ createRepository : function(settings, suc, err) {
+ wok.requestJSON({
+ url : "plugins/gingerbase/host/repositories",
+ type : "POST",
+ contentType : "application/json",
+ data : JSON.stringify(settings),
+ dataType : "json",
+ success: suc,
+ error: err
+ });
+ },
+
+ retrieveRepository : function(repository, suc, err) {
+ var reposID = encodeURIComponent(repository);
+ wok.requestJSON({
+ url : "plugins/gingerbase/host/repositories/" + reposID,
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ updateRepository : function(name, settings, suc, err) {
+ var reposID = encodeURIComponent(name);
+ $.ajax({
+ url : "plugins/gingerbase/host/repositories/" + reposID,
+ type : 'PUT',
+ contentType : 'application/json',
+ data : JSON.stringify(settings),
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ enableRepository : function(name, enable, suc, err) {
+ var reposID = encodeURIComponent(name);
+ $.ajax({
+ url : "plugins/gingerbase/host/repositories/" + reposID +
+ '/' + (enable === true ? 'enable' : 'disable'),
+ type : 'POST',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ deleteRepository : function(repository, suc, err) {
+ var reposID = encodeURIComponent(repository);
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/repositories/' + reposID,
+ type : 'DELETE',
+ contentType : 'application/json',
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
+ listRepositories : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/repositories',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ resend: true,
+ success : suc,
+ error : err
+ });
+ },
+
+ getCPUInfo : function(suc, err) {
+ wok.requestJSON({
+ url : 'plugins/gingerbase/host/cpuinfo',
+ type : 'GET',
+ contentType : 'application/json',
+ dataType : 'json',
+ resend : true,
+ success : suc,
+ error : err ? err : function(data) {
+ wok.message.error(data.responseJSON.reason);
+ }
+ });
+ }
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.form.js b/plugins/gingerbase/ui/js/src/gingerbase.form.js
new file mode 100644
index 0000000..0bb7c4b
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.form.js
@@ -0,0 +1,48 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function($) {
+ $.fn.serializeObject = function() {
+ var formDataArray = $(this).serializeArray();
+ var formData = new Object();
+ $.each(formDataArray, function(index, data) {
+ formData.setDeepValue(data.name, data.value);
+ });
+ return formData;
+ };
+}(jQuery));
+
+(function($) {
+ $.fn.fillWithObject = function(obj) {
+ $(this).find("input").each(function(){
+ switch($(this).attr('type')) {
+ case 'text':
+ $(this).val(obj.getDeepValue($(this).attr("name")));
+ break;
+ case 'radio':
+ case 'checkbox':
+ var a=String($(this).val());
+ var b=String(obj.getDeepValue($(this).attr("name")));
+ $(this).prop("checked",(a==b));
+ break;
+ default:
+ break;
+ }
+ });
+ };
+}(jQuery));
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.grid.js b/plugins/gingerbase/ui/js/src/gingerbase.grid.js
new file mode 100644
index 0000000..4553135
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.grid.js
@@ -0,0 +1,528 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.widget.Grid = function(opts) {
+ this.opts = $.extend({}, this.opts, opts);
+ this.createDOM();
+ this.reload();
+};
+
+kimchi.widget.Grid.prototype = (function() {
+ var htmlStr = [
+ '<div id="{id}" class="grid">',
+ '<div class="grid-content">',
+ '<div class="grid-header">',
+ '<div class="grid-frozen-header-view">',
+ '<table class="grid-frozen-header-container">',
+ '</table>',
+ '</div>',
+ '<div class="grid-header-view">',
+ '<div class="grid-header-wrapper">',
+ '<table class="grid-header-container">',
+ '</table>',
+ '</div>',
+ '</div>',
+ '</div>',
+ '<div class="grid-body">',
+ '<div class="grid-frozen-body-view">',
+ '<div class="grid-frozen-body-wrapper">',
+ '<table class="grid-frozen-body-container">',
+ '</table>',
+ '</div>',
+ '</div>',
+ '<div class="grid-body-view">',
+ '<div class="grid-body-wrapper">',
+ '<table class="grid-body-container">',
+ '</table>',
+ '</div>',
+ '</div>',
+ '</div>',
+ '<div class="grid-resizer-leftmost hidden"></div>',
+ '<div class="grid-resizer hidden"></div>',
+ '</div>',
+ '<div class="grid-footer"></div>',
+ '<div class="grid-mask hidden">',
+ '<div class="grid-loading">',
+ '<div class="grid-loading-icon"></div>',
+ '<div class="grid-loading-text">',
+ '{loading}',
+ '</div>',
+ '</div>',
+ '</div>',
+ '<div class="grid-message hidden">',
+ '<div class="grid-message-text">',
+ '{message}',
+ '<button class="retry-button btn-small">',
+ '{buttonLabel}',
+ '</button>',
+ '</div>',
+ '<div class="detailed-title">',
+ '{detailedLabel}',
+ '</div>',
+ '<div class="detailed-text"></div>',
+ '</div>',
+ '</div>'
+ ].join('');
+
+ var CONTAINER_NORMAL = 0, CONTAINER_FROZEN = 1;
+
+ var setupHeaders = function(header, body, fields) {
+ var colGroup = $('<colgroup></colgroup>').appendTo(header);
+ var headerHeader = $('<thead></thead>');
+ var headerRow = $('<tr></tr>').appendTo(headerHeader);
+ $.each(fields || [], function(i, field) {
+ $('<col class="' +
+ field['class'] +
+ '"/>')
+ .appendTo(colGroup);
+ $('<th><div class="cell-text-wrapper">' +
+ field['label'] +
+ '</div></th>').appendTo(headerRow);
+ });
+ headerHeader.appendTo(header);
+
+ var totalWidth = 0;
+ $('col', colGroup).each(function(index, col) {
+ var width = $(col).width();
+ totalWidth += width;
+ $(col).css('width', width + 'px');
+ });
+ $(body).append(colGroup.clone());
+ return totalWidth;
+ };
+
+ var getValue = function(name, obj) {
+ var result=undefined;
+ if(!Array.isArray(name)) {
+ name=name.parseKey();
+ }
+ if(name.length!=0) {
+ var tmpName=name.shift();
+ if(obj[tmpName]!=undefined) {
+ result=obj[tmpName];
+ }
+ if(name.length!=0) {
+ result=getValue(name,obj[tmpName]);
+ }
+ }
+ return(result);
+ };
+
+ var fillBody = function(container, fields) {
+ var data = this.data;
+ var tbody = ($('tbody', container).length && $('tbody', container))
+ || $('<tbody></tbody>').appendTo(container);
+ tbody.empty();
+ $.each(data, function(i, row) {
+ var rowNode = $('<tr></tr>').appendTo(tbody);
+ $.each(fields, function(fi, field) {
+ var value = getValue(field['name'], row);
+ $('<td><div class="cell-text-wrapper"' +
+ (field['makeTitle'] === true
+ ? ' title="' + value + '"'
+ : ''
+ ) + '>' + value.toString() + '</div></td>'
+ ).appendTo(rowNode);
+ });
+ });
+ };
+
+ var fixTableLayout = function(style) {
+ $.each([
+ this.frozenHeaderContainer,
+ this.headerContainer,
+ this.frozenBodyContainer,
+ this.bodyContainer
+ ], function(i, tableNode) {
+ $(tableNode).css('table-layout', style || 'fixed');
+ });
+ };
+
+ var initResizing = function(event) {
+ var resizer = event.data.resizer;
+ var pageX = event.pageX;
+ var tailPos = $(this).width() + $(this).offset()['left'];
+ var atResizer = Math.abs(pageX - tailPos) <= 2;
+ var isResizing = !$(resizer).hasClass('hidden');
+ $('body')[(atResizer || isResizing)
+ ? 'addClass'
+ : 'removeClass'
+ ]('resizing');
+ };
+
+ var clearResizing = function(event) {
+ $(event.data.resizer).hasClass('hidden') &&
+ $('body').removeClass('resizing');
+ };
+
+ var stylingRow = function(row, className, add) {
+ var index = $(row).index() + 1;
+ $('tr', this.frozenBodyContainer)
+ .removeClass(className);
+ $('tr', this.bodyContainer)
+ .removeClass(className);
+
+ if(add === false) {
+ return;
+ }
+
+ $('tr:nth-child(' + index + ')', this.frozenBodyContainer)
+ .addClass(className);
+ $('tr:nth-child(' + index + ')', this.bodyContainer)
+ .addClass(className);
+ };
+
+ var setBodyListeners = function() {
+ if(this['opts']['rowSelection'] != 'disabled') {
+ $('tr', this.gridBody).on('mouseover', {
+ grid: this
+ }, function(event) {
+ if (! $(this).hasClass('no-hover'))
+ stylingRow.call(event.data.grid, this, 'hover');
+ });
+
+ $('tr', this.gridBody).on('mouseout', {
+ grid: this
+ }, function(event) {
+ stylingRow.call(event.data.grid, this, 'hover', false);
+ });
+
+ $('tr', this.gridBody).on('click', {
+ grid: this
+ }, function(event) {
+ var grid = event.data.grid;
+ grid.selectedIndex = $(this).index();
+ stylingRow.call(grid, this, 'selected');
+ grid['opts']['onRowSelected'] && grid['opts']['onRowSelected']();
+ });
+ }
+
+ $('.grid-body-view', this.domNode).on('scroll', {
+ grid: this
+ }, function(event) {
+ var grid = event.data.grid;
+ $('.grid-header .grid-header-view', grid.domNode)
+ .prop('scrollLeft', this.scrollLeft);
+ $('.grid-body .grid-frozen-body-view', grid.domNode)
+ .prop('scrollTop', this.scrollTop);
+ });
+ };
+
+ var setData = function(data) {
+ this.data = data;
+ fillBody.call(this, this.frozenBodyContainer, this['opts']['frozenFields']);
+ fillBody.call(this, this.bodyContainer, this['opts']['fields']);
+ setBodyListeners.call(this);
+ };
+
+ var getSelected = function() {
+ return this.selectedIndex >= 0
+ ? this.data[this.selectedIndex]
+ : null;
+ };
+
+ var startResizing = function(container, event) {
+ var grid = event.data.grid;
+ kimchi.widget.Grid.beingResized = grid;
+ if(!($('body').hasClass('resizing')
+ && $(grid.resizer).hasClass('hidden'))) {
+ return;
+ }
+
+ grid.columnBeingResized = container;
+ var pageX = event.pageX;
+ var gridOffsetX = grid.domNode.offset()['left'];
+ var leftmostOffsetX = $(container).offset()['left'] - gridOffsetX;
+ var left = pageX - gridOffsetX;
+ var contentHeight = $('.grid-content', grid.domNode).height();
+ $(grid.resizerLeftmost).css({
+ left: leftmostOffsetX + 'px',
+ height: contentHeight + 'px'
+ });
+ $(grid.resizer).css({
+ left: left + 'px',
+ height: contentHeight + 'px'
+ });
+ $(grid.resizerLeftmost).removeClass('hidden');
+ $(grid.resizer).removeClass('hidden');
+ event.preventDefault();
+ };
+
+ var endResizing = function(event) {
+ var grid = kimchi.widget.Grid.beingResized;
+ if(!$('body').hasClass('resizing')) {
+ return;
+ }
+ $(grid.resizerLeftmost).addClass('hidden');
+ $(grid.resizer).addClass('hidden');
+ $('body').removeClass('resizing');
+ var leftmostOffset = $(grid.columnBeingResized).offset()['left'];
+ var left = event.pageX;
+ if(leftmostOffset > left) {
+ return;
+ }
+ resizeColumnWidth.call(
+ grid,
+ $(grid.columnBeingResized).index(),
+ left - leftmostOffset
+ );
+ fixTableLayout.call(grid);
+ grid.columnBeingResized = null;
+ kimchi.widget.Grid.beingResized = null;
+ };
+
+ var resizeColumnWidth = function(index, width) {
+ var width = Math.ceil(width);
+ var widthArray = [];
+ var totalWidth = 0;
+ var header = this.headerContainer;
+ var body = this.bodyContainer;
+ if(this.containerBeingResized === CONTAINER_FROZEN) {
+ header = this.frozenHeaderContainer;
+ body = this.frozenBodyContainer;
+ }
+ $('col', header).each(function(i, colNode) {
+ var w = index === i ? width : $(colNode).width();
+ widthArray.push(w);
+ totalWidth += w;
+ });
+ $.each([header, body], function(i, container) {
+ container.css({
+ 'table-layout': 'fixed',
+ width: totalWidth + 'px'
+ });
+ $('col:nth-child(' + (index + 1) + ')', container).css({
+ width: width + 'px'
+ });
+ });
+
+ if(this.containerBeingResized === CONTAINER_FROZEN) {
+ var headerView = $('.grid-header-view', this.domNode);
+ var bodyView = $('.grid-body-view', this.domNode);
+ $.each([headerView, bodyView], function(i, view) {
+ view.css({
+ left: totalWidth + 'px'
+ });
+ });
+ }
+ };
+
+ var positionResizer = function(event) {
+ var grid = event.data.grid;
+ if($(grid.resizer).hasClass('hidden')) {
+ return;
+ }
+
+ var pageX = event.pageX;
+ var gridOffsetX = $(grid.domNode).offset()['left'];
+ var leftMost = $(grid.resizerLeftmost).position()['left'];
+ var offsetX = pageX - gridOffsetX;
+ offsetX = offsetX >= leftMost ? offsetX : leftMost;
+ $(grid.resizer).css('left', offsetX + 'px');
+ };
+
+ var showMessage = function(msg) {
+ $('.detailed-text', this.messageNode).text(msg);
+ $(this.messageNode).removeClass('hidden');
+ };
+
+ var hideMessage = function() {
+ $(this.messageNode).addClass('hidden');
+ };
+
+ var reload = function() {
+ var data = this['opts']['data'];
+ if(!data) {
+ return;
+ }
+
+ $(this.messageNode).addClass('hidden');
+
+ if($.isArray(data)) {
+ return this.setData(data);
+ }
+
+ if($.isFunction(data)) {
+ var loadData = data;
+ $(this.maskNode).removeClass('hidden');
+ loadData($.proxy(function(data) {
+ this.setData(data);
+ $(this.maskNode).addClass('hidden');
+ }, this));
+ }
+ };
+
+ var destroy = function() {
+ $('body').off('mousemove.grid#' + this['opts']['id'], positionResizer);
+ $('body').off('mouseup.grid#' + this['opts']['id'], endResizing);
+ };
+
+ var createDOM = function() {
+ var containerID = this['opts']['container'];
+ var container = $('#' + containerID);
+ var gridID = this['opts']['id'];
+ var rowSelection = this['opts']['rowSelection'] || 'single';
+ var domNode = $(wok.substitute(htmlStr, {
+ id: gridID,
+ loading: i18n['GGBGRD6001M'],
+ message: i18n['GGBGRD6002M'],
+ buttonLabel: i18n['GGBGRD6003M'],
+ detailedLabel: i18n['GGBGRD6004M']
+ })).appendTo(container);
+ this.domNode = domNode;
+
+ var height = domNode.height();
+ var width = domNode.width();
+
+ var title = this['opts']['title'];
+ var titleNode = null;
+ if(title) {
+ titleNode = $('<div class="grid-caption">' + title + '</div>')
+ .prependTo(domNode);
+ }
+
+ var toolbarButtons = this['opts']['toolbarButtons'];
+ var toolbarNode = null;
+ if(toolbarButtons) {
+ toolbarNode = $('<div class="grid-toolbar"></div>');
+ if(titleNode) {
+ titleNode.after(toolbarNode);
+ }
+ else {
+ toolbarNode.prependTo(domNode);
+ }
+
+ $.each(toolbarButtons, function(i, button) {
+ var btnHTML = [
+ '<button',
+ button['id'] ? (' id="' + button['id'] + '"') : '',
+ ' class="grid-toolbar-button',
+ button['class'] ? (' ' + button['class']) : '',
+ '"',
+ button['disabled'] === true ? ' disabled' : '',
+ '>',
+ button['label'],
+ '</button>'
+ ].join('');
+ var btnNode = $(btnHTML).appendTo(toolbarNode);
+ button['onClick'] &&
+ btnNode.on('click', button['onClick']);
+ });
+ }
+
+ var frozenHeaderContainer = $('.grid-frozen-header-container', domNode);
+ var frozenBodyContainer = $('.grid-frozen-body-container', domNode);
+ var frozenWidth = setupHeaders(
+ frozenHeaderContainer,
+ frozenBodyContainer,
+ this['opts']['frozenFields']
+ );
+ this.frozenHeaderContainer = frozenHeaderContainer;
+ this.frozenBodyContainer = frozenBodyContainer;
+
+ var headerContainer = $('.grid-header-container', domNode);
+ var bodyContainer = $('.grid-body-container', domNode);
+ setupHeaders(headerContainer, bodyContainer, this['opts']['fields']);
+ this.headerContainer = headerContainer;
+ this.bodyContainer = bodyContainer;
+
+ fixTableLayout.call(this, 'auto');
+
+ var gridContentNode = $('.grid-content', domNode);
+ var captionHeight = titleNode && $(titleNode).height() || 0;
+ var toolbarHeight = toolbarNode && $(toolbarNode).height() || 0;
+ gridContentNode.css('top', (captionHeight + toolbarHeight) + 'px');
+
+ var maskNode = $('.grid-mask', domNode);
+ maskNode.css('top', captionHeight + 'px');
+ this.maskNode = maskNode;
+
+ var messageNode = $('.grid-message', domNode);
+ messageNode.css('top', captionHeight + 'px');
+ this.messageNode = messageNode;
+
+ var headerView = $('.grid-header-view', domNode);
+ var bodyView = $('.grid-body-view', domNode);
+ headerView.css('left', (frozenWidth) + 'px');
+ bodyView.css('left', (frozenWidth) + 'px');
+
+ var bodyWidth = width - frozenWidth;
+ headerContainer.css('width', bodyWidth + 'px');
+ bodyContainer.css('width', bodyWidth + 'px');
+
+ fixTableLayout.call(this);
+
+ var gridBody = $('.grid-body', domNode);
+ this.gridBody = gridBody;
+ this.resizerLeftmost = $('.grid-resizer-leftmost', domNode);
+ this.resizer = $('.grid-resizer', domNode);
+ var gridHeader = $('.grid-header', domNode);
+ $('th', gridHeader).on('mouseover mousemove', {
+ resizer: this.resizer
+ }, initResizing);
+
+ $('th', gridHeader).on('mouseout', {
+ resizer: this.resizer
+ }, clearResizing);
+
+ this.containerBeingResized = CONTAINER_NORMAL;
+ $('th', frozenHeaderContainer).on('mousedown', {
+ grid: this
+ }, function(event) {
+ event.data.grid.containerBeingResized = CONTAINER_FROZEN;
+ startResizing(this, event);
+ });
+ $('th', headerContainer).on('mousedown', {
+ grid: this
+ }, function(event) {
+ event.data.grid.containerBeingResized = CONTAINER_NORMAL;
+ startResizing(this, event);
+ });
+
+ $('body').on('mousemove.grid#' + this['opts']['id'], {
+ grid: this
+ }, positionResizer);
+ $('body').on('mouseup.grid#' + this['opts']['id'], endResizing);
+
+ var data = this['opts']['data'];
+
+ $('.retry-button', domNode).on('click', {
+ grid: this
+ }, function(event) {
+ event.data.grid.reload();
+ });
+ };
+
+ return {
+ opts: {
+ container: null,
+ id: null,
+ rowSelection: 'single',
+ onRowSelected: null,
+ title: null,
+ toolbarButtons: null,
+ frozenFields: null,
+ fields: null
+ },
+ createDOM: createDOM,
+ setData: setData,
+ getSelected: getSelected,
+ reload: reload,
+ destroy: destroy,
+ showMessage: showMessage
+ };
+})();
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.host.js b/plugins/gingerbase/ui/js/src/gingerbase.host.js
new file mode 100644
index 0000000..989461c
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.host.js
@@ -0,0 +1,859 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.host={};
+
+kimchi.host_main = function() {
+ var expand = function(header, toExpand) {
+ var controlledNode = $(header).attr('aria-controls');
+ $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
+ $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
+ };
+
+ var repositoriesGrid = null;
+ var initRepositoriesGrid = function(repo_type) {
+ var gridFields=[];
+ if (repo_type == "yum") {
+ gridFields=[{
+ name: 'repo_id',
+ label: i18n['GGBREPO6004M'],
+ 'class': 'repository-id'
+ }, {
+ name: 'config[repo_name]',
+ label: i18n['GGBREPO6005M'],
+ 'class': 'repository-name'
+ }, {
+ name: 'enabled',
+ label: i18n['GGBREPO6009M'],
+ 'class': 'repository-enabled'
+ }];
+ }
+ else if (repo_type == "deb") {
+ gridFields=[{
+ name: 'baseurl',
+ label: i18n['GGBREPO6006M'],
+ makeTitle: true,
+ 'class': 'repository-baseurl deb'
+ }, {
+ name: 'enabled',
+ label: i18n['GGBREPO6009M'],
+ 'class': 'repository-enabled deb'
+ }, {
+ name: 'config[dist]',
+ label: "dist",
+ 'class': 'repository-gpgcheck deb'
+ }, {
+ name: 'config[comps]',
+ label: "comps",
+ 'class': 'repository-gpgcheck deb'
+ }];
+ }
+ else {
+ gridFields=[{
+ name: 'repo_id',
+ label: i18n['GGBREPO6004M'],
+ 'class': 'repository-id'
+ }, {
+ name: 'enabled',
+ label: i18n['GGBREPO6009M'],
+ 'class': 'repository-enabled'
+ }, {
+ name: 'baseurl',
+ label: i18n['GGBREPO6006M'],
+ makeTitle: true,
+ 'class': 'repository-baseurl'
+ }];
+ }
+ repositoriesGrid = new kimchi.widget.Grid({
+ container: 'repositories-grid-container',
+ id: 'repositories-grid',
+ title: i18n['GGBREPO6003M'],
+ toolbarButtons: [{
+ id: 'repositories-grid-add-button',
+ label: i18n['GGBREPO6012M'],
+ onClick: function(event) {
+ wok.window.open({url:'plugins/gingerbase/repository-add.html',
+ class: repo_type});
+ }
+ }, {
+ id: 'repositories-grid-enable-button',
+ label: i18n['GGBREPO6016M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ var name = repository['repo_id'];
+ var enable = !repository['enabled'];
+ $(this).prop('disabled', true);
+ kimchi.enableRepository(name, enable, function() {
+ wok.topic('kimchi/repositoryUpdated').publish();
+ });
+ }
+ }, {
+ id: 'repositories-grid-edit-button',
+ label: i18n['GGBREPO6013M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ kimchi.selectedRepository = repository['repo_id'];
+ wok.window.open({url:'plugins/gingerbase/repository-edit.html',
+ class: repo_type});
+ }
+ }, {
+ id: 'repositories-grid-remove-button',
+ label: i18n['GGBREPO6014M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+
+ var settings = {
+ title : i18n['GGBREPO6001M'],
+ content : i18n['GGBREPO6002M'],
+ confirm : i18n['GGBAPI6004M'],
+ cancel : i18n['GGBAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.deleteRepository(
+ repository['repo_id'],
+ function(result) {
+ wok.topic('kimchi/repositoryDeleted').publish(result);
+ }, function(error) {
+ }
+ );
+ });
+ }
+ }],
+ onRowSelected: function(row) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ $('#repositories-grid-remove-button').prop('disabled', false);
+ $('#repositories-grid-edit-button').prop('disabled', false);
+ var enabled = repository['enabled'];
+ $('#repositories-grid-enable-button')
+ .text(i18n[enabled ? 'GGBREPO6017M' : 'GGBREPO6016M'])
+ .prop('disabled', false);
+ },
+ frozenFields: [],
+ fields: gridFields,
+ data: listRepositories
+ });
+ };
+
+ var listRepositories = function(gridCallback) {
+ kimchi.listRepositories(function(repositories) {
+ if($.isFunction(gridCallback)) {
+ gridCallback(repositories);
+ }
+ else {
+ if(repositoriesGrid) {
+ repositoriesGrid.setData(repositories);
+ }
+ else {
+ initRepositoriesGrid();
+ repositoriesGrid.setData(repositories);
+ }
+ }
+ },
+ function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+
+ if($.isFunction(gridCallback)) {
+ gridCallback([]);
+ }
+ repositoriesGrid &&
+ repositoriesGrid.showMessage(message || i18n['GGBUPD6008M']);
+ });
+
+ $('#repositories-grid-remove-button').prop('disabled', true);
+ $('#repositories-grid-edit-button').prop('disabled', true);
+ $('#repositories-grid-enable-button').prop('disabled', true);
+ };
+
+ var softwareUpdatesGridID = 'software-updates-grid';
+ var softwareUpdatesGrid = null;
+ var progressAreaID = 'software-updates-progress-textarea';
+ var reloadProgressArea = function(result) {
+ var progressArea = $('#' + progressAreaID)[0];
+ $(progressArea).text(result['message']);
+ var scrollTop = $(progressArea).prop('scrollHeight');
+ $(progressArea).prop('scrollTop', scrollTop);
+ };
+
+ var initSoftwareUpdatesGrid = function(softwareUpdates) {
+ softwareUpdatesGrid = new kimchi.widget.Grid({
+ container: 'software-updates-grid-container',
+ id: softwareUpdatesGridID,
+ title: i18n['GGBUPD6001M'],
+ rowSelection: 'disabled',
+ toolbarButtons: [{
+ id: softwareUpdatesGridID + '-update-button',
+ label: i18n['GGBUPD6006M'],
+ disabled: true,
+ onClick: function(event) {
+ var updateButton = $(this);
+ var progressArea = $('#' + progressAreaID)[0];
+ $('#software-updates-progress-container').removeClass('hidden');
+ $(progressArea).text('');
+ !wok.isElementInViewport(progressArea) &&
+ progressArea.scrollIntoView();
+ $(updateButton).text(i18n['GGBUPD6007M']).prop('disabled', true);
+
+ kimchi.updateSoftware(function(result) {
+ reloadProgressArea(result);
+ $(updateButton).text(i18n['GGBUPD6006M']).prop('disabled', false);
+ wok.topic('kimchi/softwareUpdated').publish({
+ result: result
+ });
+ }, function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+ wok.message.error(message || i18n['GGBUPD6009M']);
+ $(updateButton).text(i18n['GGBUPD6006M']).prop('disabled', false);
+ }, reloadProgressArea);
+ }
+ }],
+ frozenFields: [],
+ fields: [{
+ name: 'package_name',
+ label: i18n['GGBUPD6002M'],
+ 'class': 'software-update-name'
+ }, {
+ name: 'version',
+ label: i18n['GGBUPD6003M'],
+ 'class': 'software-update-version'
+ }, {
+ name: 'arch',
+ label: i18n['GGBUPD6004M'],
+ 'class': 'software-update-arch'
+ }, {
+ name: 'repository',
+ label: i18n['GGBUPD6005M'],
+ 'class': 'software-update-repos'
+ }],
+ data: listSoftwareUpdates
+ });
+ };
+
+ var listSoftwareUpdates = function(gridCallback) {
+ kimchi.listSoftwareUpdates(function(softwareUpdates) {
+ if($.isFunction(gridCallback)) {
+ gridCallback(softwareUpdates);
+ }
+ else {
+ if(softwareUpdatesGrid) {
+ softwareUpdatesGrid.setData(softwareUpdates);
+ }
+ else {
+ initSoftwareUpdatesGrid(softwareUpdates);
+ }
+ }
+
+ var updateButton = $('#' + softwareUpdatesGridID + '-update-button');
+ $(updateButton).prop('disabled', softwareUpdates.length === 0);
+ }, function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+ if($.isFunction(gridCallback)) {
+ gridCallback([]);
+ }
+ softwareUpdatesGrid &&
+ softwareUpdatesGrid.showMessage(message || i18n['GGBUPD6008M']);
+ });
+ };
+
+ var reportGridID = 'available-reports-grid';
+ var reportGrid = null;
+ var enableReportButtons = function(toEnable) {
+ var buttonID = '#{grid}-{btn}-button';
+ $.each(['rename', 'remove', 'download'], function(i, n) {
+ $(wok.substitute(buttonID, {
+ grid: reportGridID,
+ btn: n
+ })).prop('disabled', !toEnable);
+ });
+ };
+ var initReportGrid = function(reports) {
+ reportGrid = new kimchi.widget.Grid({
+ container: 'available-reports-grid-container',
+ id: reportGridID,
+ title: i18n['GGBDR6002M'],
+ toolbarButtons: [{
+ id: reportGridID + '-generate-button',
+ label: i18n['GGBDR6006M'],
+ onClick: function(event) {
+ wok.window.open('plugins/gingerbase/report-add.html');
+ }
+ }, {
+ id: reportGridID + '-rename-button',
+ label: i18n['GGBDR6008M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ kimchi.selectedReport = report['name'];
+ wok.window.open('plugins/gingerbase/report-rename.html');
+ }
+ }, {
+ id: reportGridID + '-remove-button',
+ label: i18n['GGBDR6009M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ var settings = {
+ title : i18n['GGBAPI6004M'],
+ content : i18n['GGBDR6001M'],
+ confirm : i18n['GGBAPI6002M'],
+ cancel : i18n['GGBAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.deleteReport({
+ name: report['name']
+ }, function(result) {
+ listDebugReports();
+ }, function(error) {
+ wok.message.error(error.responseJSON.reason);
+ });
+ });
+ }
+ }, {
+ id: reportGridID + '-download-button',
+ label: i18n['GGBDR6010M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ kimchi.downloadReport({
+ file: report['uri']
+ });
+ }
+ }],
+ onRowSelected: function(row) {
+ var report = reportGrid.getSelected();
+ // Only enable report buttons if the selected line is not a
+ // pending report
+ if (report['time'] == i18n['GGBDR6007M']) {
+ var gridElement = $('#'+ reportGridID);
+ var row = $('tr:contains(' + report['name'] + ')', gridElement);
+ enableReportButtons(false);
+ row.attr('class', '');
+ }
+ else {
+ enableReportButtons(true);
+ }
+ },
+ frozenFields: [],
+ fields: [{
+ name: 'name',
+ label: i18n['GGBDR6003M'],
+ 'class': 'debug-report-name'
+ }, {
+ name: 'time',
+ label: i18n['GGBDR6005M'],
+ 'class': 'debug-report-time'
+ }],
+ data: reports
+ });
+ };
+
+ var getPendingReports = function() {
+ var reports = []
+ var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/gingerbase/debugreports/*')
+
+ kimchi.getTasksByFilter(filter, function(tasks) {
+ for(var i = 0; i < tasks.length; i++) {
+ reportName = tasks[i].target_uri.replace(/^\/plugins\/gingerbase\/debugreports\//, '') || i18n['GGBDR6012M'];
+ reports.push({'name': reportName, 'time': i18n['GGBDR6007M']})
+
+ if(kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) {
+ continue;
+ }
+
+ kimchi.trackTask(tasks[i].id, function(result) {
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, function(result) {
+ // Error message from Async Task status
+ if (result['message']) {
+ var errText = result['message'];
+ }
+ // Error message from standard kimchi exception
+ else {
+ var errText = result['responseJSON']['reason'];
+ }
+ result && wok.message.error(errText);
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, null);
+ }
+ }, null, true);
+
+ return reports;
+ };
+
+ var listDebugReports = function() {
+ kimchi.listReports(function(reports) {
+ pendingReports = getPendingReports();
+ allReports = pendingReports.concat(reports);
+ $('#debug-report-section').removeClass('hidden');
+
+ // Row selection will be cleared so disable buttons here
+ enableReportButtons(false);
+
+ if(reportGrid) {
+ reportGrid.setData(allReports);
+ }
+ else {
+ initReportGrid(allReports);
+ }
+
+ // Set id-debug-img to pending reports
+ // It will display a loading icon
+ var gridElement = $('#' + reportGridID);
+ $.each($('td:contains(' + i18n['GGBDR6007M'] + ')', gridElement), function(index, row) {
+ $(row).parent().addClass('no-hover');
+ $(row).attr('id', 'id-debug-img');
+ });
+ }, function(error) {
+ if(error['status'] == 403) {
+ $('#debug-report-section').addClass('hidden');
+ return;
+ }
+ $('#debug-report-section').removeClass('hidden');
+ });
+ };
+
+ var shutdownButtonID = '#host-button-shutdown';
+ var restartButtonID = '#host-button-restart';
+ var shutdownHost = function(params) {
+ var settings = {
+ title : i18n['GGBAPI6004M'],
+ content : i18n['GGBHOST6008M'],
+ confirm : i18n['GGBAPI6002M'],
+ cancel : i18n['GGBAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.shutdown(params);
+ $(shutdownButtonID).prop('disabled', true);
+ $(restartButtonID).prop('disabled', true);
+ // Check if there is any VM is running.
+ // FIXME : Find alternative way to figure out if any vms running
+ // kimchi.listVMs(function(vms) {
+ // for(var i = 0; i < vms.length; i++) {
+ // if(vms[i]['state'] === 'running') {
+ // wok.message.error.code('GGBHOST6001E');
+ // $(shutdownButtonID).prop('disabled', false);
+ // $(restartButtonID).prop('disabled', false);
+ // return;
+ // }
+ // }
+ //
+ // });
+ }, function() {
+ });
+ };
+
+ var initPage = function() {
+ $('#host-info-container .section-header').each(function(i, header) {
+ $('<span class="arrow"></span>').prependTo(header);
+ var toExpand = $(header).attr('aria-expanded') !== 'false';
+ expand(header, toExpand);
+ });
+
+ $('#host-info-container').on('click', '.section-header', function(event) {
+ var toExpand = $(this).attr('aria-expanded') === 'false';
+ expand(this, toExpand);
+ });
+
+ $('#host-button-shutdown').on('click', function(event) {
+ shutdownHost(null);
+ });
+
+ $('#host-button-restart').on('click', function(event) {
+ shutdownHost({
+ reboot: true
+ });
+ });
+
+ var setupUI = function() {
+ if (kimchi.capabilities == undefined) {
+ setTimeout(setupUI, 2000);
+ return;
+ }
+
+ if((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool']!="None")) {
+ initRepositoriesGrid(kimchi.capabilities['repo_mngt_tool']);
+ $('#repositories-section').switchClass('hidden', kimchi.capabilities['repo_mngt_tool']);
+ wok.topic('kimchi/repositoryAdded')
+ .subscribe(listRepositories);
+ wok.topic('kimchi/repositoryUpdated')
+ .subscribe(listRepositories);
+ wok.topic('kimchi/repositoryDeleted')
+ .subscribe(listRepositories);
+ }
+
+ if(kimchi.capabilities['update_tool']) {
+ $('#software-update-section').removeClass('hidden');
+ initSoftwareUpdatesGrid();
+ wok.topic('kimchi/softwareUpdated')
+ .subscribe(listSoftwareUpdates);
+ $('#software-updates-progress-container').accordion({
+ collapsible: true
+ });
+ }
+
+ if(kimchi.capabilities['system_report_tool']) {
+ listDebugReports();
+ wok.topic('kimchi/debugReportAdded')
+ .subscribe(listDebugReports);
+ wok.topic('kimchi/debugReportRenamed')
+ .subscribe(listDebugReports);
+ }
+ };
+ setupUI();
+ };
+
+ kimchi.getHost(function(data) {
+ var htmlTmpl = $('#host-tmpl').html();
+ data['logo'] = data['logo'] || '';
+ data['memory'] = wok.formatMeasurement(data['memory'], {
+ fixed: 2
+ });
+ var templated = wok.substitute(htmlTmpl, data);
+ $('#host-content-container').html(templated);
+
+ initPage();
+ initTracker();
+ });
+
+ var StatsMgr = function() {
+ var statsArray = {
+ cpu: {
+ u: {
+ type: 'percent',
+ legend: i18n['GGBHOST6002M'],
+ points: []
+ }
+ },
+ memory: {
+ u: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ legend: i18n['GGBHOST6003M'],
+ points: []
+ }
+ },
+ diskIO: {
+ r: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['GGBHOST6004M'],
+ points: []
+ },
+ w: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['GGBHOST6005M'],
+ 'class': 'disk-write',
+ points: []
+ }
+ },
+ networkIO: {
+ r: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['GGBHOST6006M'],
+ points: []
+ },
+ s: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['GGBHOST6007M'],
+ 'class': 'network-sent',
+ points: []
+ }
+ }
+ };
+ var SIZE = 20;
+ var cursor = SIZE;
+
+ var add = function(stats) {
+ for(var key in stats) {
+ var item = stats[key];
+ for(var metrics in item) {
+ var value = item[metrics]['v'];
+ var max = item[metrics]['max'];
+ var unifiedMetrics = statsArray[key][metrics];
+ var ps = unifiedMetrics['points'];
+ if(!Array.isArray(value)){
+ ps.push(value);
+ if(ps.length > SIZE + 1) {
+ ps.shift();
+ }
+ }
+ else{
+ ps=ps.concat(value);
+ ps.splice(0, ps.length-SIZE-1);
+ unifiedMetrics['points']=ps;
+ }
+ if(max !== undefined) {
+ unifiedMetrics['max'] = max;
+ }
+ else {
+ if(unifiedMetrics['type'] !== 'value') {
+ continue;
+ }
+ max = -Infinity;
+ $.each(ps, function(i, value) {
+ if(value > max) {
+ max = value;
+ }
+ });
+ if(max === 0) {
+ ++max;
+ }
+ max *= 1.1;
+ unifiedMetrics['max'] = max;
+ }
+ }
+ }
+ cursor++;
+ };
+
+ var get = function(which) {
+ var stats = statsArray[which];
+ var lines = [];
+ for(var k in stats) {
+ var obj = stats[k];
+ var line = {
+ type: obj['type'],
+ base: obj['base'],
+ unit: obj['unit'],
+ fixed: obj['fixed'],
+ legend: obj['legend']
+ };
+ if(obj['max']) {
+ line['max'] = obj['max'];
+ }
+ if(obj['class']) {
+ line['class'] = obj['class'];
+ }
+ var ps = obj['points'];
+ var numStats = ps.length;
+ var unifiedPoints = [];
+ $.each(ps, function(i, value) {
+ unifiedPoints.push({
+ x: cursor - numStats + i,
+ y: value
+ });
+ });
+ line['points'] = unifiedPoints;
+ lines.push(line);
+ }
+ return lines;
+ };
+
+ return {
+ add: add,
+ get: get
+ };
+ };
+
+ var Tracker = function(charts) {
+ var charts = charts;
+ var timer = null;
+ var statsPool = new StatsMgr();
+ var setCharts = function(newCharts) {
+ charts = newCharts;
+ for(var key in charts) {
+ var chart = charts[key];
+ chart.updateUI(statsPool.get(key));
+ }
+ };
+
+ var self = this;
+
+ var UnifyStats = function(stats) {
+ var result= {
+ cpu: {
+ u: {
+ v: stats['cpu_utilization']
+ }
+ },
+ memory: {
+ u: {
+ }
+ },
+ diskIO: {
+ r: {
+ v: stats['disk_read_rate']
+ },
+ w: {
+ v: stats['disk_write_rate']
+ }
+ },
+ networkIO: {
+ r: {
+ v: stats['net_recv_rate']
+ },
+ s: {
+ v: stats['net_sent_rate']
+ }
+ }
+ };
+ if(Array.isArray(stats['memory'])){
+ result.memory.u['v']=[];
+ result.memory.u['max']=-Infinity;
+ for(var i=0;i<stats['memory'].length;i++){
+ result.memory.u['v'].push(stats['memory'][i]['avail']);
+ result.memory.u['max']=Math.max(result.memory.u['max'],stats['memory'][i]['total']);
+ }
+ }
+ else {
+ result.memory.u['v']=stats['memory']['avail'],
+ result.memory.u['max']=stats['memory']['total']
+ }
+ return(result);
+ };
+
+
+ var statsCallback = function(stats) {
+ var unifiedStats = UnifyStats(stats);
+ statsPool.add(unifiedStats);
+ for(var key in charts) {
+ var chart = charts[key];
+ chart.updateUI(statsPool.get(key));
+ }
+ timer = setTimeout(function() {
+ continueTrack();
+ }, 1000);
+ };
+
+ var track = function() {
+ kimchi.getHostStatsHistory(statsCallback,
+ function() {
+ continueTrack();
+ });
+ };
+
+ var continueTrack = function() {
+ kimchi.getHostStats(statsCallback,
+ function() {
+ continueTrack();
+ });
+ };
+
+ var destroy = function() {
+ timer && clearTimeout(timer);
+ timer = null;
+ };
+
+ return {
+ setCharts: setCharts,
+ start: track,
+ stop: destroy
+ };
+ };
+
+ var initTracker = function() {
+ // TODO: Extend tabs with onUnload event to unregister timers.
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.stop();
+ delete kimchi.hostTimer;
+ }
+
+ var trackedCharts = {
+ cpu: new kimchi.widget.LineChart({
+ id: 'chart-cpu',
+ node: 'container-chart-cpu',
+ type: 'percent'
+ }),
+ memory: new kimchi.widget.LineChart({
+ id: 'chart-memory',
+ node: 'container-chart-memory',
+ type: 'value'
+ }),
+ diskIO: new kimchi.widget.LineChart({
+ id: 'chart-disk-io',
+ node: 'container-chart-disk-io',
+ type: 'value'
+ }),
+ networkIO: new kimchi.widget.LineChart({
+ id: 'chart-network-io',
+ node: 'container-chart-network-io',
+ type: 'value'
+ })
+ };
+
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.setCharts(trackedCharts);
+ }
+ else {
+ kimchi.hostTimer = new Tracker(trackedCharts);
+ kimchi.hostTimer.start();
+ }
+ };
+
+ $('#host-root-container').on('remove', function() {
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.stop();
+ delete kimchi.hostTimer;
+ }
+
+ repositoriesGrid && repositoriesGrid.destroy();
+ wok.topic('kimchi/repositoryAdded')
+ .unsubscribe(listRepositories);
+ wok.topic('kimchi/repositoryUpdated')
+ .unsubscribe(listRepositories);
+ wok.topic('kimchi/repositoryDeleted')
+ .unsubscribe(listRepositories);
+
+ softwareUpdatesGrid && softwareUpdatesGrid.destroy();
+ wok.topic('kimchi/softwareUpdated').unsubscribe(listSoftwareUpdates);
+
+ reportGrid && reportGrid.destroy();
+ wok.topic('kimchi/debugReportAdded').unsubscribe(listDebugReports);
+ wok.topic('kimchi/debugReportRenamed').unsubscribe(listDebugReports);
+ });
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.line-chart.js b/plugins/gingerbase/ui/js/src/gingerbase.line-chart.js
new file mode 100644
index 0000000..13bbee1
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.line-chart.js
@@ -0,0 +1,202 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * new kimchi.widget.LineChart({
+ * node: 'line-chart-cpu',
+ * id: 'line-chart',
+ * type: 'value'
+ * });
+ */
+kimchi.widget.LineChart = function(params) {
+ var container = $('#' + params['node']);
+ container.addClass('chart-container');
+ var height = container.height();
+ var width = container.width();
+ var numHLines = 4;
+ var linesSpace = height / numHLines;
+ var period = params['period'] || 20;
+ var xFactor = width / period;
+ var yFactor = height / 100;
+ var xStart = params['xStart'] || 0;
+ var linesOffset = 0;
+ var canvasID = params['id'];
+ var maxValue = params['maxValue'] || -Infinity;
+ var type = params['type'];
+ var chartVAxis = null;
+ var chartTitle = null;
+ var chartLegend = null;
+ var seriesMap = {};
+ var formatSettings = {};
+
+ var setMaxValue = function(newValue) {
+ maxValue = newValue;
+ };
+
+ /**
+ *
+ * settings: {
+ * 'class': 'disk-read-rate'
+ * }
+ */
+ var updateUI = function(data) {
+ var container = $('#' + params['node']);
+ if(!container.length) {
+ return;
+ }
+
+ if(!$.isArray(data)) {
+ data = [data];
+ }
+ var seriesCount = 0;
+ var singleSeries = data.length === 1;
+ var firstSeries = data[0];
+
+ // TODO: Multiple axes support.
+ if(type === 'value') {
+ $.each(data, function(i, series) {
+ if(series['max'] > maxValue) {
+ maxValue = series['max'];
+ formatSettings = {
+ base: series['base'],
+ unit: series['unit'],
+ fixed: series['fixed']
+ };
+ }
+ });
+ }
+
+ var canvasNode = $('#' + canvasID);
+ canvasNode.length && canvasNode.remove();
+ var htmlStr = [
+ '<svg id="', canvasID, '" class="line-chart"',
+ ' height="', height, '" width="', width, '"',
+ '>',
+ '<rect height="', height, '" width="', width, '" class="background" />'
+ ];
+
+ for(var x = linesOffset; x < width; x += linesSpace) {
+ htmlStr.push(
+ '<line x1="', x, '" y1="', 0, '" x2="', x, '" y2="', height, '" />'
+ );
+ }
+
+ linesOffset -= xFactor;
+ while(linesOffset < 0) {
+ linesOffset = linesSpace + linesOffset;
+ }
+
+ for(var y = height - linesSpace; y > 0; y -= linesSpace) {
+ htmlStr.push(
+ '<line x1="', 0, '" y1="', y, '" x2="', width, '" y2="', y, '" />'
+ );
+ }
+
+ var maxValueLabel = i18n['GGBHOST6001M'] + ' ' +
+ (type === 'value'
+ ? wok.formatMeasurement(maxValue, formatSettings)
+ : '100%');
+ if(!chartVAxis) {
+ chartVAxis = $('<div class="chart-vaxis-container">' +
+ maxValueLabel +
+ '</div>'
+ );
+ container.before(chartVAxis);
+ }
+ else {
+ chartVAxis.text(maxValueLabel);
+ }
+
+ seriesNames = [];
+ $.each(data, function(i, series) {
+ var points = series['points'];
+ var className = series['class'];
+ var latestPoint = points.slice(-1).pop();
+ xStart = latestPoint['x'] - period;
+
+ htmlStr.push('<polyline',
+ ' class="series', className ? ' ' + className : '', '"',
+ ' points="'
+ );
+ var first = true;
+ $.each(points, function(i, point) {
+ if(first) {
+ first = false;
+ }
+ else {
+ htmlStr.push(' ');
+ }
+
+ var x = xFactor * (point['x'] - xStart);
+ var y = height - yFactor * (type === 'value' ?
+ point['y'] * 100 / maxValue :
+ point['y']
+ );
+ htmlStr.push(x, ',', y);
+ });
+ htmlStr.push('" />');
+ });
+
+ htmlStr.push('</svg>');
+
+ var canvasNode = $(htmlStr.join('')).appendTo(container);
+
+ if(!chartLegend) {
+ chartLegend = $('<div class="chart-legend-container"></div>');
+ container.after(chartLegend);
+ }
+ else {
+ chartLegend.empty();
+ }
+ $('polyline.series', canvasNode).each(function(i, polyline) {
+ var wrapper = $('<div class="legend-wrapper"></div>')
+ .appendTo(chartLegend);
+ $([
+ '<svg class="legend-icon" width="20" height="10">',
+ '<line x1="0" y1="5" x2="20" y2="5"/>',
+ '</svg>'
+ ].join('')).appendTo(wrapper);
+ $('line', wrapper).css({
+ stroke: $(polyline).css('stroke'),
+ 'stroke-width': $(polyline).css('stroke-width')
+ });
+ var label = data[i]['legend'];
+ var base = data[i]['base'];
+ $('<label class="legend-label">' + label + '</label>')
+ .appendTo(wrapper);
+ var latestPoint = data[i]['points'].slice(-1).pop();
+ var latestValue = latestPoint['y'];
+ if(type === 'value') {
+ latestValue = wok.formatMeasurement(
+ latestValue,
+ formatSettings
+ );
+ }
+ else {
+ latestValue += '%';
+ }
+ $('<div class="latest-value">' + latestValue + '</div>')
+ .appendTo(wrapper);
+ });
+ };
+
+ return {
+ setMaxValue: setMaxValue,
+ updateUI: updateUI
+ }
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.main.js b/plugins/gingerbase/ui/js/src/gingerbase.main.js
new file mode 100644
index 0000000..2fdeb85
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.main.js
@@ -0,0 +1,26 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.capabilities = undefined;
+kimchi.getCapabilities(function(result) {
+ kimchi.capabilities = result;
+
+ if(kimchi.capabilities.federation=="on")
+ $('#peers').removeClass('hide-content');
+}, function() {
+ kimchi.capabilities = {};
+});
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js b/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
new file mode 100644
index 0000000..87010b1
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
@@ -0,0 +1,72 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.report_add_main = function() {
+ var reportGridID = 'available-reports-grid';
+ var addReportForm = $('#form-report-add');
+ var submitButton = $('#button-report-add');
+ var nameTextbox = $('input[name="name"]', addReportForm);
+ nameTextbox.select();
+
+ var submitForm = function(event) {
+ if(submitButton.prop('disabled')) {
+ return false;
+ }
+ var reportName = nameTextbox.val();
+ var validator = RegExp("^[_A-Za-z0-9-]*$");
+ if (!validator.test(reportName)) {
+ wok.message.error.code('GGBDR6011M');
+ return false;
+ }
+ var formData = addReportForm.serializeObject();
+ var taskAccepted = false;
+ var onTaskAccepted = function() {
+ if(taskAccepted) {
+ return;
+ }
+ taskAccepted = true;
+ wok.window.close();
+ wok.topic('kimchi/debugReportAdded').publish();
+ };
+
+ kimchi.createReport(formData, function(result) {
+ onTaskAccepted();
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, function(result) {
+ // Error message from Async Task status
+ if (result['message']) {
+ var errText = result['message'];
+ }
+ // Error message from standard kimchi exception
+ else {
+ var errText = result['responseJSON']['reason'];
+ }
+ result && wok.message.error(errText);
+
+ taskAccepted &&
+ $('.grid-body-view table tr:first-child',
+ '#' + reportGridID).remove();
+ submitButton.prop('disabled', false);
+ nameTextbox.select();
+ }, onTaskAccepted);
+
+ event.preventDefault();
+ };
+
+ addReportForm.on('submit', submitForm);
+ submitButton.on('click', submitForm);
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js b/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
new file mode 100644
index 0000000..6134b2e
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
@@ -0,0 +1,66 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.report_rename_main = function() {
+ var renameReportForm = $('#form-report-rename');
+ var submitButton = $('#button-report-rename');
+ var nameTextbox = $('input[name="name"]', renameReportForm);
+ var submitForm = function(event) {
+ if(submitButton.prop('disabled')) {
+ return false;
+ }
+ var reportName = nameTextbox.val();
+
+ // if the user hasn't changed the report's name,
+ // nothing should be done.
+ if (reportName == kimchi.selectedReport) {
+ wok.message.error.code('GGBDR6013M');
+ return false;
+ }
+
+ var validator = RegExp("^[A-Za-z0-9-]*$");
+ if (!validator.test(reportName)) {
+ wok.message.error.code('GGBDR6011M');
+ return false;
+ }
+ var formData = renameReportForm.serializeObject();
+ submitButton.prop('disabled', true);
+ nameTextbox.prop('disabled', true);
+ kimchi.renameReport(kimchi.selectedReport, formData, function(result) {
+ submitButton.prop('disabled', false);
+ nameTextbox.prop('disabled', false);
+ wok.window.close();
+ wok.topic('kimchi/debugReportRenamed').publish({
+ result: result
+ });
+ }, function(result) {
+ var errText = result &&
+ result['responseJSON'] &&
+ result['responseJSON']['reason'];
+ wok.message.error(errText);
+ submitButton.prop('disabled', false);
+ nameTextbox.prop('disabled', false).focus();
+ });
+
+ event.preventDefault();
+ };
+
+ renameReportForm.on('submit', submitForm);
+ submitButton.on('click', submitForm);
+
+ nameTextbox.val(kimchi.selectedReport).select();
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js b/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
new file mode 100644
index 0000000..656306b
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
@@ -0,0 +1,96 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.repository_add_main = function() {
+
+ var addForm = $('#form-repository-add');
+ var addButton = $('#button-repository-add');
+
+ var validateField = function(event) {
+ var valid=($(this).val()!=='');
+ $(addButton).prop('disabled', !valid);
+ return(valid);
+ };
+
+ var validateForm = function(event) {
+ var valid=false;
+ addForm.find('input.required').each( function() {
+ valid=($(this).val()!=='');
+ return(!valid);
+ });
+ return(valid);
+ }
+
+ addForm.find('input.required').on('input propertychange', validateField);
+
+ var weedObject = function(obj) {
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ if((typeof(obj[key])==="object") && !Array.isArray(obj[key])) {
+ weedObject(obj[key]);
+ }
+ else if(obj[key] == '') {
+ delete obj[key];
+ }
+ }
+ }
+ }
+
+ var addRepository = function(event) {
+ var valid = validateForm();
+ if(!valid) {
+ return false;
+ }
+
+ var formData = $(addForm).serializeObject();
+
+ if (formData && formData.isMirror!=undefined) {
+ formData.isMirror=(String(formData.isMirror).toLowerCase() === 'true');
+ }
+ if(formData.isMirror) {
+ if(formData.config==undefined) {
+ formData.config=new Object();
+ }
+ formData.config.mirrorlist=formData.baseurl;
+ delete formData.baseurl;
+ delete formData.isMirror;
+ }
+ weedObject(formData);
+ if(formData.config && formData.config.comps) {
+ formData.config.comps=formData.config.comps.split(/[,\s]/);
+ for(var i=0; i>formData.config.comps.length; i++) {
+ formData.config.comps[i]=formData.config.comps[i].trim();
+ }
+ for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
+ formData.config.comps.splice(j, 1);
+ }
+ }
+
+ kimchi.createRepository(formData, function() {
+ wok.topic('kimchi/repositoryAdded').publish();
+ wok.window.close();
+ }, function(jqXHR, textStatus, errorThrown) {
+ var reason = jqXHR &&
+ jqXHR['responseJSON'] &&
+ jqXHR['responseJSON']['reason'];
+ wok.message.error(reason);
+ });
+ return false;
+ };
+
+ $(addForm).on('submit', addRepository);
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js b/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
new file mode 100644
index 0000000..5bfc51e
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
@@ -0,0 +1,74 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.repository_edit_main = function() {
+
+ var editForm = $('#form-repository-edit');
+
+ var saveButton = $('#repository-edit-button-save');
+
+ if(kimchi.capabilities['repo_mngt_tool']=="yum") {
+ editForm.find('input.deb').prop('disabled', true);
+ }
+ else if(kimchi.capabilities['repo_mngt_tool']=="deb") {
+ editForm.find('input.yum').prop('disabled', true);
+ }
+
+ kimchi.retrieveRepository(kimchi.selectedRepository, function(repository) {
+ editForm.fillWithObject(repository);
+
+ $('input', editForm).on('input propertychange', function(event) {
+ if($(this).val() !== '') {
+ $(saveButton).prop('disabled', false);
+ }
+ });
+ });
+
+
+ var editRepository = function(event) {
+ var formData = $(editForm).serializeObject();
+
+ if (formData && formData.config) {
+ formData.config.gpgcheck=(String(formData.config.gpgcheck).toLowerCase() === 'true');
+ }
+
+ if(formData.config && formData.config.comps) {
+ formData.config.comps=formData.config.comps.split(/[,\s]/);
+ for(var i=0; i>formData.config.comps.length; i++) {
+ formData.config.comps[i]=formData.config.comps[i].trim();
+ }
+ for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
+ formData.config.comps.splice(j, 1);
+ }
+ }
+
+ kimchi.updateRepository(kimchi.selectedRepository, formData, function() {
+ wok.topic('kimchi/repositoryUpdated').publish();
+ wok.window.close();
+ }, function(jqXHR, textStatus, errorThrown) {
+ var reason = jqXHR &&
+ jqXHR['responseJSON'] &&
+ jqXHR['responseJSON']['reason'];
+ wok.message.error(reason);
+ });
+
+ return false;
+ };
+
+ $(editForm).on('submit', editRepository);
+ $(saveButton).on('click', editRepository);
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.select.js b/plugins/gingerbase/ui/js/src/gingerbase.select.js
new file mode 100644
index 0000000..751167f
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.select.js
@@ -0,0 +1,50 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+kimchi.select = function(id, options) {
+ var listControl = $('#'+ id);
+ var targetId = listControl.data('target');
+ var labelId = listControl.data('label');
+ var value = $('#' + targetId).val();
+ var item;
+ var itemTag = 'li';
+ var selectedClass = 'active';
+ $.each(options, function(index, option) {
+ item = $('<' + itemTag + '></' + itemTag + '>');
+ item.text(option.label);
+ item.data('value', option.value);
+ if(option.value === value) {
+ item.addClass(selectedClass);
+ $('#' + labelId).text(option.label);
+ }
+ listControl.append(item);
+ });
+
+ listControl.on('click', itemTag, function() {
+ listControl.children().removeClass(selectedClass);
+ $(this).addClass(selectedClass);
+ $('#' + labelId).text($(this).text());
+ var target = $('#' + targetId);
+ var oldValue = target.val();
+ var newValue = $(this).data('value');
+ target.val(newValue);
+ if(oldValue !== newValue) {
+ target.change();
+ }
+ });
+};
diff --git a/plugins/gingerbase/ui/js/widgets/circleGauge.js b/plugins/gingerbase/ui/js/widgets/circleGauge.js
new file mode 100644
index 0000000..32973ac
--- /dev/null
+++ b/plugins/gingerbase/ui/js/widgets/circleGauge.js
@@ -0,0 +1,100 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ (function($) {
+ $.widget('kimchi.circleGauge', {
+
+ options : {
+ color : '#87C004',
+ fillColor : '#87C004',
+ lineWidth : 20,
+ shadowSize : '2px',
+ font : 'bold 13px Geneva, sans-serif',
+ textAlign : 'center',
+ radius : 35,
+ peakRate : 100,
+ display : 0,
+ circle : 0,
+ label : ''
+ },
+
+ _create : function() {
+ //valuesAttr="{" + this.element.data('value')+ "}";
+ //console.info(valuesAttr);
+ //values=eval("(" + valuesAttr + ")");
+ //$.extend(this.options, values);
+ this.options.display=this.element.data('display');
+ this.options.percentage=this.element.data('percentage');
+ this._fixupPeakRate();
+ this._draw();
+ },
+
+ setValues : function(values) {
+ $.extend(this.options, values);
+ this._fixupPeakRate();
+ this._draw();
+ },
+
+ _fixupPeakRate : function() {
+ if (this.options.circle>this.options.peakRate) {
+ this.options.peakRate=this.options.circle;
+ }
+ },
+
+ _draw : function() {
+ this.element.empty();
+ var canvas = document.createElement('canvas');
+ //this.element.append($(canvas)); //I don't quite understand this line so trying the one below...
+ this.element.append(canvas);
+
+ var ctx = canvas.getContext('2d');
+ var radius = this.options.radius;
+
+ var shadowSize = 2;
+ var width = height = radius * 2;
+ $(canvas).attr('height', height);
+ $(canvas).attr('width', width);
+
+ $(canvas).css({
+ 'boxShadow' : shadowSize + 'px ' + shadowSize + 'px ' + shadowSize + 'px #fff, -' + shadowSize + 'px -' + shadowSize + 'px ' + shadowSize + 'px #eaeaea',
+ borderRadius : radius + 'px'
+ });
+
+ ctx.clearRect(0, 0, width, height);
+ ctx.fillStyle = this.options.fillColor;
+ ctx.font = this.options.font;
+ ctx.textAlign = 'center';
+ var originPos = radius;
+ ctx.textBaseline = 'middle';
+ ctx.fillText(this.options.display, originPos, originPos);
+ ctx.strokeStyle = this.options.color;
+ ctx.lineWidth = this.options.lineWidth;
+ ctx.beginPath();
+ ctx.arc(originPos, originPos, radius, -.5 * Math.PI, (this.options.percentage / 50 - .5) * Math.PI);
+ ctx.stroke();
+ },
+
+ destroy : function() {
+ this.element.empty();
+ $.Widget.prototype.destroy.call(this);
+ }
+ });
+}(jQuery));
+
+kimchi.circleGauge = function(selector) {
+ $(selector).circleGauge();
+};
diff --git a/plugins/kimchi/ui/js/src/kimchi.host.js b/plugins/kimchi/ui/js/src/kimchi.host.js
deleted file mode 100644
index ab02333..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.host.js
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.host={};
-
-kimchi.host_main = function() {
- var expand = function(header, toExpand) {
- var controlledNode = $(header).attr('aria-controls');
- $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
- $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
- };
-
- var repositoriesGrid = null;
- var initRepositoriesGrid = function(repo_type) {
- var gridFields=[];
- if (repo_type == "yum") {
- gridFields=[{
- name: 'repo_id',
- label: i18n['KCHREPO6004M'],
- 'class': 'repository-id'
- }, {
- name: 'config[repo_name]',
- label: i18n['KCHREPO6005M'],
- 'class': 'repository-name'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled'
- }];
- }
- else if (repo_type == "deb") {
- gridFields=[{
- name: 'baseurl',
- label: i18n['KCHREPO6006M'],
- makeTitle: true,
- 'class': 'repository-baseurl deb'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled deb'
- }, {
- name: 'config[dist]',
- label: "dist",
- 'class': 'repository-gpgcheck deb'
- }, {
- name: 'config[comps]',
- label: "comps",
- 'class': 'repository-gpgcheck deb'
- }];
- }
- else {
- gridFields=[{
- name: 'repo_id',
- label: i18n['KCHREPO6004M'],
- 'class': 'repository-id'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled'
- }, {
- name: 'baseurl',
- label: i18n['KCHREPO6006M'],
- makeTitle: true,
- 'class': 'repository-baseurl'
- }];
- }
- repositoriesGrid = new kimchi.widget.Grid({
- container: 'repositories-grid-container',
- id: 'repositories-grid',
- title: i18n['KCHREPO6003M'],
- toolbarButtons: [{
- id: 'repositories-grid-add-button',
- label: i18n['KCHREPO6012M'],
- onClick: function(event) {
- wok.window.open({url:'plugins/kimchi/repository-add.html',
- class: repo_type});
- }
- }, {
- id: 'repositories-grid-enable-button',
- label: i18n['KCHREPO6016M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- var name = repository['repo_id'];
- var enable = !repository['enabled'];
- $(this).prop('disabled', true);
- kimchi.enableRepository(name, enable, function() {
- wok.topic('kimchi/repositoryUpdated').publish();
- });
- }
- }, {
- id: 'repositories-grid-edit-button',
- label: i18n['KCHREPO6013M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- kimchi.selectedRepository = repository['repo_id'];
- wok.window.open({url:'plugins/kimchi/repository-edit.html',
- class: repo_type});
- }
- }, {
- id: 'repositories-grid-remove-button',
- label: i18n['KCHREPO6014M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
-
- var settings = {
- title : i18n['KCHREPO6001M'],
- content : i18n['KCHREPO6002M'],
- confirm : i18n['KCHAPI6004M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.deleteRepository(
- repository['repo_id'],
- function(result) {
- wok.topic('kimchi/repositoryDeleted').publish(result);
- }, function(error) {
- }
- );
- });
- }
- }],
- onRowSelected: function(row) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- $('#repositories-grid-remove-button').prop('disabled', false);
- $('#repositories-grid-edit-button').prop('disabled', false);
- var enabled = repository['enabled'];
- $('#repositories-grid-enable-button')
- .text(i18n[enabled ? 'KCHREPO6017M' : 'KCHREPO6016M'])
- .prop('disabled', false);
- },
- frozenFields: [],
- fields: gridFields,
- data: listRepositories
- });
- };
-
- var listRepositories = function(gridCallback) {
- kimchi.listRepositories(function(repositories) {
- if($.isFunction(gridCallback)) {
- gridCallback(repositories);
- }
- else {
- if(repositoriesGrid) {
- repositoriesGrid.setData(repositories);
- }
- else {
- initRepositoriesGrid();
- repositoriesGrid.setData(repositories);
- }
- }
- },
- function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
-
- if($.isFunction(gridCallback)) {
- gridCallback([]);
- }
- repositoriesGrid &&
- repositoriesGrid.showMessage(message || i18n['KCHUPD6008M']);
- });
-
- $('#repositories-grid-remove-button').prop('disabled', true);
- $('#repositories-grid-edit-button').prop('disabled', true);
- $('#repositories-grid-enable-button').prop('disabled', true);
- };
-
- var softwareUpdatesGridID = 'software-updates-grid';
- var softwareUpdatesGrid = null;
- var progressAreaID = 'software-updates-progress-textarea';
- var reloadProgressArea = function(result) {
- var progressArea = $('#' + progressAreaID)[0];
- $(progressArea).text(result['message']);
- var scrollTop = $(progressArea).prop('scrollHeight');
- $(progressArea).prop('scrollTop', scrollTop);
- };
-
- var initSoftwareUpdatesGrid = function(softwareUpdates) {
- softwareUpdatesGrid = new kimchi.widget.Grid({
- container: 'software-updates-grid-container',
- id: softwareUpdatesGridID,
- title: i18n['KCHUPD6001M'],
- rowSelection: 'disabled',
- toolbarButtons: [{
- id: softwareUpdatesGridID + '-update-button',
- label: i18n['KCHUPD6006M'],
- disabled: true,
- onClick: function(event) {
- var updateButton = $(this);
- var progressArea = $('#' + progressAreaID)[0];
- $('#software-updates-progress-container').removeClass('hidden');
- $(progressArea).text('');
- !wok.isElementInViewport(progressArea) &&
- progressArea.scrollIntoView();
- $(updateButton).text(i18n['KCHUPD6007M']).prop('disabled', true);
-
- kimchi.updateSoftware(function(result) {
- reloadProgressArea(result);
- $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
- wok.topic('kimchi/softwareUpdated').publish({
- result: result
- });
- }, function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
- wok.message.error(message || i18n['KCHUPD6009M']);
- $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
- }, reloadProgressArea);
- }
- }],
- frozenFields: [],
- fields: [{
- name: 'package_name',
- label: i18n['KCHUPD6002M'],
- 'class': 'software-update-name'
- }, {
- name: 'version',
- label: i18n['KCHUPD6003M'],
- 'class': 'software-update-version'
- }, {
- name: 'arch',
- label: i18n['KCHUPD6004M'],
- 'class': 'software-update-arch'
- }, {
- name: 'repository',
- label: i18n['KCHUPD6005M'],
- 'class': 'software-update-repos'
- }],
- data: listSoftwareUpdates
- });
- };
-
- var listSoftwareUpdates = function(gridCallback) {
- kimchi.listSoftwareUpdates(function(softwareUpdates) {
- if($.isFunction(gridCallback)) {
- gridCallback(softwareUpdates);
- }
- else {
- if(softwareUpdatesGrid) {
- softwareUpdatesGrid.setData(softwareUpdates);
- }
- else {
- initSoftwareUpdatesGrid(softwareUpdates);
- }
- }
-
- var updateButton = $('#' + softwareUpdatesGridID + '-update-button');
- $(updateButton).prop('disabled', softwareUpdates.length === 0);
- }, function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
- if($.isFunction(gridCallback)) {
- gridCallback([]);
- }
- softwareUpdatesGrid &&
- softwareUpdatesGrid.showMessage(message || i18n['KCHUPD6008M']);
- });
- };
-
- var reportGridID = 'available-reports-grid';
- var reportGrid = null;
- var enableReportButtons = function(toEnable) {
- var buttonID = '#{grid}-{btn}-button';
- $.each(['rename', 'remove', 'download'], function(i, n) {
- $(wok.substitute(buttonID, {
- grid: reportGridID,
- btn: n
- })).prop('disabled', !toEnable);
- });
- };
- var initReportGrid = function(reports) {
- reportGrid = new kimchi.widget.Grid({
- container: 'available-reports-grid-container',
- id: reportGridID,
- title: i18n['KCHDR6002M'],
- toolbarButtons: [{
- id: reportGridID + '-generate-button',
- label: i18n['KCHDR6006M'],
- onClick: function(event) {
- wok.window.open('plugins/kimchi/report-add.html');
- }
- }, {
- id: reportGridID + '-rename-button',
- label: i18n['KCHDR6008M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- kimchi.selectedReport = report['name'];
- wok.window.open('plugins/kimchi/report-rename.html');
- }
- }, {
- id: reportGridID + '-remove-button',
- label: i18n['KCHDR6009M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- var settings = {
- title : i18n['KCHAPI6004M'],
- content : i18n['KCHDR6001M'],
- confirm : i18n['KCHAPI6002M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.deleteReport({
- name: report['name']
- }, function(result) {
- listDebugReports();
- }, function(error) {
- wok.message.error(error.responseJSON.reason);
- });
- });
- }
- }, {
- id: reportGridID + '-download-button',
- label: i18n['KCHDR6010M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- kimchi.downloadReport({
- file: report['uri']
- });
- }
- }],
- onRowSelected: function(row) {
- var report = reportGrid.getSelected();
- // Only enable report buttons if the selected line is not a
- // pending report
- if (report['time'] == i18n['KCHDR6007M']) {
- var gridElement = $('#'+ reportGridID);
- var row = $('tr:contains(' + report['name'] + ')', gridElement);
- enableReportButtons(false);
- row.attr('class', '');
- }
- else {
- enableReportButtons(true);
- }
- },
- frozenFields: [],
- fields: [{
- name: 'name',
- label: i18n['KCHDR6003M'],
- 'class': 'debug-report-name'
- }, {
- name: 'time',
- label: i18n['KCHDR6005M'],
- 'class': 'debug-report-time'
- }],
- data: reports
- });
- };
-
- var getPendingReports = function() {
- var reports = []
- var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/kimchi/debugreports/*')
-
- kimchi.getTasksByFilter(filter, function(tasks) {
- for(var i = 0; i < tasks.length; i++) {
- reportName = tasks[i].target_uri.replace(/^\/plugins\/kimchi\/debugreports\//, '') || i18n['KCHDR6012M'];
- reports.push({'name': reportName, 'time': i18n['KCHDR6007M']})
-
- if(kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) {
- continue;
- }
-
- kimchi.trackTask(tasks[i].id, function(result) {
- wok.topic('kimchi/debugReportAdded').publish();
- }, function(result) {
- // Error message from Async Task status
- if (result['message']) {
- var errText = result['message'];
- }
- // Error message from standard kimchi exception
- else {
- var errText = result['responseJSON']['reason'];
- }
- result && wok.message.error(errText);
- wok.topic('kimchi/debugReportAdded').publish();
- }, null);
- }
- }, null, true);
-
- return reports;
- };
-
- var listDebugReports = function() {
- kimchi.listReports(function(reports) {
- pendingReports = getPendingReports();
- allReports = pendingReports.concat(reports);
- $('#debug-report-section').removeClass('hidden');
-
- // Row selection will be cleared so disable buttons here
- enableReportButtons(false);
-
- if(reportGrid) {
- reportGrid.setData(allReports);
- }
- else {
- initReportGrid(allReports);
- }
-
- // Set id-debug-img to pending reports
- // It will display a loading icon
- var gridElement = $('#' + reportGridID);
- $.each($('td:contains(' + i18n['KCHDR6007M'] + ')', gridElement), function(index, row) {
- $(row).parent().addClass('no-hover');
- $(row).attr('id', 'id-debug-img');
- });
- }, function(error) {
- if(error['status'] == 403) {
- $('#debug-report-section').addClass('hidden');
- return;
- }
- $('#debug-report-section').removeClass('hidden');
- });
- };
-
- var shutdownButtonID = '#host-button-shutdown';
- var restartButtonID = '#host-button-restart';
- var shutdownHost = function(params) {
- var settings = {
- title : i18n['KCHAPI6004M'],
- content : i18n['KCHHOST6008M'],
- confirm : i18n['KCHAPI6002M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.shutdown(params);
- $(shutdownButtonID).prop('disabled', true);
- $(restartButtonID).prop('disabled', true);
- // Check if there is any VM is running.
- kimchi.listVMs(function(vms) {
- for(var i = 0; i < vms.length; i++) {
- if(vms[i]['state'] === 'running') {
- wok.message.error.code('KCHHOST6001E');
- $(shutdownButtonID).prop('disabled', false);
- $(restartButtonID).prop('disabled', false);
- return;
- }
- }
-
- });
- }, function() {
- });
- };
-
- var initPage = function() {
- $('#host-info-container .section-header').each(function(i, header) {
- $('<span class="arrow"></span>').prependTo(header);
- var toExpand = $(header).attr('aria-expanded') !== 'false';
- expand(header, toExpand);
- });
-
- $('#host-info-container').on('click', '.section-header', function(event) {
- var toExpand = $(this).attr('aria-expanded') === 'false';
- expand(this, toExpand);
- });
-
- $('#host-button-shutdown').on('click', function(event) {
- shutdownHost(null);
- });
-
- $('#host-button-restart').on('click', function(event) {
- shutdownHost({
- reboot: true
- });
- });
-
- var setupUI = function() {
- if (kimchi.capabilities == undefined) {
- setTimeout(setupUI, 2000);
- return;
- }
-
- if((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool']!="None")) {
- initRepositoriesGrid(kimchi.capabilities['repo_mngt_tool']);
- $('#repositories-section').switchClass('hidden', kimchi.capabilities['repo_mngt_tool']);
- wok.topic('kimchi/repositoryAdded')
- .subscribe(listRepositories);
- wok.topic('kimchi/repositoryUpdated')
- .subscribe(listRepositories);
- wok.topic('kimchi/repositoryDeleted')
- .subscribe(listRepositories);
- }
-
- if(kimchi.capabilities['update_tool']) {
- $('#software-update-section').removeClass('hidden');
- initSoftwareUpdatesGrid();
- wok.topic('kimchi/softwareUpdated')
- .subscribe(listSoftwareUpdates);
- $('#software-updates-progress-container').accordion({
- collapsible: true
- });
- }
-
- if(kimchi.capabilities['system_report_tool']) {
- listDebugReports();
- wok.topic('kimchi/debugReportAdded')
- .subscribe(listDebugReports);
- wok.topic('kimchi/debugReportRenamed')
- .subscribe(listDebugReports);
- }
- };
- setupUI();
- };
-
- kimchi.getHost(function(data) {
- var htmlTmpl = $('#host-tmpl').html();
- data['logo'] = data['logo'] || '';
- data['memory'] = wok.formatMeasurement(data['memory'], {
- fixed: 2
- });
- var templated = wok.substitute(htmlTmpl, data);
- $('#host-content-container').html(templated);
-
- initPage();
- initTracker();
- });
-
- var StatsMgr = function() {
- var statsArray = {
- cpu: {
- u: {
- type: 'percent',
- legend: i18n['KCHHOST6002M'],
- points: []
- }
- },
- memory: {
- u: {
- type: 'value',
- base: 2,
- fixed: 2,
- legend: i18n['KCHHOST6003M'],
- points: []
- }
- },
- diskIO: {
- r: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6004M'],
- points: []
- },
- w: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6005M'],
- 'class': 'disk-write',
- points: []
- }
- },
- networkIO: {
- r: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6006M'],
- points: []
- },
- s: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6007M'],
- 'class': 'network-sent',
- points: []
- }
- }
- };
- var SIZE = 20;
- var cursor = SIZE;
-
- var add = function(stats) {
- for(var key in stats) {
- var item = stats[key];
- for(var metrics in item) {
- var value = item[metrics]['v'];
- var max = item[metrics]['max'];
- var unifiedMetrics = statsArray[key][metrics];
- var ps = unifiedMetrics['points'];
- if(!Array.isArray(value)){
- ps.push(value);
- if(ps.length > SIZE + 1) {
- ps.shift();
- }
- }
- else{
- ps=ps.concat(value);
- ps.splice(0, ps.length-SIZE-1);
- unifiedMetrics['points']=ps;
- }
- if(max !== undefined) {
- unifiedMetrics['max'] = max;
- }
- else {
- if(unifiedMetrics['type'] !== 'value') {
- continue;
- }
- max = -Infinity;
- $.each(ps, function(i, value) {
- if(value > max) {
- max = value;
- }
- });
- if(max === 0) {
- ++max;
- }
- max *= 1.1;
- unifiedMetrics['max'] = max;
- }
- }
- }
- cursor++;
- };
-
- var get = function(which) {
- var stats = statsArray[which];
- var lines = [];
- for(var k in stats) {
- var obj = stats[k];
- var line = {
- type: obj['type'],
- base: obj['base'],
- unit: obj['unit'],
- fixed: obj['fixed'],
- legend: obj['legend']
- };
- if(obj['max']) {
- line['max'] = obj['max'];
- }
- if(obj['class']) {
- line['class'] = obj['class'];
- }
- var ps = obj['points'];
- var numStats = ps.length;
- var unifiedPoints = [];
- $.each(ps, function(i, value) {
- unifiedPoints.push({
- x: cursor - numStats + i,
- y: value
- });
- });
- line['points'] = unifiedPoints;
- lines.push(line);
- }
- return lines;
- };
-
- return {
- add: add,
- get: get
- };
- };
-
- var Tracker = function(charts) {
- var charts = charts;
- var timer = null;
- var statsPool = new StatsMgr();
- var setCharts = function(newCharts) {
- charts = newCharts;
- for(var key in charts) {
- var chart = charts[key];
- chart.updateUI(statsPool.get(key));
- }
- };
-
- var self = this;
-
- var UnifyStats = function(stats) {
- var result= {
- cpu: {
- u: {
- v: stats['cpu_utilization']
- }
- },
- memory: {
- u: {
- }
- },
- diskIO: {
- r: {
- v: stats['disk_read_rate']
- },
- w: {
- v: stats['disk_write_rate']
- }
- },
- networkIO: {
- r: {
- v: stats['net_recv_rate']
- },
- s: {
- v: stats['net_sent_rate']
- }
- }
- };
- if(Array.isArray(stats['memory'])){
- result.memory.u['v']=[];
- result.memory.u['max']=-Infinity;
- for(var i=0;i<stats['memory'].length;i++){
- result.memory.u['v'].push(stats['memory'][i]['avail']);
- result.memory.u['max']=Math.max(result.memory.u['max'],stats['memory'][i]['total']);
- }
- }
- else {
- result.memory.u['v']=stats['memory']['avail'],
- result.memory.u['max']=stats['memory']['total']
- }
- return(result);
- };
-
-
- var statsCallback = function(stats) {
- var unifiedStats = UnifyStats(stats);
- statsPool.add(unifiedStats);
- for(var key in charts) {
- var chart = charts[key];
- chart.updateUI(statsPool.get(key));
- }
- timer = setTimeout(function() {
- continueTrack();
- }, 1000);
- };
-
- var track = function() {
- kimchi.getHostStatsHistory(statsCallback,
- function() {
- continueTrack();
- });
- };
-
- var continueTrack = function() {
- kimchi.getHostStats(statsCallback,
- function() {
- continueTrack();
- });
- };
-
- var destroy = function() {
- timer && clearTimeout(timer);
- timer = null;
- };
-
- return {
- setCharts: setCharts,
- start: track,
- stop: destroy
- };
- };
-
- var initTracker = function() {
- // TODO: Extend tabs with onUnload event to unregister timers.
- if(kimchi.hostTimer) {
- kimchi.hostTimer.stop();
- delete kimchi.hostTimer;
- }
-
- var trackedCharts = {
- cpu: new kimchi.widget.LineChart({
- id: 'chart-cpu',
- node: 'container-chart-cpu',
- type: 'percent'
- }),
- memory: new kimchi.widget.LineChart({
- id: 'chart-memory',
- node: 'container-chart-memory',
- type: 'value'
- }),
- diskIO: new kimchi.widget.LineChart({
- id: 'chart-disk-io',
- node: 'container-chart-disk-io',
- type: 'value'
- }),
- networkIO: new kimchi.widget.LineChart({
- id: 'chart-network-io',
- node: 'container-chart-network-io',
- type: 'value'
- })
- };
-
- if(kimchi.hostTimer) {
- kimchi.hostTimer.setCharts(trackedCharts);
- }
- else {
- kimchi.hostTimer = new Tracker(trackedCharts);
- kimchi.hostTimer.start();
- }
- };
-
- $('#host-root-container').on('remove', function() {
- if(kimchi.hostTimer) {
- kimchi.hostTimer.stop();
- delete kimchi.hostTimer;
- }
-
- repositoriesGrid && repositoriesGrid.destroy();
- wok.topic('kimchi/repositoryAdded')
- .unsubscribe(listRepositories);
- wok.topic('kimchi/repositoryUpdated')
- .unsubscribe(listRepositories);
- wok.topic('kimchi/repositoryDeleted')
- .unsubscribe(listRepositories);
-
- softwareUpdatesGrid && softwareUpdatesGrid.destroy();
- wok.topic('kimchi/softwareUpdated').unsubscribe(listSoftwareUpdates);
-
- reportGrid && reportGrid.destroy();
- wok.topic('kimchi/debugReportAdded').unsubscribe(listDebugReports);
- wok.topic('kimchi/debugReportRenamed').unsubscribe(listDebugReports);
- });
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.report_add_main.js b/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
deleted file mode 100644
index 5f098d3..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.report_add_main = function() {
- var reportGridID = 'available-reports-grid';
- var addReportForm = $('#form-report-add');
- var submitButton = $('#button-report-add');
- var nameTextbox = $('input[name="name"]', addReportForm);
- nameTextbox.select();
-
- var submitForm = function(event) {
- if(submitButton.prop('disabled')) {
- return false;
- }
- var reportName = nameTextbox.val();
- var validator = RegExp("^[_A-Za-z0-9-]*$");
- if (!validator.test(reportName)) {
- wok.message.error.code('KCHDR6011M');
- return false;
- }
- var formData = addReportForm.serializeObject();
- var taskAccepted = false;
- var onTaskAccepted = function() {
- if(taskAccepted) {
- return;
- }
- taskAccepted = true;
- wok.window.close();
- wok.topic('kimchi/debugReportAdded').publish();
- };
-
- kimchi.createReport(formData, function(result) {
- onTaskAccepted();
- wok.topic('kimchi/debugReportAdded').publish();
- }, function(result) {
- // Error message from Async Task status
- if (result['message']) {
- var errText = result['message'];
- }
- // Error message from standard kimchi exception
- else {
- var errText = result['responseJSON']['reason'];
- }
- result && wok.message.error(errText);
-
- taskAccepted &&
- $('.grid-body-view table tr:first-child',
- '#' + reportGridID).remove();
- submitButton.prop('disabled', false);
- nameTextbox.select();
- }, onTaskAccepted);
-
- event.preventDefault();
- };
-
- addReportForm.on('submit', submitForm);
- submitButton.on('click', submitForm);
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js b/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
deleted file mode 100644
index 1bdb8d9..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.report_rename_main = function() {
- var renameReportForm = $('#form-report-rename');
- var submitButton = $('#button-report-rename');
- var nameTextbox = $('input[name="name"]', renameReportForm);
- var submitForm = function(event) {
- if(submitButton.prop('disabled')) {
- return false;
- }
- var reportName = nameTextbox.val();
-
- // if the user hasn't changed the report's name,
- // nothing should be done.
- if (reportName == kimchi.selectedReport) {
- wok.message.error.code('KCHDR6013M');
- return false;
- }
-
- var validator = RegExp("^[A-Za-z0-9-]*$");
- if (!validator.test(reportName)) {
- wok.message.error.code('KCHDR6011M');
- return false;
- }
- var formData = renameReportForm.serializeObject();
- submitButton.prop('disabled', true);
- nameTextbox.prop('disabled', true);
- kimchi.renameReport(kimchi.selectedReport, formData, function(result) {
- submitButton.prop('disabled', false);
- nameTextbox.prop('disabled', false);
- wok.window.close();
- wok.topic('kimchi/debugReportRenamed').publish({
- result: result
- });
- }, function(result) {
- var errText = result &&
- result['responseJSON'] &&
- result['responseJSON']['reason'];
- wok.message.error(errText);
- submitButton.prop('disabled', false);
- nameTextbox.prop('disabled', false).focus();
- });
-
- event.preventDefault();
- };
-
- renameReportForm.on('submit', submitForm);
- submitButton.on('click', submitForm);
-
- nameTextbox.val(kimchi.selectedReport).select();
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js b/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
deleted file mode 100644
index 656306b..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.repository_add_main = function() {
-
- var addForm = $('#form-repository-add');
- var addButton = $('#button-repository-add');
-
- var validateField = function(event) {
- var valid=($(this).val()!=='');
- $(addButton).prop('disabled', !valid);
- return(valid);
- };
-
- var validateForm = function(event) {
- var valid=false;
- addForm.find('input.required').each( function() {
- valid=($(this).val()!=='');
- return(!valid);
- });
- return(valid);
- }
-
- addForm.find('input.required').on('input propertychange', validateField);
-
- var weedObject = function(obj) {
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- if((typeof(obj[key])==="object") && !Array.isArray(obj[key])) {
- weedObject(obj[key]);
- }
- else if(obj[key] == '') {
- delete obj[key];
- }
- }
- }
- }
-
- var addRepository = function(event) {
- var valid = validateForm();
- if(!valid) {
- return false;
- }
-
- var formData = $(addForm).serializeObject();
-
- if (formData && formData.isMirror!=undefined) {
- formData.isMirror=(String(formData.isMirror).toLowerCase() === 'true');
- }
- if(formData.isMirror) {
- if(formData.config==undefined) {
- formData.config=new Object();
- }
- formData.config.mirrorlist=formData.baseurl;
- delete formData.baseurl;
- delete formData.isMirror;
- }
- weedObject(formData);
- if(formData.config && formData.config.comps) {
- formData.config.comps=formData.config.comps.split(/[,\s]/);
- for(var i=0; i>formData.config.comps.length; i++) {
- formData.config.comps[i]=formData.config.comps[i].trim();
- }
- for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
- formData.config.comps.splice(j, 1);
- }
- }
-
- kimchi.createRepository(formData, function() {
- wok.topic('kimchi/repositoryAdded').publish();
- wok.window.close();
- }, function(jqXHR, textStatus, errorThrown) {
- var reason = jqXHR &&
- jqXHR['responseJSON'] &&
- jqXHR['responseJSON']['reason'];
- wok.message.error(reason);
- });
- return false;
- };
-
- $(addForm).on('submit', addRepository);
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js b/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
deleted file mode 100644
index 5bfc51e..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.repository_edit_main = function() {
-
- var editForm = $('#form-repository-edit');
-
- var saveButton = $('#repository-edit-button-save');
-
- if(kimchi.capabilities['repo_mngt_tool']=="yum") {
- editForm.find('input.deb').prop('disabled', true);
- }
- else if(kimchi.capabilities['repo_mngt_tool']=="deb") {
- editForm.find('input.yum').prop('disabled', true);
- }
-
- kimchi.retrieveRepository(kimchi.selectedRepository, function(repository) {
- editForm.fillWithObject(repository);
-
- $('input', editForm).on('input propertychange', function(event) {
- if($(this).val() !== '') {
- $(saveButton).prop('disabled', false);
- }
- });
- });
-
-
- var editRepository = function(event) {
- var formData = $(editForm).serializeObject();
-
- if (formData && formData.config) {
- formData.config.gpgcheck=(String(formData.config.gpgcheck).toLowerCase() === 'true');
- }
-
- if(formData.config && formData.config.comps) {
- formData.config.comps=formData.config.comps.split(/[,\s]/);
- for(var i=0; i>formData.config.comps.length; i++) {
- formData.config.comps[i]=formData.config.comps[i].trim();
- }
- for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
- formData.config.comps.splice(j, 1);
- }
- }
-
- kimchi.updateRepository(kimchi.selectedRepository, formData, function() {
- wok.topic('kimchi/repositoryUpdated').publish();
- wok.window.close();
- }, function(jqXHR, textStatus, errorThrown) {
- var reason = jqXHR &&
- jqXHR['responseJSON'] &&
- jqXHR['responseJSON']['reason'];
- wok.message.error(reason);
- });
-
- return false;
- };
-
- $(editForm).on('submit', editRepository);
- $(saveButton).on('click', editRepository);
-};
--
2.1.0
3
2
11 Sep '15
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/tests/Makefile.am | 49 +++++
plugins/gingerbase/tests/run_tests.sh.in | 55 ++++++
plugins/gingerbase/tests/test_config.py.in | 154 ++++++++++++++++
plugins/gingerbase/tests/test_host.py | 152 ++++++++++++++++
plugins/gingerbase/tests/test_model.py | 280 +++++++++++++++++++++++++++++
plugins/gingerbase/tests/utils.py | 261 +++++++++++++++++++++++++++
plugins/kimchi/tests/test_host.py | 200 ---------------------
7 files changed, 951 insertions(+), 200 deletions(-)
create mode 100644 plugins/gingerbase/tests/Makefile.am
create mode 100644 plugins/gingerbase/tests/run_tests.sh.in
create mode 100644 plugins/gingerbase/tests/test_config.py.in
create mode 100644 plugins/gingerbase/tests/test_host.py
create mode 100644 plugins/gingerbase/tests/test_model.py
create mode 100644 plugins/gingerbase/tests/utils.py
delete mode 100644 plugins/kimchi/tests/test_host.py
diff --git a/plugins/gingerbase/tests/Makefile.am b/plugins/gingerbase/tests/Makefile.am
new file mode 100644
index 0000000..23e18f4
--- /dev/null
+++ b/plugins/gingerbase/tests/Makefile.am
@@ -0,0 +1,49 @@
+#
+# Kimchi
+#
+# Copyright IBM Corp, 2013
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+EXTRA_DIST = \
+ Makefile.am \
+ run_tests.sh.in \
+ test_config.py.in \
+ $(filter-out test_config.py, $(wildcard *.py)) \
+ $(NULL)
+
+noinst_SCRIPTS = run_tests.sh
+
+do_substitution = \
+ sed -e 's,[@]HAVE_PYMOD_UNITTEST[@],$(HAVE_PYMOD_UNITTEST),g' \
+ -e 's,[@]prefix[@],$(prefix),g' \
+ -e 's,[@]datadir[@],$(datadir),g' \
+ -e 's,[@]PYTHON_VERSION[@],$(PYTHON_VERSION),g' \
+ -e 's,[@]wokdir[@],$(pythondir)/wok,g' \
+ -e 's,[@]pkgdatadir[@],$(pkgdatadir),g'
+
+
+run_tests.sh: run_tests.sh.in Makefile
+ $(do_substitution) < $(srcdir)/run_tests.sh.in > run_tests.sh
+ chmod +x run_tests.sh
+
+test_config.py: test_config.py.in Makefile
+ $(do_substitution) < $(srcdir)/test_config.py.in > test_config.py
+
+check-local:
+ ./run_tests.sh
+
+BUILT_SOURCES = test_config.py
+CLEANFILES = run_tests.sh test_config.py
diff --git a/plugins/gingerbase/tests/run_tests.sh.in b/plugins/gingerbase/tests/run_tests.sh.in
new file mode 100644
index 0000000..beef75e
--- /dev/null
+++ b/plugins/gingerbase/tests/run_tests.sh.in
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+HAVE_UNITTEST=@HAVE_PYMOD_UNITTEST@
+PYTHON_VER=@PYTHON_VERSION@
+
+if [ "$1" = "-v" ]; then
+ OPTS="-v"
+ shift
+else
+ OPTS=""
+fi
+
+if [ $# -ne 0 ]; then
+ ARGS="$@"
+else
+ ARGS=`find -name "test_*.py" | xargs -I @ basename @ .py`
+fi
+
+if [ "$HAVE_UNITTEST" != "yes" -o "$PYTHON_VER" == "2.6" ]; then
+ CMD="unit2"
+else
+ CMD="python -m unittest"
+fi
+
+LIST=($ARGS)
+MODEL_LIST=()
+MOCK_LIST=()
+for ((i=0;i<${#LIST[@]};i++)); do
+
+ if [[ ${LIST[$i]} == test_model* ]]; then
+ MODEL_LIST+=(${LIST[$i]})
+ else
+ MOCK_LIST+=(${LIST[$i]})
+ fi
+done
+
+PYTHONPATH=../plugins:../src:../ $CMD $OPTS ${MODEL_LIST[@]} ${MOCK_LIST[@]}
diff --git a/plugins/gingerbase/tests/test_config.py.in b/plugins/gingerbase/tests/test_config.py.in
new file mode 100644
index 0000000..4ffe919
--- /dev/null
+++ b/plugins/gingerbase/tests/test_config.py.in
@@ -0,0 +1,154 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import unittest
+from cherrypy.lib.reprconf import Parser
+from wok.config import Paths
+
+from wok.plugins.gingerbase.config import KimchiPaths
+
+
+
+get_prefix = None
+
+
+def setUpModule():
+ global get_prefix
+ get_prefix = Paths.get_prefix
+
+
+def tearDownModule():
+ Paths.get_prefix = KimchiPaths.get_prefix = get_prefix
+
+
+class ConfigTests(unittest.TestCase):
+ def assertInstalledPath(self, actual, expected):
+ if '@pkgdatadir@' != '/usr/share/gingerbase':
+ usr_local = '/usr/local'
+ if not expected.startswith('/usr'):
+ expected = usr_local + expected
+ self.assertEquals(actual, expected)
+
+ def test_installed_paths(self):
+ Paths.get_prefix = lambda self: '@datadir@/wok'
+ paths = Paths()
+ self.assertInstalledPath(paths.state_dir, '/var/lib/wok')
+ self.assertInstalledPath(paths.log_dir, '/var/log/wok')
+ self.assertInstalledPath(paths.conf_dir, '/etc/wok')
+ self.assertInstalledPath(paths.src_dir, '@wokdir@')
+ self.assertInstalledPath(paths.plugins_dir, '@wokdir@/plugins')
+ self.assertInstalledPath(paths.ui_dir, '@datadir@/wok/ui')
+ self.assertInstalledPath(paths.mo_dir, '@prefix@/share/locale')
+
+ def test_uninstalled_paths(self):
+ Paths.get_prefix = lambda self: '/home/user/wok'
+ paths = Paths()
+ self.assertEquals(paths.state_dir, '/home/user/wok/data')
+ self.assertEquals(paths.log_dir, '/home/user/wok/log')
+ self.assertEquals(paths.conf_dir, '/home/user/wok/src')
+ self.assertEquals(paths.src_dir, '/home/user/wok/src/wok')
+ self.assertEquals(paths.plugins_dir, '/home/user/wok/plugins')
+ self.assertEquals(paths.ui_dir, '/home/user/wok/ui')
+ self.assertEquals(paths.mo_dir, '/home/user/wok/mo')
+
+ def test_installed_plugin_paths(self):
+ KimchiPaths.get_prefix = lambda self: '@datadir@/wok'
+ paths = KimchiPaths()
+ self.assertInstalledPath(paths.conf_dir, '/etc/wok/plugins.d')
+ self.assertInstalledPath(paths.conf_file,
+ '/etc/wok/plugins.d/gingerbase.conf')
+ self.assertInstalledPath(paths.src_dir, '@wokdir@/plugins/ginger-base')
+ self.assertInstalledPath(paths.ui_dir,
+ '@datadir@/wok/plugins/gingerbase/ui')
+ self.assertInstalledPath(paths.mo_dir, '@prefix@/share/locale')
+
+ def test_uninstalled_plugin_paths(self):
+ KimchiPaths.get_prefix = lambda self: '/home/user/wok'
+ paths = KimchiPaths()
+ self.assertEquals(paths.conf_dir, '/home/user/wok/plugins/gingerbase')
+ self.assertEquals(
+ paths.conf_file, '/home/user/wok/plugins/gingerbase/gingerbase.conf')
+ self.assertEquals(paths.src_dir, '/home/user/wok/plugins/gingerbase')
+ self.assertEquals(paths.ui_dir, '/home/user/wok/plugins/gingerbase/ui')
+ self.assertEquals(paths.mo_dir, '/home/user/wok/plugins/gingerbase/mo')
+
+ def test_kimchi_config(self):
+ Paths.get_prefix = KimchiPaths.get_prefix = get_prefix
+ CACHEEXPIRES = 31536000
+ SESSIONSTIMEOUT = 10
+ configObj = {
+ '/': {
+ 'tools.trailing_slash.on': False,
+ 'request.methods_with_bodies': ('POST', 'PUT'),
+ 'tools.nocache.on': True,
+ 'tools.proxy.on': True,
+ 'tools.sessions.on': True,
+ 'tools.sessions.name': 'wok',
+ 'tools.sessions.secure': True,
+ 'tools.sessions.httponly': True,
+ 'tools.sessions.locking': 'explicit',
+ 'tools.sessions.storage_type': 'ram',
+ 'tools.sessions.timeout': SESSIONSTIMEOUT,
+ 'tools.wokauth.on': False
+ },
+ '/css': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/css' % KimchiPaths().prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False
+ },
+ '/js': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/js' % KimchiPaths().prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False
+ },
+ '/libs': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/libs' % KimchiPaths().prefix,
+ 'tools.expires.on': True,
+ 'tools.expires.secs': CACHEEXPIRES,
+ 'tools.nocache.on': False,
+ },
+ '/images': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/images' % KimchiPaths().prefix,
+ 'tools.nocache.on': False
+ },
+ '/favicon.ico': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename':
+ '%s/images/logo.ico' % KimchiPaths().ui_dir
+ },
+ '/robots.txt': {
+ 'tools.staticfile.on': True,
+ 'tools.staticfile.filename': '%s/robots.txt' % KimchiPaths().ui_dir
+ },
+ '/help': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/pages/help' % KimchiPaths().prefix,
+ 'tools.staticdir.index': 'en_US/index.html',
+ 'tools.nocache.on': True
+ }
+ }
+
+ kimchi_config = Parser().dict_from_file(KimchiPaths().conf_file)
+ self.assertEquals(kimchi_config, configObj)
diff --git a/plugins/gingerbase/tests/test_host.py b/plugins/gingerbase/tests/test_host.py
new file mode 100644
index 0000000..78765c0
--- /dev/null
+++ b/plugins/gingerbase/tests/test_host.py
@@ -0,0 +1,152 @@
+# -*- coding: utf-8 -*-
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import os
+import platform
+import psutil
+import tempfile
+import time
+import unittest
+from functools import partial
+
+from wok.plugins.gingerbase.mockmodel import MockModel
+from utils import get_free_port, patch_auth, request, run_server, wait_task
+
+
+test_server = None
+model = None
+host = None
+ssl_port = None
+tmpfile = None
+
+
+def setUpModule():
+ global test_server, model, host, ssl_port, tmpfile
+
+ patch_auth()
+ tmpfile = tempfile.mktemp()
+ model = MockModel(tmpfile)
+ host = '127.0.0.1'
+ port = get_free_port('http')
+ ssl_port = get_free_port('https')
+ cherrypy_port = get_free_port('cherrypy_port')
+ test_server = run_server(host, port, ssl_port, test_mode=True,
+ cherrypy_port=cherrypy_port, model=model)
+
+
+def tearDownModule():
+ test_server.stop()
+ os.unlink(tmpfile)
+
+
+class HostTests(unittest.TestCase):
+ def setUp(self):
+ self.request = partial(request, host, ssl_port)
+
+ def test_hostinfo(self):
+ resp = self.request('/plugins/gingerbase/host').read()
+ info = json.loads(resp)
+ keys = ['os_distro', 'os_version', 'os_codename', 'cpu_model',
+ 'memory', 'cpus']
+ self.assertEquals(sorted(keys), sorted(info.keys()))
+
+ distro, version, codename = platform.linux_distribution()
+ self.assertEquals(distro, info['os_distro'])
+ self.assertEquals(version, info['os_version'])
+ self.assertEquals(unicode(codename, "utf-8"), info['os_codename'])
+ self.assertEquals(psutil.TOTAL_PHYMEM, info['memory'])
+
+ def test_hoststats(self):
+ time.sleep(1)
+ stats_keys = ['cpu_utilization', 'memory', 'disk_read_rate',
+ 'disk_write_rate', 'net_recv_rate', 'net_sent_rate']
+ resp = self.request('/plugins/gingerbase/host/stats').read()
+ stats = json.loads(resp)
+ self.assertEquals(sorted(stats_keys), sorted(stats.keys()))
+
+ cpu_utilization = stats['cpu_utilization']
+ self.assertIsInstance(cpu_utilization, float)
+ self.assertGreaterEqual(cpu_utilization, 0.0)
+ self.assertTrue(cpu_utilization <= 100.0)
+
+ memory_stats = stats['memory']
+ self.assertIn('total', memory_stats)
+ self.assertIn('free', memory_stats)
+ self.assertIn('cached', memory_stats)
+ self.assertIn('buffers', memory_stats)
+ self.assertIn('avail', memory_stats)
+
+ resp = self.request('/plugins/gingerbase/host/stats/history').read()
+ history = json.loads(resp)
+ self.assertEquals(sorted(stats_keys), sorted(history.keys()))
+
+ def test_host_actions(self):
+ def _task_lookup(taskid):
+ return json.loads(self.request('/plugins/gingerbase/tasks/%s' %
+ taskid).read())
+
+ resp = self.request('/plugins/gingerbase/host/shutdown', '{}', 'POST')
+ self.assertEquals(200, resp.status)
+ resp = self.request('/plugins/gingerbase/host/reboot', '{}', 'POST')
+ self.assertEquals(200, resp.status)
+
+ # Test system update
+ resp = self.request('/plugins/gingerbase/host/packagesupdate', None, 'GET')
+ pkgs = json.loads(resp.read())
+ self.assertEquals(3, len(pkgs))
+
+ pkg_keys = ['package_name', 'repository', 'arch', 'version']
+ for p in pkgs:
+ name = p['package_name']
+ resp = self.request('/plugins/gingerbase/host/packagesupdate/' + name,
+ None, 'GET')
+ info = json.loads(resp.read())
+ self.assertEquals(sorted(pkg_keys), sorted(info.keys()))
+
+ resp = self.request('/plugins/gingerbase/host/swupdate', '{}', 'POST')
+ task = json.loads(resp.read())
+ task_params = [u'id', u'message', u'status', u'target_uri']
+ self.assertEquals(sorted(task_params), sorted(task.keys()))
+
+ resp = self.request('/plugins/gingerbase/tasks/' + task[u'id'], None, 'GET')
+ task_info = json.loads(resp.read())
+ self.assertEquals(task_info['status'], 'running')
+ wait_task(_task_lookup, task_info['id'])
+ resp = self.request('/plugins/gingerbase/tasks/' + task[u'id'], None, 'GET')
+ task_info = json.loads(resp.read())
+ self.assertEquals(task_info['status'], 'finished')
+ self.assertIn(u'All packages updated', task_info['message'])
+ pkgs = model.packagesupdate_get_list()
+ self.assertEquals(0, len(pkgs))
+
+ def test_host_partitions(self):
+ resp = self.request('/plugins/gingerbase/host/partitions')
+ self.assertEquals(200, resp.status)
+ partitions = json.loads(resp.read())
+
+ keys = ['name', 'path', 'type', 'fstype', 'size', 'mountpoint',
+ 'available']
+ for item in partitions:
+ resp = self.request('/plugins/gingerbase/host/partitions/%s' %
+ item['name'])
+ info = json.loads(resp.read())
+ self.assertEquals(sorted(info.keys()), sorted(keys))
+
diff --git a/plugins/gingerbase/tests/test_model.py b/plugins/gingerbase/tests/test_model.py
new file mode 100644
index 0000000..d471ce5
--- /dev/null
+++ b/plugins/gingerbase/tests/test_model.py
@@ -0,0 +1,280 @@
+# -*- coding: utf-8 -*-
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+import shutil
+import unittest
+
+import wok.objectstore
+from wok.basemodel import Singleton
+from wok.exception import InvalidParameter, NotFoundError, OperationFailed
+from wok.rollbackcontext import RollbackContext
+from wok.plugins.gingerbase.model import model
+
+# import iso_gen
+# import utils
+
+
+invalid_repository_urls = ['www.fedora.org', # missing protocol
+ '://www.fedora.org', # missing protocol
+ 'http://www.fedora', # invalid domain name
+ 'file:///home/foobar'] # invalid path
+
+TMP_DIR = '/var/lib/kimchi/tests/'
+# UBUNTU_ISO = TMP_DIR + 'ubuntu14.04.iso'
+
+
+def setUpModule():
+ if not os.path.exists(TMP_DIR):
+ os.makedirs(TMP_DIR)
+
+ # iso_gen.construct_fake_iso(UBUNTU_ISO, True, '14.04', 'ubuntu')
+
+ # Some FeatureTests functions depend on server to validate their result.
+ # As CapabilitiesModel is a Singleton class it will get the first result
+ # from FeatureTests which may be wrong when using the Model instance
+ # directly - the case of this test_model.py
+ # So clean Singleton instances to make sure to get the right result when
+ # running the following tests.
+ Singleton._instances = {}
+
+
+def tearDownModule():
+ shutil.rmtree(TMP_DIR)
+
+
+class ModelTests(unittest.TestCase):
+ def setUp(self):
+ self.tmp_store = '/tmp/kimchi-store-test'
+
+ def tearDown(self):
+ # FIXME: Tests using 'test:///default' URI should be moved to
+ # test_rest or test_mockmodel to avoid overriding problems
+ # LibvirtConnection._connections['test:///default'] = {}
+
+ os.unlink(self.tmp_store)
+
+ def test_repository_create(self):
+ inst = model.Model(objstore_loc=self.tmp_store)
+
+ yum_repos = [{'repo_id': 'fedora-fake',
+ 'baseurl': 'http://www.fedora.org'},
+ {'repo_id': 'fedora-updates-fake',
+ 'config':
+ {'mirrorlist': 'http://www.fedoraproject.org'}}]
+
+ deb_repos = [{'baseurl': 'http://archive.ubuntu.com/ubuntu/',
+ 'config': {'dist': 'quantal'}},
+ {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
+ 'config': {'dist': 'quantal', 'comps': ['main']}}]
+
+ yum_invalid_repos = []
+ deb_invalid_repos = []
+
+ for url in invalid_repository_urls:
+ wrong_baseurl = {'repo_id': 'wrong-id', 'baseurl': url}
+ wrong_mirrorlist = {'repo_id': 'wrong-id',
+ 'baseurl': 'www.example.com',
+ 'config': {'mirrorlist': url}}
+ wrong_config_item = {
+ 'repo_id': 'wrong-id',
+ 'baseurl': 'www.example.com',
+ 'config': {
+ 'gpgkey': 'file:///tmp/KEY-fedora-updates-fake-19'}}
+
+ yum_invalid_repos.append(wrong_baseurl)
+ yum_invalid_repos.append(wrong_mirrorlist)
+ yum_invalid_repos.append(wrong_config_item)
+
+ wrong_baseurl['config'] = {'dist': 'tasty'}
+ wrong_config = {'baseurl': deb_repos[0]['baseurl'],
+ 'config': {
+ 'unsupported_item': "a_unsupported_item"}}
+ deb_invalid_repos.append(wrong_baseurl)
+ deb_invalid_repos.append(wrong_config)
+
+ repo_type = inst.capabilities_lookup()['repo_mngt_tool']
+ if repo_type == 'yum':
+ test_repos = yum_repos
+ invalid_repos = yum_invalid_repos
+ elif repo_type == 'deb':
+ test_repos = deb_repos
+ invalid_repos = deb_invalid_repos
+ else:
+ # repository management tool was not recognized by Kimchi
+ # skip test case
+ return
+
+ # create repositories with invalid data
+ for repo in invalid_repos:
+ self.assertRaises(InvalidParameter, inst.repositories_create, repo)
+
+ for repo in test_repos:
+ system_host_repos = len(inst.repositories_get_list())
+ repo_id = inst.repositories_create(repo)
+ host_repos = inst.repositories_get_list()
+ self.assertEquals(system_host_repos + 1, len(host_repos))
+
+ repo_info = inst.repository_lookup(repo_id)
+ self.assertEquals(repo_id, repo_info['repo_id'])
+ self.assertEquals(True, repo_info.get('enabled'))
+ self.assertEquals(repo.get('baseurl', ''),
+ repo_info.get('baseurl'))
+
+ original_config = repo.get('config', {})
+ config_info = repo_info.get('config', {})
+
+ if repo_type == 'yum':
+ self.assertEquals(original_config.get('mirrorlist', ''),
+ config_info.get('mirrorlist', ''))
+ self.assertEquals(True, config_info['gpgcheck'])
+ else:
+ self.assertEquals(original_config['dist'], config_info['dist'])
+ self.assertEquals(original_config.get('comps', []),
+ config_info.get('comps', []))
+
+ inst.repository_delete(repo_id)
+ self.assertRaises(NotFoundError, inst.repository_lookup, repo_id)
+
+ self.assertRaises(NotFoundError, inst.repository_lookup, 'google')
+
+ def test_repository_update(self):
+ inst = model.Model(objstore_loc=self.tmp_store)
+
+ yum_repo = {'repo_id': 'fedora-fake',
+ 'baseurl': 'http://www.fedora.org'}
+ yum_new_repo = {'baseurl': 'http://www.fedoraproject.org'}
+
+ deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
+ 'config': {'dist': 'quantal'}}
+ deb_new_repo = {'baseurl': 'http://br.archive.canonical.com/ubuntu/',
+ 'config': {'dist': 'utopic'}}
+
+ yum_invalid_repos = []
+ deb_invalid_repos = []
+
+ for url in invalid_repository_urls:
+ wrong_baseurl = {'baseurl': url}
+ wrong_mirrorlist = {'baseurl': 'www.example.com',
+ 'config': {'mirrorlist': url}}
+
+ yum_invalid_repos.append(wrong_baseurl)
+ yum_invalid_repos.append(wrong_mirrorlist)
+
+ wrong_baseurl['config'] = {'dist': 'tasty'}
+ deb_invalid_repos.append(wrong_baseurl)
+
+ repo_type = inst.capabilities_lookup()['repo_mngt_tool']
+ if repo_type == 'yum':
+ repo = yum_repo
+ new_repo = yum_new_repo
+ invalid_repos = yum_invalid_repos
+ elif repo_type == 'deb':
+ repo = deb_repo
+ new_repo = deb_new_repo
+ invalid_repos = deb_invalid_repos
+ else:
+ # repository management tool was not recognized by Kimchi
+ # skip test case
+ return
+
+ system_host_repos = len(inst.repositories_get_list())
+
+ with RollbackContext() as rollback:
+ repo_id = inst.repositories_create(repo)
+ rollback.prependDefer(inst.repository_delete, repo_id)
+
+ host_repos = inst.repositories_get_list()
+ self.assertEquals(system_host_repos + 1, len(host_repos))
+
+ # update repositories with invalid data
+ for tmp_repo in invalid_repos:
+ self.assertRaises(InvalidParameter, inst.repository_update,
+ repo_id, tmp_repo)
+
+ new_repo_id = inst.repository_update(repo_id, new_repo)
+ repo_info = inst.repository_lookup(new_repo_id)
+
+ self.assertEquals(new_repo_id, repo_info['repo_id'])
+ self.assertEquals(new_repo['baseurl'], repo_info['baseurl'])
+ self.assertEquals(True, repo_info['enabled'])
+ inst.repository_update(new_repo_id, repo)
+
+ def test_repository_disable_enable(self):
+ inst = model.Model(objstore_loc=self.tmp_store)
+
+ yum_repo = {'repo_id': 'fedora-fake',
+ 'baseurl': 'http://www.fedora.org'}
+ deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
+ 'config': {'dist': 'quantal'}}
+
+ repo_type = inst.capabilities_lookup()['repo_mngt_tool']
+ if repo_type == 'yum':
+ repo = yum_repo
+ elif repo_type == 'deb':
+ repo = deb_repo
+ else:
+ # repository management tool was not recognized by Kimchi
+ # skip test case
+ return
+
+ system_host_repos = len(inst.repositories_get_list())
+
+ repo_id = inst.repositories_create(repo)
+
+ host_repos = inst.repositories_get_list()
+ self.assertEquals(system_host_repos + 1, len(host_repos))
+
+ repo_info = inst.repository_lookup(repo_id)
+ self.assertEquals(True, repo_info['enabled'])
+
+ inst.repository_disable(repo_id)
+ repo_info = inst.repository_lookup(repo_id)
+ self.assertEquals(False, repo_info['enabled'])
+
+ inst.repository_enable(repo_id)
+ repo_info = inst.repository_lookup(repo_id)
+ self.assertEquals(True, repo_info['enabled'])
+
+ # remove files creates
+ inst.repository_delete(repo_id)
+
+
+class BaseModelTests(unittest.TestCase):
+ class FoosModel(object):
+ def __init__(self):
+ self.data = {}
+
+ def create(self, params):
+ self.data.update(params)
+
+ def get_list(self):
+ return list(self.data)
+
+ class TestModel(wok.basemodel.BaseModel):
+ def __init__(self):
+ foo = BaseModelTests.FoosModel()
+ super(BaseModelTests.TestModel, self).__init__([foo])
+
+ def test_root_model(self):
+ t = BaseModelTests.TestModel()
+ t.foos_create({'item1': 10})
+ self.assertEquals(t.foos_get_list(), ['item1'])
+
diff --git a/plugins/gingerbase/tests/utils.py b/plugins/gingerbase/tests/utils.py
new file mode 100644
index 0000000..986d91b
--- /dev/null
+++ b/plugins/gingerbase/tests/utils.py
@@ -0,0 +1,261 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+import base64
+import cherrypy
+import grp
+import httplib
+import inspect
+import json
+import os
+import socket
+import ssl
+import sys
+import threading
+import time
+import unittest
+from contextlib import closing
+from lxml import etree
+
+import wok.server
+from wok.config import config, PluginPaths
+from wok.auth import User, USER_NAME, USER_GROUPS, USER_ROLES, tabs
+from wok.exception import NotFoundError, OperationFailed
+from wok.utils import wok_log
+
+from wok.plugins.gingerbase import mockmodel
+
+
+_ports = {}
+
+# provide missing unittest decorators and API for python 2.6; these decorators
+# do not actually work, just avoid the syntax failure
+if sys.version_info[:2] == (2, 6):
+ def skipUnless(condition, reason):
+ if not condition:
+ sys.stderr.write('[expected failure] ')
+ raise Exception(reason)
+ return lambda obj: obj
+
+ unittest.skipUnless = skipUnless
+ unittest.expectedFailure = lambda obj: obj
+
+ def assertGreater(self, a, b, msg=None):
+ if not a > b:
+ self.fail('%s not greater than %s' % (repr(a), repr(b)))
+
+ def assertGreaterEqual(self, a, b, msg=None):
+ if not a >= b:
+ self.fail('%s not greater than or equal to %s'
+ % (repr(a), repr(b)))
+
+ def assertIsInstance(self, obj, cls, msg=None):
+ if not isinstance(obj, cls):
+ self.fail('%s is not an instance of %r' % (repr(obj), cls))
+
+ def assertIn(self, a, b, msg=None):
+ if a not in b:
+ self.fail("%s is not in %b" % (repr(a), repr(b)))
+
+ def assertNotIn(self, a, b, msg=None):
+ if a in b:
+ self.fail("%s is in %b" % (repr(a), repr(b)))
+
+ unittest.TestCase.assertGreaterEqual = assertGreaterEqual
+ unittest.TestCase.assertGreater = assertGreater
+ unittest.TestCase.assertIsInstance = assertIsInstance
+ unittest.TestCase.assertIn = assertIn
+ unittest.TestCase.assertNotIn = assertNotIn
+
+
+def get_free_port(name='http'):
+ global _ports
+ if _ports.get(name) is not None:
+ return _ports[name]
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ with closing(sock):
+ try:
+ sock.bind(("0.0.0.0", 0))
+ except:
+ raise Exception("Could not find a free port")
+ _ports[name] = sock.getsockname()[1]
+ return _ports[name]
+
+
+def run_server(host, port, ssl_port, test_mode, cherrypy_port=None,
+ model=None, environment='development'):
+
+ if cherrypy_port is None:
+ cherrypy_port = get_free_port('cherrypy_port')
+
+ if ssl_port is None:
+ ssl_port = get_free_port('https')
+
+ args = type('_', (object,),
+ {'host': host, 'port': port, 'ssl_port': ssl_port,
+ 'cherrypy_port': cherrypy_port, 'max_body_size': '4*1024',
+ 'ssl_cert': '', 'ssl_key': '',
+ 'test': test_mode, 'access_log': '/dev/null',
+ 'error_log': '/dev/null', 'environment': environment,
+ 'log_level': 'debug'})()
+ if model is not None:
+ setattr(args, 'model', model)
+
+ s = wok.server.Server(args)
+ t = threading.Thread(target=s.start)
+ t.setDaemon(True)
+ t.start()
+ cherrypy.engine.wait(cherrypy.engine.states.STARTED)
+ return s
+
+
+def silence_server():
+ """
+ Silence server status messages on stdout
+ """
+ cherrypy.config.update({"environment": "embedded"})
+
+
+def running_as_root():
+ return os.geteuid() == 0
+
+
+def _request(conn, path, data, method, headers):
+ if headers is None:
+ headers = {'Content-Type': 'application/json',
+ 'Accept': 'application/json'}
+ if 'AUTHORIZATION' not in headers.keys():
+ user, pw = mockmodel.fake_user.items()[0]
+ hdr = "Basic " + base64.b64encode("%s:%s" % (user, pw))
+ headers['AUTHORIZATION'] = hdr
+ conn.request(method, path, data, headers)
+ return conn.getresponse()
+
+
+def request(host, port, path, data=None, method='GET', headers=None):
+ # verify if HTTPSConnection has context parameter
+ if "context" in inspect.getargspec(httplib.HTTPSConnection.__init__).args:
+ context = ssl._create_unverified_context()
+ conn = httplib.HTTPSConnection(host, port, context=context)
+ else:
+ conn = httplib.HTTPSConnection(host, port)
+
+ return _request(conn, path, data, method, headers)
+
+
+def get_remote_iso_path():
+ """
+ Get a remote iso with the right arch from the distro files shipped
+ with kimchi.
+ """
+ host_arch = os.uname()[4]
+ remote_path = ''
+ with open(os.path.join(PluginPaths('kimchi').conf_dir, 'distros.d', 'fedora.json')) \
+ as fedora_isos:
+ # Get a list of dicts
+ json_isos_list = json.load(fedora_isos)
+ for iso in json_isos_list:
+ if (iso.get('os_arch')) == host_arch:
+ remote_path = iso.get('path')
+ break
+
+ return remote_path
+
+
+class FakeUser(User):
+ auth_type = "fake"
+ sudo = True
+
+ def __init__(self, username):
+ self.user = {}
+ self.user[USER_NAME] = username
+ self.user[USER_GROUPS] = None
+ self.user[USER_ROLES] = dict.fromkeys(tabs, 'user')
+
+ def get_groups(self):
+ return sorted([group.gr_name for group in grp.getgrall()])[0:3]
+
+ def get_roles(self):
+ if self.sudo:
+ self.user[USER_ROLES] = dict.fromkeys(tabs, 'admin')
+ return self.user[USER_ROLES]
+
+ def get_user(self):
+ return self.user
+
+ @staticmethod
+ def authenticate(username, password, service="passwd"):
+ try:
+ return mockmodel.fake_user[username] == password
+ except KeyError, e:
+ raise OperationFailed("GGBAUTH0001E", {'username': 'username',
+ 'code': e.message})
+
+
+def patch_auth(sudo=True):
+ """
+ Override the authenticate function with a simple test against an
+ internal dict of users and passwords.
+ """
+ config.set("authentication", "method", "fake")
+ FakeUser.sudo = sudo
+
+
+def normalize_xml(xml_str):
+ return etree.tostring(etree.fromstring(xml_str,
+ etree.XMLParser(remove_blank_text=True)))
+
+
+def wait_task(task_lookup, taskid, timeout=10):
+ for i in range(0, timeout):
+ task_info = task_lookup(taskid)
+ if task_info['status'] == "running":
+ wok_log.info("Waiting task %s, message: %s",
+ taskid, task_info['message'])
+ time.sleep(1)
+ else:
+ return
+ wok_log.error("Timeout while process long-run task, "
+ "try to increase timeout value.")
+
+
+# The action functions in model backend raise NotFoundError exception if the
+# element is not found. But in some tests, these functions are called after
+# the element has been deleted if test finishes correctly, then NofFoundError
+# exception is raised and rollback breaks. To avoid it, this wrapper ignores
+# the NotFoundError.
+def rollback_wrapper(func, resource, *args):
+ try:
+ func(resource, *args)
+ except NotFoundError:
+ # VM has been deleted already
+ return
+
+
+# This function is used to test storage volume upload.
+# If we use self.request, we may encode multipart formdata by ourselves
+# requests lib take care of encode part, so use this lib instead
+def fake_auth_header():
+ headers = {'Accept': 'application/json'}
+ user, pw = mockmodel.fake_user.items()[0]
+ hdr = "Basic " + base64.b64encode("%s:%s" % (user, pw))
+ headers['AUTHORIZATION'] = hdr
+ return headers
+
diff --git a/plugins/kimchi/tests/test_host.py b/plugins/kimchi/tests/test_host.py
deleted file mode 100644
index e2aa196..0000000
--- a/plugins/kimchi/tests/test_host.py
+++ /dev/null
@@ -1,200 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import json
-import os
-import platform
-import psutil
-import tempfile
-import time
-import unittest
-from functools import partial
-
-from wok.plugins.kimchi.mockmodel import MockModel
-
-from utils import get_free_port, patch_auth, request, run_server, wait_task
-
-
-test_server = None
-model = None
-host = None
-ssl_port = None
-tmpfile = None
-
-
-def setUpModule():
- global test_server, model, host, ssl_port, tmpfile
-
- patch_auth()
- tmpfile = tempfile.mktemp()
- model = MockModel(tmpfile)
- host = '127.0.0.1'
- port = get_free_port('http')
- ssl_port = get_free_port('https')
- cherrypy_port = get_free_port('cherrypy_port')
- test_server = run_server(host, port, ssl_port, test_mode=True,
- cherrypy_port=cherrypy_port, model=model)
-
-
-def tearDownModule():
- test_server.stop()
- os.unlink(tmpfile)
-
-
-class HostTests(unittest.TestCase):
- def setUp(self):
- self.request = partial(request, host, ssl_port)
-
- def test_hostinfo(self):
- resp = self.request('/plugins/kimchi/host').read()
- info = json.loads(resp)
- keys = ['os_distro', 'os_version', 'os_codename', 'cpu_model',
- 'memory', 'cpus']
- self.assertEquals(sorted(keys), sorted(info.keys()))
-
- distro, version, codename = platform.linux_distribution()
- self.assertEquals(distro, info['os_distro'])
- self.assertEquals(version, info['os_version'])
- self.assertEquals(unicode(codename, "utf-8"), info['os_codename'])
- self.assertEquals(psutil.TOTAL_PHYMEM, info['memory'])
-
- def test_hoststats(self):
- time.sleep(1)
- stats_keys = ['cpu_utilization', 'memory', 'disk_read_rate',
- 'disk_write_rate', 'net_recv_rate', 'net_sent_rate']
- resp = self.request('/plugins/kimchi/host/stats').read()
- stats = json.loads(resp)
- self.assertEquals(sorted(stats_keys), sorted(stats.keys()))
-
- cpu_utilization = stats['cpu_utilization']
- self.assertIsInstance(cpu_utilization, float)
- self.assertGreaterEqual(cpu_utilization, 0.0)
- self.assertTrue(cpu_utilization <= 100.0)
-
- memory_stats = stats['memory']
- self.assertIn('total', memory_stats)
- self.assertIn('free', memory_stats)
- self.assertIn('cached', memory_stats)
- self.assertIn('buffers', memory_stats)
- self.assertIn('avail', memory_stats)
-
- resp = self.request('/plugins/kimchi/host/stats/history').read()
- history = json.loads(resp)
- self.assertEquals(sorted(stats_keys), sorted(history.keys()))
-
- def test_host_actions(self):
- def _task_lookup(taskid):
- return json.loads(self.request('/plugins/kimchi/tasks/%s' %
- taskid).read())
-
- resp = self.request('/plugins/kimchi/host/shutdown', '{}', 'POST')
- self.assertEquals(200, resp.status)
- resp = self.request('/plugins/kimchi/host/reboot', '{}', 'POST')
- self.assertEquals(200, resp.status)
-
- # Test system update
- resp = self.request('/plugins/kimchi/host/packagesupdate', None, 'GET')
- pkgs = json.loads(resp.read())
- self.assertEquals(3, len(pkgs))
-
- pkg_keys = ['package_name', 'repository', 'arch', 'version']
- for p in pkgs:
- name = p['package_name']
- resp = self.request('/plugins/kimchi/host/packagesupdate/' + name,
- None, 'GET')
- info = json.loads(resp.read())
- self.assertEquals(sorted(pkg_keys), sorted(info.keys()))
-
- resp = self.request('/plugins/kimchi/host/swupdate', '{}', 'POST')
- task = json.loads(resp.read())
- task_params = [u'id', u'message', u'status', u'target_uri']
- self.assertEquals(sorted(task_params), sorted(task.keys()))
-
- resp = self.request('/plugins/kimchi/tasks/' + task[u'id'], None, 'GET')
- task_info = json.loads(resp.read())
- self.assertEquals(task_info['status'], 'running')
- wait_task(_task_lookup, task_info['id'])
- resp = self.request('/plugins/kimchi/tasks/' + task[u'id'], None, 'GET')
- task_info = json.loads(resp.read())
- self.assertEquals(task_info['status'], 'finished')
- self.assertIn(u'All packages updated', task_info['message'])
- pkgs = model.packagesupdate_get_list()
- self.assertEquals(0, len(pkgs))
-
- def test_host_partitions(self):
- resp = self.request('/plugins/kimchi/host/partitions')
- self.assertEquals(200, resp.status)
- partitions = json.loads(resp.read())
-
- keys = ['name', 'path', 'type', 'fstype', 'size', 'mountpoint',
- 'available']
- for item in partitions:
- resp = self.request('/plugins/kimchi/host/partitions/%s' %
- item['name'])
- info = json.loads(resp.read())
- self.assertEquals(sorted(info.keys()), sorted(keys))
-
- def test_host_devices(self):
- def asset_devices_type(devices, dev_type):
- for dev in devices:
- self.assertEquals(dev['device_type'], dev_type)
-
- resp = self.request('/plugins/kimchi/host/devices?_cap=scsi_host')
- nodedevs = json.loads(resp.read())
- # Mockmodel brings 3 preconfigured scsi fc_host
- self.assertEquals(3, len(nodedevs))
-
- nodedev = json.loads(self.request(
- '/plugins/kimchi/host/devices/scsi_host2').read())
- # Mockmodel generates random wwpn and wwnn
- self.assertEquals('scsi_host2', nodedev['name'])
- self.assertEquals('fc_host', nodedev['adapter']['type'])
- self.assertEquals(16, len(nodedev['adapter']['wwpn']))
- self.assertEquals(16, len(nodedev['adapter']['wwnn']))
-
- devs = json.loads(self.request('/plugins/kimchi/host/devices').read())
- dev_names = [dev['name'] for dev in devs]
- for dev_type in ('pci', 'usb_device', 'scsi'):
- resp = self.request('/plugins/kimchi/host/devices?_cap=%s' %
- dev_type)
- devsByType = json.loads(resp.read())
- names = [dev['name'] for dev in devsByType]
- self.assertTrue(set(names) <= set(dev_names))
- asset_devices_type(devsByType, dev_type)
-
- resp = self.request('/plugins/kimchi/host/devices?_passthrough=true')
- passthru_devs = [dev['name'] for dev in json.loads(resp.read())]
- self.assertTrue(set(passthru_devs) <= set(dev_names))
-
- for dev_type in ('pci', 'usb_device', 'scsi'):
- resp = self.request(
- '/plugins/kimchi/host/devices?_cap=%s&_passthrough=true' %
- dev_type)
- filteredDevs = json.loads(resp.read())
- filteredNames = [dev['name'] for dev in filteredDevs]
- self.assertTrue(set(filteredNames) <= set(dev_names))
- asset_devices_type(filteredDevs, dev_type)
-
- for dev in passthru_devs:
- resp = self.request(
- '/plugins/kimchi/host/devices?_passthrough_affected_by=%s' %
- dev)
- affected_devs = [dev['name'] for dev in json.loads(resp.read())]
- self.assertTrue(set(affected_devs) <= set(dev_names))
--
2.1.0
3
2
11 Sep '15
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/model/Makefile.am | 25 ++
plugins/gingerbase/model/__init__.py | 18 ++
plugins/gingerbase/model/cpuinfo.py | 133 ++++++++++
plugins/gingerbase/model/debugreports.py | 213 ++++++++++++++++
plugins/gingerbase/model/host.py | 410 +++++++++++++++++++++++++++++++
plugins/gingerbase/model/model.py | 49 ++++
plugins/gingerbase/model/tasks.py | 64 +++++
plugins/kimchi/model/debugreports.py | 213 ----------------
8 files changed, 912 insertions(+), 213 deletions(-)
create mode 100644 plugins/gingerbase/model/Makefile.am
create mode 100644 plugins/gingerbase/model/__init__.py
create mode 100644 plugins/gingerbase/model/cpuinfo.py
create mode 100644 plugins/gingerbase/model/debugreports.py
create mode 100644 plugins/gingerbase/model/host.py
create mode 100644 plugins/gingerbase/model/model.py
create mode 100644 plugins/gingerbase/model/tasks.py
delete mode 100644 plugins/kimchi/model/debugreports.py
diff --git a/plugins/gingerbase/model/Makefile.am b/plugins/gingerbase/model/Makefile.am
new file mode 100644
index 0000000..6218b47
--- /dev/null
+++ b/plugins/gingerbase/model/Makefile.am
@@ -0,0 +1,25 @@
+#
+# Kimchi
+#
+# Copyright IBM Corp, 2013
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+model_PYTHON = *.py
+
+modeldir = $(pythondir)/wok/plugins/gingerbase/model
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(modeldir)
diff --git a/plugins/gingerbase/model/__init__.py b/plugins/gingerbase/model/__init__.py
new file mode 100644
index 0000000..ca7ede4
--- /dev/null
+++ b/plugins/gingerbase/model/__init__.py
@@ -0,0 +1,18 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
diff --git a/plugins/gingerbase/model/cpuinfo.py b/plugins/gingerbase/model/cpuinfo.py
new file mode 100644
index 0000000..fad8814
--- /dev/null
+++ b/plugins/gingerbase/model/cpuinfo.py
@@ -0,0 +1,133 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import platform
+# from xml.etree import ElementTree as ET
+
+from wok.exception import InvalidParameter, InvalidOperation
+from wok.utils import run_command, wok_log
+from ..lscpu import LsCpu
+
+
+ARCH = 'power' if platform.machine().startswith('ppc') else 'x86'
+
+
+# def get_topo_capabilities(connect):
+# """
+# This helper function exists solely to be overridden for
+# mockmodel tests. Since other modules use getCapabilies(),
+# it can't be overridden directly.
+# """
+# xml = connect.getCapabilities()
+# capabilities = ET.fromstring(xml)
+# return capabilities.find('host').find('cpu').find('topology')
+
+
+class CPUInfoModel(object):
+ """
+ Get information about a CPU for hyperthreading (on x86)
+ or SMT (on POWER) for logic when creating templates and VMs.
+ """
+
+ def __init__(self, **kargs):
+ self.guest_threads_enabled = False
+ self.sockets = 0
+ self.cores_present = 0
+ self.cores_available = 0
+ self.cores_per_socket = 0
+ self.threads_per_core = 0
+ self.max_threads = 0
+ self.lscpu = LsCpu()
+
+ # self.conn = kargs['conn']
+ # libvirt_topology = None
+ # try:
+ # connect = self.conn.get()
+ # libvirt_topology = get_topo_capabilities(connect)
+ # except Exception as e:
+ # wok_log.info("Unable to get CPU topology capabilities: %s"
+ # % e.message)
+ # return
+ # if libvirt_topology is None:
+ # wok_log.info("cpu_info topology not supported.")
+ # return
+
+ if ARCH == 'power':
+ # IBM PowerPC
+ self.guest_threads_enabled = True
+ out, error, rc = run_command(['ppc64_cpu', '--smt'])
+ if rc or 'on' in out:
+ # SMT has to be disabled for guest to use threads as CPUs.
+ # rc is always zero, whether SMT is off or on.
+ self.guest_threads_enabled = False
+ out, error, rc = run_command(['ppc64_cpu', '--cores-present'])
+ if not rc:
+ self.cores_present = int(out.split()[-1])
+ out, error, rc = run_command(['ppc64_cpu', '--cores-on'])
+ if not rc:
+ self.cores_available = int(out.split()[-1])
+ out, error, rc = run_command(['ppc64_cpu', '--threads-per-core'])
+ if not rc:
+ self.threads_per_core = int(out.split()[-1])
+ self.sockets = self.cores_present/self.threads_per_core
+ if self.sockets == 0:
+ self.sockets = 1
+ self.cores_per_socket = self.cores_present/self.sockets
+ else:
+ # Intel or AMD
+ self.guest_threads_enabled = True
+ # self.sockets = int(libvirt_topology.get('sockets'))
+ # self.cores_per_socket = int(libvirt_topology.get('cores'))
+ # self.cores_present = self.cores_per_socket * self.sockets
+ # self.cores_available = self.cores_present
+ # self.threads_per_core = int(libvirt_topology.get('threads'))
+ self.sockets = int(self.lscpu.get_sockets())
+ self.cores_per_socket = int(self.lscpu.get_cores_per_socket())
+ self.cores_present = self.cores_per_socket * self.sockets
+ self.cores_available = self.cores_present
+ self.threads_per_core = self.lscpu.get_threads_per_core()
+
+ def lookup(self, ident):
+ return {
+ 'guest_threads_enabled': self.guest_threads_enabled,
+ 'sockets': self.sockets,
+ 'cores_per_socket': self.cores_per_socket,
+ 'cores_present': self.cores_present,
+ 'cores_available': self.cores_available,
+ 'threads_per_core': self.threads_per_core,
+ }
+
+ def check_topology(self, vcpus, topology):
+ """
+ param vcpus: should be an integer
+ param iso_path: the path of the guest ISO
+ param topology: {'sockets': x, 'cores': x, 'threads': x}
+ """
+ sockets = topology['sockets']
+ cores = topology['cores']
+ threads = topology['threads']
+
+ if not self.guest_threads_enabled:
+ raise InvalidOperation("GGBCPUINF0003E")
+ if vcpus != sockets * cores * threads:
+ raise InvalidParameter("GGBCPUINF0002E")
+ if vcpus > self.cores_available * self.threads_per_core:
+ raise InvalidParameter("GGBCPUINF0001E")
+ if threads > self.threads_per_core:
+ raise InvalidParameter("GGBCPUINF0002E")
diff --git a/plugins/gingerbase/model/debugreports.py b/plugins/gingerbase/model/debugreports.py
new file mode 100644
index 0000000..fc91a9c
--- /dev/null
+++ b/plugins/gingerbase/model/debugreports.py
@@ -0,0 +1,213 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import fnmatch
+import glob
+import logging
+import os
+import shutil
+import subprocess
+import time
+
+from wok.exception import InvalidParameter, NotFoundError, OperationFailed
+from wok.exception import WokException
+from wok.utils import add_task, wok_log
+from wok.utils import run_command
+
+from .. import config
+from tasks import TaskModel
+
+
+class DebugReportsModel(object):
+ def __init__(self, **kargs):
+ self.objstore = kargs['objstore']
+ self.task = TaskModel(**kargs)
+
+ def create(self, params):
+ ident = params.get('name').strip()
+ # Generate a name with time and millisec precision, if necessary
+ if ident is None or ident == "":
+ ident = 'report-' + str(int(time.time() * 1000))
+ else:
+ if ident in self.get_list():
+ raise InvalidParameter("GGBDR0008E", {"name": ident})
+ taskid = self._gen_debugreport_file(ident)
+ return self.task.lookup(taskid)
+
+ def get_list(self):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, '*.*')
+ file_lists = glob.glob(file_pattern)
+ file_lists = [os.path.split(file)[1] for file in file_lists]
+ name_lists = [file.split('.', 1)[0] for file in file_lists]
+
+ return name_lists
+
+ def _gen_debugreport_file(self, name):
+ gen_cmd = self.get_system_report_tool()
+
+ if gen_cmd is not None:
+ return add_task('/plugins/gingerbase/debugreports/%s' % name, gen_cmd,
+ self.objstore, name)
+
+ raise OperationFailed("GGBDR0002E")
+
+ @staticmethod
+ def sosreport_generate(cb, name):
+ def log_error(e):
+ log = logging.getLogger('Model')
+ log.warning('Exception in generating debug file: %s', e)
+
+ try:
+ command = ['sosreport', '--batch', '--name=%s' % name]
+ output, error, retcode = run_command(command)
+
+ if retcode != 0:
+ raise OperationFailed("GGBDR0003E", {'name': name,
+ 'err': retcode})
+
+ # SOSREPORT might create file in /tmp or /var/tmp
+ # FIXME: The right way should be passing the tar.xz file directory
+ # though the parameter '--tmp-dir', but it is failing in Fedora 20
+ patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*']
+ reports = []
+ reportFile = None
+ for p in patterns:
+ reports = reports + [f for f in glob.glob(p % name)]
+ for f in reports:
+ if not fnmatch.fnmatch(f, '*.md5'):
+ reportFile = f
+ break
+ # Some error in sosreport happened
+ if reportFile is None:
+ wok_log.error('Debug report file not found. See sosreport '
+ 'output for detail:\n%s', output)
+ fname = (patterns[0] % name).split('/')[-1]
+ raise OperationFailed('GGBDR0004E', {'name': fname})
+
+ md5_report_file = reportFile + '.md5'
+ report_file_extension = '.' + reportFile.split('.', 1)[1]
+ path = config.get_debugreports_path()
+ target = os.path.join(path, name + report_file_extension)
+ # Moving report
+ msg = 'Moving debug report file "%s" to "%s"' % (reportFile,
+ target)
+ wok_log.info(msg)
+ shutil.move(reportFile, target)
+ # Deleting md5
+ msg = 'Deleting report md5 file: "%s"' % (md5_report_file)
+ wok_log.info(msg)
+ with open(md5_report_file) as f:
+ md5 = f.read().strip()
+ wok_log.info('Md5 file content: "%s"', md5)
+ os.remove(md5_report_file)
+ cb('OK', True)
+ return
+
+ except WokException as e:
+ log_error(e)
+ raise
+
+ except OSError as e:
+ log_error(e)
+ raise
+
+ except Exception, e:
+ # No need to call cb to update the task status here.
+ # The task object will catch the exception raised here
+ # and update the task status there
+ log_error(e)
+ raise OperationFailed("GGBDR0005E", {'name': name, 'err': e})
+
+ @staticmethod
+ def get_system_report_tool():
+ # Please add new possible debug report command here
+ # and implement the report generating function
+ # based on the new report command
+ report_tools = ({'cmd': 'sosreport --help',
+ 'fn': DebugReportsModel.sosreport_generate},)
+
+ # check if the command can be found by shell one by one
+ for helper_tool in report_tools:
+ try:
+ retcode = subprocess.call(helper_tool['cmd'], shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ if retcode == 0:
+ return helper_tool['fn']
+ except Exception, e:
+ wok_log.info('Exception running command: %s', e)
+
+ return None
+
+
+class DebugReportModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def lookup(self, name):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name)
+ file_pattern = file_pattern + '.*'
+ try:
+ file_target = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("GGBDR0001E", {'name': name})
+
+ ctime = os.stat(file_target).st_mtime
+ ctime = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(ctime))
+ file_target = os.path.split(file_target)[-1]
+ file_target = os.path.join("plugins/gingerbase/data/debugreports",
+ file_target)
+ return {'uri': file_target,
+ 'ctime': ctime}
+
+ def update(self, name, params):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name + '.*')
+ try:
+ file_source = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("GGBDR0001E", {'name': name})
+
+ file_target = file_source.replace(name, params['name'])
+ if os.path.isfile(file_target):
+ raise InvalidParameter('GGBDR0008E', {'name': params['name']})
+
+ shutil.move(file_source, file_target)
+ wok_log.info('%s renamed to %s' % (file_source, file_target))
+ return params['name']
+
+ def delete(self, name):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name + '.*')
+ try:
+ file_target = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("GGBDR0001E", {'name': name})
+
+ os.remove(file_target)
+
+
+class DebugReportContentModel(object):
+ def __init__(self, **kargs):
+ self._debugreport = DebugReportModel()
+
+ def lookup(self, name):
+ return self._debugreport.lookup(name)
diff --git a/plugins/gingerbase/model/host.py b/plugins/gingerbase/model/host.py
new file mode 100644
index 0000000..6522a27
--- /dev/null
+++ b/plugins/gingerbase/model/host.py
@@ -0,0 +1,410 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+import platform
+import psutil
+import time
+from cherrypy.process.plugins import BackgroundTask
+from collections import defaultdict
+
+from wok import netinfo
+from wok.basemodel import Singleton
+from wok.exception import InvalidOperation, InvalidParameter
+from wok.exception import NotFoundError, OperationFailed
+from wok.utils import add_task, wok_log
+
+
+from .. import disks
+from ..repositories import Repositories
+from ..swupdate import SoftwareUpdate
+from debugreports import DebugReportsModel
+from tasks import TaskModel
+from wok.config import config as kconfig
+
+
+HOST_STATS_INTERVAL = 1
+
+
+class HostModel(object):
+ def __init__(self, **kargs):
+ # self.conn = kargs['conn']
+ self.objstore = kargs['objstore']
+ self.task = TaskModel(**kargs)
+ self.host_info = self._get_host_info()
+
+ def _get_ppc_cpu_info(self):
+ res = {}
+ with open('/proc/cpuinfo') as f:
+ for line in f.xreadlines():
+ # Parse CPU, CPU's revision and CPU's clock information
+ for key in ['cpu', 'revision', 'clock']:
+ if key in line:
+ info = line.split(':')[1].strip()
+ if key == 'clock':
+ value = float(info.split('MHz')[0].strip()) / 1000
+ else:
+ value = info.split('(')[0].strip()
+ res[key] = value
+
+ # Power machines show, for each cpu/core, a block with
+ # all cpu information. Here we control the scan of the
+ # necessary information (1st block provides
+ # everything), skipping the function when find all
+ # information.
+ if len(res.keys()) == 3:
+ return "%(cpu)s (%(revision)s) @ %(clock)s GHz\
+ " % res
+
+ return ""
+
+ def _get_host_info(self):
+ res = {}
+ if platform.machine().startswith('ppc'):
+ res['cpu_model'] = self._get_ppc_cpu_info()
+ else:
+ with open('/proc/cpuinfo') as f:
+ for line in f.xreadlines():
+ if "model name" in line:
+ res['cpu_model'] = line.split(':')[1].strip()
+ break
+
+ res['cpus'] = 0
+ res['memory'] = 0L
+
+ # Include IBM PowerKVM name to supported distro names
+ _sup_distros = platform._supported_dists + ('ibm_powerkvm',)
+ # 'fedora' '17' 'Beefy Miracle'
+ distro, version, codename = platform.linux_distribution(
+ supported_dists=_sup_distros)
+ res['os_distro'] = distro
+ res['os_version'] = version
+ res['os_codename'] = unicode(codename, "utf-8")
+
+ return res
+
+ def lookup(self, *name):
+ cpus = psutil.NUM_CPUS
+
+ # psutil is unstable on how to get the number of
+ # cpus, different versions call it differently
+ if hasattr(psutil, 'cpu_count'):
+ cpus = psutil.cpu_count()
+
+ elif hasattr(psutil, '_psplatform'):
+ for method_name in ['_get_num_cpus', 'get_num_cpus']:
+
+ method = getattr(psutil._psplatform, method_name, None)
+ if method is not None:
+ cpus = method()
+ break
+
+ self.host_info['cpus'] = cpus
+ self.host_info['memory'] = psutil.phymem_usage().total
+ return self.host_info
+
+ def swupdate(self, *name):
+ try:
+ swupdate = SoftwareUpdate()
+ except:
+ raise OperationFailed('GGBPKGUPD0004E')
+
+ pkgs = swupdate.getNumOfUpdates()
+ if pkgs == 0:
+ raise OperationFailed('GGBPKGUPD0001E')
+
+ wok_log.debug('Host is going to be updated.')
+ taskid = add_task('/plugins/gingerbase/host/swupdate', swupdate.doUpdate,
+ self.objstore, None)
+ return self.task.lookup(taskid)
+
+ def shutdown(self, args=None):
+ # Check for running vms before shutdown
+ # FIXME : Find alternative way to figure out if any vms running
+ # running_vms = self._get_vms_list_by_state('running')
+ # if len(running_vms) > 0:
+ # raise OperationFailed("GGBHOST0001E")
+
+ wok_log.info('Host is going to shutdown.')
+ os.system('shutdown -h now')
+
+ def reboot(self, args=None):
+ # Find running VMs
+ # FIXME : Find alternative way to figure out if any vms running
+ # running_vms = self._get_vms_list_by_state('running')
+ # if len(running_vms) > 0:
+ # raise OperationFailed("GGBHOST0002E")
+
+ wok_log.info('Host is going to reboot.')
+ os.system('reboot')
+
+ # def _get_vms_list_by_state(self, state):
+ # conn = self.conn.get()
+ # return [dom.name().decode('utf-8')
+ # for dom in conn.listAllDomains(0)
+ # if (DOM_STATE_MAP[dom.info()[0]]) == state]
+
+
+class HostStatsModel(object):
+ __metaclass__ = Singleton
+
+ def __init__(self, **kargs):
+ self.host_stats = defaultdict(list)
+ self.host_stats_thread = BackgroundTask(HOST_STATS_INTERVAL,
+ self._update_host_stats)
+ self.host_stats_thread.start()
+
+ def lookup(self, *name):
+ return {'cpu_utilization': self.host_stats['cpu_utilization'][-1],
+ 'memory': self.host_stats['memory'][-1],
+ 'disk_read_rate': self.host_stats['disk_read_rate'][-1],
+ 'disk_write_rate': self.host_stats['disk_write_rate'][-1],
+ 'net_recv_rate': self.host_stats['net_recv_rate'][-1],
+ 'net_sent_rate': self.host_stats['net_sent_rate'][-1]}
+
+ def _update_host_stats(self):
+ preTimeStamp = self.host_stats['timestamp']
+ timestamp = time.time()
+ # FIXME when we upgrade psutil, we can get uptime by psutil.uptime
+ # we get uptime by float(open("/proc/uptime").readline().split()[0])
+ # and calculate the first io_rate after the OS started.
+ with open("/proc/uptime") as time_f:
+ seconds = (timestamp - preTimeStamp if preTimeStamp else
+ float(time_f.readline().split()[0]))
+
+ self.host_stats['timestamp'] = timestamp
+ self._get_host_disk_io_rate(seconds)
+ self._get_host_network_io_rate(seconds)
+
+ self._get_percentage_host_cpu_usage()
+ self._get_host_memory_stats()
+
+ # store only 60 stats (1 min)
+ for key, value in self.host_stats.iteritems():
+ if isinstance(value, list):
+ if len(value) == 60:
+ self.host_stats[key] = value[10:]
+
+ def _get_percentage_host_cpu_usage(self):
+ # This is cpu usage producer. This producer will calculate the usage
+ # at an interval of HOST_STATS_INTERVAL.
+ # The psutil.cpu_percent works as non blocking.
+ # psutil.cpu_percent maintains a cpu time sample.
+ # It will update the cpu time sample when it is called.
+ # So only this producer can call psutil.cpu_percent in kimchi.
+ self.host_stats['cpu_utilization'].append(psutil.cpu_percent(None))
+
+ def _get_host_memory_stats(self):
+ virt_mem = psutil.virtual_memory()
+ # available:
+ # the actual amount of available memory that can be given
+ # instantly to processes that request more memory in bytes; this
+ # is calculated by summing different memory values depending on
+ # the platform (e.g. free + buffers + cached on Linux)
+ memory_stats = {'total': virt_mem.total,
+ 'free': virt_mem.free,
+ 'cached': virt_mem.cached,
+ 'buffers': virt_mem.buffers,
+ 'avail': virt_mem.available}
+ self.host_stats['memory'].append(memory_stats)
+
+ def _get_host_disk_io_rate(self, seconds):
+ disk_read_bytes = self.host_stats['disk_read_bytes']
+ disk_write_bytes = self.host_stats['disk_write_bytes']
+ prev_read_bytes = disk_read_bytes[-1] if disk_read_bytes else 0
+ prev_write_bytes = disk_write_bytes[-1] if disk_write_bytes else 0
+
+ disk_io = psutil.disk_io_counters(False)
+ read_bytes = disk_io.read_bytes
+ write_bytes = disk_io.write_bytes
+
+ rd_rate = int(float(read_bytes - prev_read_bytes) / seconds + 0.5)
+ wr_rate = int(float(write_bytes - prev_write_bytes) / seconds + 0.5)
+
+ self.host_stats['disk_read_rate'].append(rd_rate)
+ self.host_stats['disk_write_rate'].append(wr_rate)
+ self.host_stats['disk_read_bytes'].append(read_bytes)
+ self.host_stats['disk_write_bytes'].append(write_bytes)
+
+ def _get_host_network_io_rate(self, seconds):
+ net_recv_bytes = self.host_stats['net_recv_bytes']
+ net_sent_bytes = self.host_stats['net_sent_bytes']
+ prev_recv_bytes = net_recv_bytes[-1] if net_recv_bytes else 0
+ prev_sent_bytes = net_sent_bytes[-1] if net_sent_bytes else 0
+
+ net_ios = psutil.network_io_counters(True)
+ recv_bytes = 0
+ sent_bytes = 0
+ for key in set(netinfo.nics() +
+ netinfo.wlans()) & set(net_ios.iterkeys()):
+ recv_bytes = recv_bytes + net_ios[key].bytes_recv
+ sent_bytes = sent_bytes + net_ios[key].bytes_sent
+
+ rx_rate = int(float(recv_bytes - prev_recv_bytes) / seconds + 0.5)
+ tx_rate = int(float(sent_bytes - prev_sent_bytes) / seconds + 0.5)
+
+ self.host_stats['net_recv_rate'].append(rx_rate)
+ self.host_stats['net_sent_rate'].append(tx_rate)
+ self.host_stats['net_recv_bytes'].append(recv_bytes)
+ self.host_stats['net_sent_bytes'].append(sent_bytes)
+
+
+class HostStatsHistoryModel(object):
+ def __init__(self, **kargs):
+ self.history = HostStatsModel(**kargs)
+
+ def lookup(self, *name):
+ return {'cpu_utilization': self.history.host_stats['cpu_utilization'],
+ 'memory': self.history.host_stats['memory'],
+ 'disk_read_rate': self.history.host_stats['disk_read_rate'],
+ 'disk_write_rate': self.history.host_stats['disk_write_rate'],
+ 'net_recv_rate': self.history.host_stats['net_recv_rate'],
+ 'net_sent_rate': self.history.host_stats['net_sent_rate']}
+
+
+class CapabilitiesModel(object):
+ __metaclass__ = Singleton
+
+ def __init__(self, **kargs):
+ pass
+
+
+ def lookup(self, *ident):
+ report_tool = DebugReportsModel.get_system_report_tool()
+ try:
+ SoftwareUpdate()
+ except Exception:
+ update_tool = False
+ else:
+ update_tool = True
+
+ try:
+ repo = Repositories()
+ except Exception:
+ repo_mngt_tool = None
+ else:
+ repo_mngt_tool = repo._pkg_mnger.TYPE
+
+ return {
+ 'system_report_tool': bool(report_tool),
+ 'update_tool': update_tool,
+ 'repo_mngt_tool': repo_mngt_tool,
+ 'federation': kconfig.get("server", "federation")
+ }
+
+
+class PartitionsModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def get_list(self):
+ result = disks.get_partitions_names()
+ return result
+
+
+class PartitionModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def lookup(self, name):
+ return disks.get_partition_details(name)
+
+class PackagesUpdateModel(object):
+ def __init__(self, **kargs):
+ try:
+ self.host_swupdate = SoftwareUpdate()
+ except:
+ self.host_swupdate = None
+
+ def get_list(self):
+ if self.host_swupdate is None:
+ raise OperationFailed('GGBPKGUPD0004E')
+
+ return self.host_swupdate.getUpdates()
+
+
+class PackageUpdateModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def lookup(self, name):
+ try:
+ swupdate = SoftwareUpdate()
+ except Exception:
+ raise OperationFailed('GGBPKGUPD0004E')
+
+ return swupdate.getUpdate(name)
+
+
+class RepositoriesModel(object):
+ def __init__(self, **kargs):
+ try:
+ self.host_repositories = Repositories()
+ except:
+ self.host_repositories = None
+
+ def get_list(self):
+ if self.host_repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return sorted(self.host_repositories.getRepositories())
+
+ def create(self, params):
+ if self.host_repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self.host_repositories.addRepository(params)
+
+
+class RepositoryModel(object):
+ def __init__(self, **kargs):
+ try:
+ self._repositories = Repositories()
+ except:
+ self._repositories = None
+
+ def lookup(self, repo_id):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.getRepository(repo_id)
+
+ def enable(self, repo_id):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.enableRepository(repo_id)
+
+ def disable(self, repo_id):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.disableRepository(repo_id)
+
+ def update(self, repo_id, params):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.updateRepository(repo_id, params)
+
+ def delete(self, repo_id):
+ if self._repositories is None:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ return self._repositories.removeRepository(repo_id)
diff --git a/plugins/gingerbase/model/model.py b/plugins/gingerbase/model/model.py
new file mode 100644
index 0000000..2da70f4
--- /dev/null
+++ b/plugins/gingerbase/model/model.py
@@ -0,0 +1,49 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import inspect
+import os
+
+from wok.basemodel import BaseModel
+from wok.objectstore import ObjectStore
+from wok.utils import import_module, listPathModules
+
+
+class Model(BaseModel):
+ def __init__(self, objstore_loc=None):
+
+ self.objstore = ObjectStore(objstore_loc)
+ kargs = {'objstore': self.objstore}
+
+ this = os.path.basename(__file__)
+ this_mod = os.path.splitext(this)[0]
+
+ models = []
+ for mod_name in listPathModules(os.path.dirname(__file__)):
+ if mod_name.startswith("_") or mod_name == this_mod:
+ continue
+
+ module = import_module('plugins.gingerbase.model.' + mod_name)
+ members = inspect.getmembers(module, inspect.isclass)
+ for cls_name, instance in members:
+ if inspect.getmodule(instance) == module:
+ if cls_name.endswith('Model'):
+ models.append(instance(**kargs))
+
+ return super(Model, self).__init__(models)
diff --git a/plugins/gingerbase/model/tasks.py b/plugins/gingerbase/model/tasks.py
new file mode 100644
index 0000000..fe23e32
--- /dev/null
+++ b/plugins/gingerbase/model/tasks.py
@@ -0,0 +1,64 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+import time
+
+from wok.exception import TimeoutExpired
+
+
+class TasksModel(object):
+ def __init__(self, **kargs):
+ self.objstore = kargs['objstore']
+
+ def get_list(self):
+ with self.objstore as session:
+ return session.get_list('task')
+
+
+class TaskModel(object):
+ def __init__(self, **kargs):
+ self.objstore = kargs['objstore']
+
+ def lookup(self, id):
+ with self.objstore as session:
+ return session.get('task', str(id))
+
+ def wait(self, id, timeout=10):
+ """Wait for a task until it stops running (successfully or due to
+ an error). If the Task finishes its execution before <timeout>, this
+ function returns normally; otherwise an exception is raised.
+
+ Parameters:
+ id -- The Task ID.
+ timeout -- The maximum time, in seconds, that this function should wait
+ for the Task. If the Task runs for more than <timeout>,
+ "TimeoutExpired" is raised.
+ """
+ for i in range(0, timeout):
+ with self.objstore as session:
+ task = session.get('task', str(id))
+
+ if task['status'] != 'running':
+ return
+
+ time.sleep(1)
+
+ raise TimeoutExpired('GGBASYNC0001E', {'seconds': timeout,
+ 'task': task['target_uri']})
diff --git a/plugins/kimchi/model/debugreports.py b/plugins/kimchi/model/debugreports.py
deleted file mode 100644
index d20eb12..0000000
--- a/plugins/kimchi/model/debugreports.py
+++ /dev/null
@@ -1,213 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import fnmatch
-import glob
-import logging
-import os
-import shutil
-import subprocess
-import time
-
-from wok.exception import InvalidParameter, NotFoundError, OperationFailed
-from wok.exception import WokException
-from wok.utils import add_task, wok_log
-from wok.utils import run_command
-
-from .. import config
-from tasks import TaskModel
-
-
-class DebugReportsModel(object):
- def __init__(self, **kargs):
- self.objstore = kargs['objstore']
- self.task = TaskModel(**kargs)
-
- def create(self, params):
- ident = params.get('name').strip()
- # Generate a name with time and millisec precision, if necessary
- if ident is None or ident == "":
- ident = 'report-' + str(int(time.time() * 1000))
- else:
- if ident in self.get_list():
- raise InvalidParameter("KCHDR0008E", {"name": ident})
- taskid = self._gen_debugreport_file(ident)
- return self.task.lookup(taskid)
-
- def get_list(self):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, '*.*')
- file_lists = glob.glob(file_pattern)
- file_lists = [os.path.split(file)[1] for file in file_lists]
- name_lists = [file.split('.', 1)[0] for file in file_lists]
-
- return name_lists
-
- def _gen_debugreport_file(self, name):
- gen_cmd = self.get_system_report_tool()
-
- if gen_cmd is not None:
- return add_task('/plugins/kimchi/debugreports/%s' % name, gen_cmd,
- self.objstore, name)
-
- raise OperationFailed("KCHDR0002E")
-
- @staticmethod
- def sosreport_generate(cb, name):
- def log_error(e):
- log = logging.getLogger('Model')
- log.warning('Exception in generating debug file: %s', e)
-
- try:
- command = ['sosreport', '--batch', '--name=%s' % name]
- output, error, retcode = run_command(command)
-
- if retcode != 0:
- raise OperationFailed("KCHDR0003E", {'name': name,
- 'err': retcode})
-
- # SOSREPORT might create file in /tmp or /var/tmp
- # FIXME: The right way should be passing the tar.xz file directory
- # though the parameter '--tmp-dir', but it is failing in Fedora 20
- patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*']
- reports = []
- reportFile = None
- for p in patterns:
- reports = reports + [f for f in glob.glob(p % name)]
- for f in reports:
- if not fnmatch.fnmatch(f, '*.md5'):
- reportFile = f
- break
- # Some error in sosreport happened
- if reportFile is None:
- wok_log.error('Debug report file not found. See sosreport '
- 'output for detail:\n%s', output)
- fname = (patterns[0] % name).split('/')[-1]
- raise OperationFailed('KCHDR0004E', {'name': fname})
-
- md5_report_file = reportFile + '.md5'
- report_file_extension = '.' + reportFile.split('.', 1)[1]
- path = config.get_debugreports_path()
- target = os.path.join(path, name + report_file_extension)
- # Moving report
- msg = 'Moving debug report file "%s" to "%s"' % (reportFile,
- target)
- wok_log.info(msg)
- shutil.move(reportFile, target)
- # Deleting md5
- msg = 'Deleting report md5 file: "%s"' % (md5_report_file)
- wok_log.info(msg)
- with open(md5_report_file) as f:
- md5 = f.read().strip()
- wok_log.info('Md5 file content: "%s"', md5)
- os.remove(md5_report_file)
- cb('OK', True)
- return
-
- except WokException as e:
- log_error(e)
- raise
-
- except OSError as e:
- log_error(e)
- raise
-
- except Exception, e:
- # No need to call cb to update the task status here.
- # The task object will catch the exception raised here
- # and update the task status there
- log_error(e)
- raise OperationFailed("KCHDR0005E", {'name': name, 'err': e})
-
- @staticmethod
- def get_system_report_tool():
- # Please add new possible debug report command here
- # and implement the report generating function
- # based on the new report command
- report_tools = ({'cmd': 'sosreport --help',
- 'fn': DebugReportsModel.sosreport_generate},)
-
- # check if the command can be found by shell one by one
- for helper_tool in report_tools:
- try:
- retcode = subprocess.call(helper_tool['cmd'], shell=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- if retcode == 0:
- return helper_tool['fn']
- except Exception, e:
- wok_log.info('Exception running command: %s', e)
-
- return None
-
-
-class DebugReportModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name)
- file_pattern = file_pattern + '.*'
- try:
- file_target = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- ctime = os.stat(file_target).st_mtime
- ctime = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(ctime))
- file_target = os.path.split(file_target)[-1]
- file_target = os.path.join("plugins/kimchi/data/debugreports",
- file_target)
- return {'uri': file_target,
- 'ctime': ctime}
-
- def update(self, name, params):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name + '.*')
- try:
- file_source = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- file_target = file_source.replace(name, params['name'])
- if os.path.isfile(file_target):
- raise InvalidParameter('KCHDR0008E', {'name': params['name']})
-
- shutil.move(file_source, file_target)
- wok_log.info('%s renamed to %s' % (file_source, file_target))
- return params['name']
-
- def delete(self, name):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name + '.*')
- try:
- file_target = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- os.remove(file_target)
-
-
-class DebugReportContentModel(object):
- def __init__(self, **kargs):
- self._debugreport = DebugReportModel()
-
- def lookup(self, name):
- return self._debugreport.lookup(name)
--
2.1.0
3
2
[PATCH 06/17] Ginger Base : control, API, config, and INSTALL files
by chandra@linux.vnet.ibm.com 11 Sep '15
by chandra@linux.vnet.ibm.com 11 Sep '15
11 Sep '15
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/API.json | 175 ++++++++
plugins/gingerbase/INSTALL | 369 ++++++++++++++++
plugins/gingerbase/config.rpath | 672 +++++++++++++++++++++++++++++
plugins/gingerbase/control/Makefile.am | 25 ++
plugins/gingerbase/control/__init__.py | 26 ++
plugins/gingerbase/control/cpuinfo.py | 37 ++
plugins/gingerbase/control/debugreports.py | 61 +++
plugins/gingerbase/control/host.py | 145 +++++++
plugins/gingerbase/control/tasks.py | 37 ++
plugins/kimchi/control/debugreports.py | 61 ---
10 files changed, 1547 insertions(+), 61 deletions(-)
create mode 100644 plugins/gingerbase/API.json
create mode 100644 plugins/gingerbase/INSTALL
create mode 100644 plugins/gingerbase/config.rpath
create mode 100644 plugins/gingerbase/control/Makefile.am
create mode 100644 plugins/gingerbase/control/__init__.py
create mode 100644 plugins/gingerbase/control/cpuinfo.py
create mode 100644 plugins/gingerbase/control/debugreports.py
create mode 100644 plugins/gingerbase/control/host.py
create mode 100644 plugins/gingerbase/control/tasks.py
delete mode 100644 plugins/kimchi/control/debugreports.py
diff --git a/plugins/gingerbase/API.json b/plugins/gingerbase/API.json
new file mode 100644
index 0000000..7b77eac
--- /dev/null
+++ b/plugins/gingerbase/API.json
@@ -0,0 +1,175 @@
+{
+ "$schema": "http://json-schema.org/draft-03/schema#",
+ "title": "Ginger Base API",
+ "description": "Json schema for Gigner Base API",
+ "type": "object",
+ "gingerbasetype": {
+ "cpu_info": {
+ "description": "Configure CPU specifics for a VM.",
+ "type": "object",
+ "properties": {
+ "topology": {
+ "description": "Configure the guest CPU topology.",
+ "type": "object",
+ "properties": {
+ "sockets": {
+ "type": "integer",
+ "required": true,
+ "minimum": 1,
+ "error": "GGBHOST0005E"
+ },
+ "cores": {
+ "type": "integer",
+ "required": true,
+ "minimum": 1,
+ "error": "GGBHOST0005E"
+ },
+ "threads": {
+ "type": "integer",
+ "required": true,
+ "minimum": 1,
+ "error": "GGBHOST0005E"
+ }
+ }
+ }
+ }
+ }
+ },
+ "properties": {
+ "debugreports_create": {
+ "type": "object",
+ "error": "GGBDR0006E",
+ "properties": {
+ "name": {
+ "description": "The name for the debug report file.",
+ "type": "string",
+ "pattern": "^[_A-Za-z0-9-]*$",
+ "error": "GGBDR0007E"
+ }
+ }
+ },
+ "debugreport_update": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "New name of debug report",
+ "type": "string",
+ "pattern": "^[_A-Za-z0-9-]*$",
+ "error": "GGBDR0007E"
+ }
+ },
+ "additionalProperties": false
+ },
+ "repositories_create": {
+ "type": "object",
+ "properties": {
+ "repo_id": {
+ "description": "Repository ID used for YUM repository.",
+ "type": "string",
+ "error": "GGBREPOS0001E"
+ },
+ "baseurl": {
+ "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
+ "type": "string",
+ "error": "GGBREPOS0002E"
+ },
+ "config": {
+ "description": "Dictionary containing repository configuration",
+ "type": "object",
+ "error": "GGBREPOS0003E",
+ "properties": {
+ "dist": {
+ "description": "Distribution to DEB repository",
+ "type": "string",
+ "error": "GGBREPOS0004E"
+ },
+ "comps": {
+ "description": "List of components to DEB repository",
+ "type": "array",
+ "error": "GGBREPOS0005E",
+ "uniqueItems": true,
+ "items": {
+ "description": "Component name",
+ "type": "string",
+ "error": "GGBREPOS0006E"
+ }
+ },
+ "repo_name": {
+ "description": "YUM repository name",
+ "type": "string",
+ "error": "GGBREPOS0023E"
+ },
+ "mirrorlist": {
+ "description": "URL to a file containing a list of baseurls",
+ "type": "string",
+ "error": "GGBREPOS0007E"
+ },
+ "metalink": {
+ "description": "URL to a metalink file for the repomd.xml",
+ "type": "string",
+ "error": "GGBREPOS0029E"
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "error": "KCHAPI0001E"
+ },
+ "repository_update": {
+ "type": "object",
+ "properties": {
+ "baseurl": {
+ "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
+ "type": "string",
+ "error": "GGBREPOS0002E"
+ },
+ "config": {
+ "description": "Dictionary containing repository configuration",
+ "type": "object",
+ "error": "GGBREPOS0003E",
+ "properties": {
+ "dist": {
+ "description": "Distribution to DEB repository",
+ "type": "string",
+ "error": "GGBREPOS0004E"
+ },
+ "comps": {
+ "description": "List of components to DEB repository",
+ "type": "array",
+ "error": "GGBREPOS0005E",
+ "uniqueItems": true,
+ "items": {
+ "description": "Component name",
+ "type": "string",
+ "error": "GGBREPOS0006E"
+ }
+ },
+ "repo_name": {
+ "description": "Human-readable string describing the YUM repository.",
+ "type": "string",
+ "error": "GGBREPOS0008E"
+ },
+ "mirrorlist": {
+ "description": "URL to a file containing a list of baseurls for YUM repository",
+ "type": "string",
+ "error": "GGBREPOS0007E"
+ },
+ "gpgcheck": {
+ "description": "Indicates if a GPG signature check on the packages gotten from repository should be performed.",
+ "type": "boolean",
+ "error": "GGBREPOS0009E"
+ },
+ "gpgkey": {
+ "description": "URL pointing to the ASCII-armored GPG key file for the repository.",
+ "type": "string",
+ "error": "GGBREPOS0010E"
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "error": "GGBAPI0001E"
+
+ }
+ }
+}
diff --git a/plugins/gingerbase/INSTALL b/plugins/gingerbase/INSTALL
new file mode 100644
index 0000000..63bf076
--- /dev/null
+++ b/plugins/gingerbase/INSTALL
@@ -0,0 +1,369 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
+Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug. Until the bug is fixed you can use this workaround:
+
+ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
diff --git a/plugins/gingerbase/config.rpath b/plugins/gingerbase/config.rpath
new file mode 100644
index 0000000..17298f2
--- /dev/null
+++ b/plugins/gingerbase/config.rpath
@@ -0,0 +1,672 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2010 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord(a)gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja(a)dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ library_names_spec='$libname.a'
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd1*)
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ nto-qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/plugins/gingerbase/control/Makefile.am b/plugins/gingerbase/control/Makefile.am
new file mode 100644
index 0000000..049570f
--- /dev/null
+++ b/plugins/gingerbase/control/Makefile.am
@@ -0,0 +1,25 @@
+#
+# Kimchi
+#
+# Copyright IBM Corp, 2013
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+control_PYTHON = *.py
+
+controldir = $(pythondir)/wok/plugins/gingerbase/control
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(controldir)
diff --git a/plugins/gingerbase/control/__init__.py b/plugins/gingerbase/control/__init__.py
new file mode 100644
index 0000000..4ad9459
--- /dev/null
+++ b/plugins/gingerbase/control/__init__.py
@@ -0,0 +1,26 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os
+
+
+from wok.control.utils import load_url_sub_node
+
+
+sub_nodes = load_url_sub_node(os.path.dirname(__file__), __name__)
diff --git a/plugins/gingerbase/control/cpuinfo.py b/plugins/gingerbase/control/cpuinfo.py
new file mode 100644
index 0000000..31f316c
--- /dev/null
+++ b/plugins/gingerbase/control/cpuinfo.py
@@ -0,0 +1,37 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+from wok.control.base import Resource
+
+
+class CPUInfo(Resource):
+ def __init__(self, model):
+ super(CPUInfo, self).__init__(model)
+ self.admin_methods = ['GET']
+ self.role_key = 'host'
+ self.uri_fmt = "/host/cpuinfo"
+
+ @property
+ def data(self):
+ return {'threading_enabled': self.info['guest_threads_enabled'],
+ 'sockets': self.info['sockets'],
+ 'cores': self.info['cores_available'],
+ 'threads_per_core': self.info['threads_per_core']
+ }
diff --git a/plugins/gingerbase/control/debugreports.py b/plugins/gingerbase/control/debugreports.py
new file mode 100644
index 0000000..b5a3072
--- /dev/null
+++ b/plugins/gingerbase/control/debugreports.py
@@ -0,0 +1,61 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from wok.control.base import AsyncCollection, Resource
+from wok.control.utils import internal_redirect
+from wok.control.utils import UrlSubNode
+
+
+@UrlSubNode('debugreports', True)
+class DebugReports(AsyncCollection):
+ def __init__(self, model):
+ super(DebugReports, self).__init__(model)
+ self.resource = DebugReport
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'POST']
+
+ def _get_resources(self, filter_params):
+ res_list = super(DebugReports, self)._get_resources(filter_params)
+ return sorted(res_list, key=lambda x: x.data['time'], reverse=True)
+
+
+class DebugReport(Resource):
+ def __init__(self, model, ident):
+ super(DebugReport, self).__init__(model, ident)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'PUT', 'POST']
+ self.uri_fmt = '/debugreports/%s'
+ self.content = DebugReportContent(model, ident)
+
+ @property
+ def data(self):
+ return {'name': self.ident,
+ 'uri': self.info['uri'],
+ 'time': self.info['ctime']}
+
+
+class DebugReportContent(Resource):
+ def __init__(self, model, ident):
+ super(DebugReportContent, self).__init__(model, ident)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+
+ def get(self):
+ self.lookup()
+ raise internal_redirect(self.info['uri'])
diff --git a/plugins/gingerbase/control/host.py b/plugins/gingerbase/control/host.py
new file mode 100644
index 0000000..6e6bd68
--- /dev/null
+++ b/plugins/gingerbase/control/host.py
@@ -0,0 +1,145 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from wok.control.base import Collection, Resource, SimpleCollection
+from wok.control.utils import UrlSubNode
+from wok.exception import NotFoundError
+
+from cpuinfo import CPUInfo
+
+
+@UrlSubNode('host', True)
+class Host(Resource):
+ def __init__(self, model, id=None):
+ super(Host, self).__init__(model, id)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'POST']
+ self.uri_fmt = '/host/%s'
+ self.reboot = self.generate_action_handler('reboot')
+ self.shutdown = self.generate_action_handler('shutdown')
+ self.stats = HostStats(self.model)
+ self.partitions = Partitions(self.model)
+ # self.devices = Devices(self.model)
+ self.packagesupdate = PackagesUpdate(self.model)
+ self.repositories = Repositories(self.model)
+ self.swupdate = self.generate_action_handler_task('swupdate')
+ self.cpuinfo = CPUInfo(self.model)
+ self.capabilities = Capabilities(self.model)
+
+ @property
+ def data(self):
+ return self.info
+
+
+class HostStats(Resource):
+ def __init__(self, model, id=None):
+ super(HostStats, self).__init__(model, id)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+ self.history = HostStatsHistory(self.model)
+
+ @property
+ def data(self):
+ return self.info
+
+
+class HostStatsHistory(Resource):
+ @property
+ def data(self):
+ return self.info
+
+
+class Capabilities(Resource):
+ def __init__(self, model, id=None):
+ super(Capabilities, self).__init__(model, id)
+
+ @property
+ def data(self):
+ return self.info
+
+
+class Partitions(Collection):
+ def __init__(self, model):
+ super(Partitions, self).__init__(model)
+ self.role_key = 'storage'
+ self.admin_methods = ['GET']
+ self.resource = Partition
+
+ # Defining get_resources in order to return list of partitions in UI
+ # sorted by their path
+ def _get_resources(self, flag_filter):
+ res_list = super(Partitions, self)._get_resources(flag_filter)
+ res_list = filter(lambda x: x.info['available'], res_list)
+ res_list.sort(key=lambda x: x.info['path'])
+ return res_list
+
+
+class Partition(Resource):
+ def __init__(self, model, id):
+ self.role_key = 'storage'
+ self.admin_methods = ['GET']
+ super(Partition, self).__init__(model, id)
+
+ @property
+ def data(self):
+ if not self.info['available']:
+ raise NotFoundError("GGBPART0001E", {'name': self.info['name']})
+
+ return self.info
+
+
+class PackagesUpdate(Collection):
+ def __init__(self, model):
+ super(PackagesUpdate, self).__init__(model)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+ self.resource = PackageUpdate
+
+
+class PackageUpdate(Resource):
+ def __init__(self, model, id=None):
+ super(PackageUpdate, self).__init__(model, id)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+
+ @property
+ def data(self):
+ return self.info
+
+
+class Repositories(Collection):
+ def __init__(self, model):
+ super(Repositories, self).__init__(model)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'POST']
+ self.resource = Repository
+
+
+class Repository(Resource):
+ def __init__(self, model, id):
+ super(Repository, self).__init__(model, id)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'PUT', 'POST', 'DELETE']
+ self.uri_fmt = "/host/repositories/%s"
+ self.enable = self.generate_action_handler('enable')
+ self.disable = self.generate_action_handler('disable')
+
+ @property
+ def data(self):
+ return self.info
diff --git a/plugins/gingerbase/control/tasks.py b/plugins/gingerbase/control/tasks.py
new file mode 100644
index 0000000..b25d892
--- /dev/null
+++ b/plugins/gingerbase/control/tasks.py
@@ -0,0 +1,37 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from wok.control.base import Collection, Resource
+from wok.control.utils import UrlSubNode
+
+
+@UrlSubNode("tasks", True)
+class Tasks(Collection):
+ def __init__(self, model):
+ super(Tasks, self).__init__(model)
+ self.resource = Task
+
+
+class Task(Resource):
+ def __init__(self, model, id):
+ super(Task, self).__init__(model, id)
+
+ @property
+ def data(self):
+ return self.info
diff --git a/plugins/kimchi/control/debugreports.py b/plugins/kimchi/control/debugreports.py
deleted file mode 100644
index b5a3072..0000000
--- a/plugins/kimchi/control/debugreports.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-from wok.control.base import AsyncCollection, Resource
-from wok.control.utils import internal_redirect
-from wok.control.utils import UrlSubNode
-
-
-@UrlSubNode('debugreports', True)
-class DebugReports(AsyncCollection):
- def __init__(self, model):
- super(DebugReports, self).__init__(model)
- self.resource = DebugReport
- self.role_key = 'host'
- self.admin_methods = ['GET', 'POST']
-
- def _get_resources(self, filter_params):
- res_list = super(DebugReports, self)._get_resources(filter_params)
- return sorted(res_list, key=lambda x: x.data['time'], reverse=True)
-
-
-class DebugReport(Resource):
- def __init__(self, model, ident):
- super(DebugReport, self).__init__(model, ident)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'PUT', 'POST']
- self.uri_fmt = '/debugreports/%s'
- self.content = DebugReportContent(model, ident)
-
- @property
- def data(self):
- return {'name': self.ident,
- 'uri': self.info['uri'],
- 'time': self.info['ctime']}
-
-
-class DebugReportContent(Resource):
- def __init__(self, model, ident):
- super(DebugReportContent, self).__init__(model, ident)
- self.role_key = 'host'
- self.admin_methods = ['GET']
-
- def get(self):
- self.lookup()
- raise internal_redirect(self.info['uri'])
--
2.1.0
3
2
[PATCH 04/17] Ginger Base : base plugin build-aix and contrib
by chandra@linux.vnet.ibm.com 11 Sep '15
by chandra@linux.vnet.ibm.com 11 Sep '15
11 Sep '15
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/build-aux/config.rpath | 672 +++++++++++++++++++++
plugins/gingerbase/build-aux/genChangelog | 25 +
plugins/gingerbase/build-aux/pkg-version | 59 ++
plugins/gingerbase/contrib/DEBIAN/Makefile.am | 17 +
plugins/gingerbase/contrib/DEBIAN/control.in | 14 +
plugins/gingerbase/contrib/Makefile.am | 34 ++
plugins/gingerbase/contrib/check_i18n.py | 82 +++
.../gingerbase/contrib/gingerbase.spec.fedora.in | 68 +++
plugins/gingerbase/contrib/gingerbase.spec.suse.in | 62 ++
plugins/gingerbase/contrib/make-deb.sh.in | 15 +
10 files changed, 1048 insertions(+)
create mode 100644 plugins/gingerbase/build-aux/config.rpath
create mode 100755 plugins/gingerbase/build-aux/genChangelog
create mode 100755 plugins/gingerbase/build-aux/pkg-version
create mode 100644 plugins/gingerbase/contrib/DEBIAN/Makefile.am
create mode 100644 plugins/gingerbase/contrib/DEBIAN/control.in
create mode 100644 plugins/gingerbase/contrib/Makefile.am
create mode 100755 plugins/gingerbase/contrib/check_i18n.py
create mode 100644 plugins/gingerbase/contrib/gingerbase.spec.fedora.in
create mode 100644 plugins/gingerbase/contrib/gingerbase.spec.suse.in
create mode 100644 plugins/gingerbase/contrib/make-deb.sh.in
diff --git a/plugins/gingerbase/build-aux/config.rpath b/plugins/gingerbase/build-aux/config.rpath
new file mode 100644
index 0000000..17298f2
--- /dev/null
+++ b/plugins/gingerbase/build-aux/config.rpath
@@ -0,0 +1,672 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2010 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord(a)gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja(a)dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ library_names_spec='$libname.a'
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd1*)
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ nto-qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/plugins/gingerbase/build-aux/genChangelog b/plugins/gingerbase/build-aux/genChangelog
new file mode 100755
index 0000000..803f24e
--- /dev/null
+++ b/plugins/gingerbase/build-aux/genChangelog
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# This script is based on code from the Kandan project:
+# https://github.com/kandanapp/kandan/blob/master/gen-changelog.sh
+
+echo "CHANGELOG"
+echo "========="
+echo
+git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags | tac |grep -v '^$' | while read TAG ; do
+ if [ $NEXT ]; then
+ echo "#### [$NEXT] ####"
+ elif [ "$1" != "--release" ]; then
+ echo "#### [Current] ####"
+ else
+ NEXT=$TAG
+ continue
+ fi
+ GIT_PAGER=cat git log --pretty=format:" * [%h] %<(78,trunc)%s (%an)" $TAG..$NEXT
+ NEXT=$TAG
+ echo; echo
+done
+FIRST=$(git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags | head -1)
+
+echo "#### [$FIRST] ####"
+GIT_PAGER=cat git log --pretty=format:" * [%h] %<(78,trunc)%s (%an)" $FIRST
diff --git a/plugins/gingerbase/build-aux/pkg-version b/plugins/gingerbase/build-aux/pkg-version
new file mode 100755
index 0000000..749cf6c
--- /dev/null
+++ b/plugins/gingerbase/build-aux/pkg-version
@@ -0,0 +1,59 @@
+#!/bin/sh
+#
+# Copyright 2008-2012 Red Hat, Inc.
+#
+# 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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# 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
+
+# tags and output versions:
+# - 4.9.0 => 4.9.0 (upstream clean)
+# - 4.9.0-1 => 4.9.0 (downstream clean)
+# - 4.9.0-2-g34e62f => 4.9.0 (upstream dirty)
+# - 4.9.0-1-2-g34e62f => 4.9.0 (downstream dirty)
+AWK_VERSION='
+ BEGIN { FS="-" }
+ /^[0-9]/ {
+ print $1
+ }'
+
+# tags and output releases:
+# - 4.9.0 => 0 (upstream clean)
+# - 4.9.0-1 => 1 (downstream clean)
+# - 4.9.0-2-g34e62f1 => 2.git34e62f1 (upstream dirty)
+# - 4.9.0-1-2-g34e62f1 => 1.2.git34e62f1 (downstream dirty)
+AWK_RELEASE='
+ BEGIN { FS="-"; OFS="." }
+ /^[0-9]/ {
+ if (NF == 1) print 0
+ else if (NF == 2) print $2
+ else if (NF == 3) print $2, "git" substr($3, 2)
+ else if (NF == 4) print $2, $3, "git" substr($4, 2)
+ }'
+
+if [ ! -d .git ]; then
+ PKG_VERSION=`cat VERSION`
+else
+ PKG_VERSION=`git describe --tags --match "[0-9]*" || cat VERSION`
+fi
+
+if test "x$1" = "x--full"; then
+ echo $PKG_VERSION | tr -d '[:space:]'
+elif test "x$1" = "x--version"; then
+ echo $PKG_VERSION | awk "$AWK_VERSION" | tr -cd '[:alnum:].'
+elif test "x$1" = "x--release"; then
+ echo $PKG_VERSION | awk "$AWK_RELEASE" | tr -cd '[:alnum:].'
+else
+ echo "usage: $0 [--full|--version|--release]"
+ exit 1
+fi
diff --git a/plugins/gingerbase/contrib/DEBIAN/Makefile.am b/plugins/gingerbase/contrib/DEBIAN/Makefile.am
new file mode 100644
index 0000000..ca89552
--- /dev/null
+++ b/plugins/gingerbase/contrib/DEBIAN/Makefile.am
@@ -0,0 +1,17 @@
+# Copyright IBM Corp, 2013
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+CLEANFILES = control
diff --git a/plugins/gingerbase/contrib/DEBIAN/control.in b/plugins/gingerbase/contrib/DEBIAN/control.in
new file mode 100644
index 0000000..0f1e187
--- /dev/null
+++ b/plugins/gingerbase/contrib/DEBIAN/control.in
@@ -0,0 +1,14 @@
+Package: @PACKAGE_NAME@
+Version: @PACKAGE_VERSION@
+Section: base
+Priority: optional
+Architecture: all
+Depends: wok,
+ python-psutil (>= 0.6.0),
+ sosreport,
+Build-Depends: libxslt,
+ python-lxml
+Maintainer: Aline Manera <alinefm(a)br.ibm.com>
+Description: Ginger Base is an open source base host management plugin for Wok
+(Webserver Originated from Kimchi), that provides an intuitive web panel with
+common tools for configuring and managing the Linux systems.
diff --git a/plugins/gingerbase/contrib/Makefile.am b/plugins/gingerbase/contrib/Makefile.am
new file mode 100644
index 0000000..7ca0752
--- /dev/null
+++ b/plugins/gingerbase/contrib/Makefile.am
@@ -0,0 +1,34 @@
+# Copyright IBM Corp, 2013
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SUBDIRS = DEBIAN
+
+EXTRA_DIST = \
+ check_i18n.py \
+ gingerbase.spec.fedora.in \
+ make-deb.sh.in \
+ $(NULL)
+
+make-deb.sh: make-deb.sh.in $(top_builddir)/config.status
+ $(AM_V_GEN)sed \
+ -e 's|[@]PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \
+ -e 's|[@]PACKAGE_RELEASE[@]|$(PACKAGE_RELEASE)|g' \
+ < $< > $@-t && \
+ chmod a+x $@-t && \
+ mv $@-t $@
+BUILT_SOURCES = make-deb.sh
+
+CLEANFILES = gingerbase.spec.fedora gingerbase.spec.suse gingerbase.spec make-deb.sh
diff --git a/plugins/gingerbase/contrib/check_i18n.py b/plugins/gingerbase/contrib/check_i18n.py
new file mode 100755
index 0000000..6a2603c
--- /dev/null
+++ b/plugins/gingerbase/contrib/check_i18n.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python2
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import imp
+import os
+import re
+import sys
+
+
+# Match all conversion specifier with mapping key
+PATTERN = re.compile(r'''%\([^)]+\) # Mapping key
+ [#0\-+]? # Conversion flags (optional)
+ (\d+|\*)? # Minimum field width (optional)
+ (\.(\d+|\*))? # Precision (optional)
+ [lLh]? # Length modifier (optional)
+ [cdeEfFgGioursxX%] # Conversion type''',
+ re.VERBOSE)
+BAD_PATTERN = re.compile(r"%\([^)]*?\)")
+
+
+def load_i18n_module(i18nfile):
+ path = os.path.dirname(i18nfile)
+ mname = i18nfile.replace("/", "_").rstrip(".py")
+ mobj = imp.find_module("i18n", [path])
+ return imp.load_module(mname, *mobj)
+
+
+def check_string_formatting(messages):
+ for k, v in messages.iteritems():
+ if BAD_PATTERN.findall(PATTERN.sub(" ", v)):
+ print "bad i18n string formatting:"
+ print " %s: %s" % (k, v)
+ exit(1)
+
+
+def check_obsolete_messages(path, messages):
+ def find_message_key(path, k):
+ for root, dirs, files in os.walk(path):
+ for f in files:
+ fname = os.path.join(root, f)
+ if (not fname.endswith("i18n.py") and fname.endswith(".py") or
+ fname.endswith(".json")):
+ with open(fname) as f:
+ string = "".join(f.readlines())
+ if k in string:
+ return True
+ return False
+
+ for k in messages.iterkeys():
+ if not find_message_key(path, k):
+ print " %s is obsolete, it is no longer in use" % k
+ exit(1)
+
+
+def main():
+ print "Checking for invalid i18n string..."
+ for f in sys.argv[1:]:
+ messages = load_i18n_module(f).messages
+ check_string_formatting(messages)
+ check_obsolete_messages(os.path.dirname(f), messages)
+ print "Checking for invalid i18n string successfully"
+
+
+if __name__ == '__main__':
+ main()
diff --git a/plugins/gingerbase/contrib/gingerbase.spec.fedora.in b/plugins/gingerbase/contrib/gingerbase.spec.fedora.in
new file mode 100644
index 0000000..44f03fd
--- /dev/null
+++ b/plugins/gingerbase/contrib/gingerbase.spec.fedora.in
@@ -0,0 +1,68 @@
+Name: Ginger Base
+Version: @PACKAGE_VERSION@
+Release: @PACKAGE_RELEASE@%{?dist}
+Summary: Kimchi server application
+BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
+BuildArch: noarch
+Group: System Environment/Base
+License: LGPL/ASL2
+Source0: %{name}-%{version}.tar.gz
+Requires: wok
+Requires: python-psutil >= 0.6.0
+Requires: sos
+BuildRequires: libxslt
+BuildRequires: python-lxml
+
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
+%global with_systemd 1
+%endif
+
+%if 0%{?rhel} == 6
+Requires: python-ordereddict
+BuildRequires: python-unittest2
+%endif
+
+%description
+Ginger Base is an open source base host management plugin for Wok
+(Webserver Originated from Kimchi), that provides an intuitive web panel with
+common tools for configuring and managing the Linux systems.
+
+%prep
+
+
+%build
+%configure
+make
+
+
+%install
+rm -rf %{buildroot}
+make DESTDIR=%{buildroot} install
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%attr(-,root,root)
+%{python_sitelib}/wok/plugins/gingerbase/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/control/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/model/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/API.json
+%{python_sitelib}/wok/plugins/gingerbase/
+%{_datadir}/wok/plugins/gingerbase/doc/API.md
+%{_datadir}/wok/plugins/gingerbase/doc/README.md
+%{_datadir}/wok/plugins/gingerbase/doc/README-federation.md
+%{_prefix}/share/locale/*/LC_MESSAGES/gingerbase.mo
+%{_datadir}/wok/plugins/gingerbase/ui/config/*.xml
+%{_datadir}/wok/plugins/gingerbase/ui/
+%{_datadir}/wok/plugins/gingerbase
+%{_sysconfdir}/wok/plugins.d/gingerbase.conf
+%{_sysconfdir}/wok/
+%{_sharedstatedir}/wok/debugreports/
+%{_sharedstatedir}/wok/
+
+
+%changelog
+* Thu Aug 25 2015 Aline Manera <alinefm(a)br.ibm.com> 0.0-1
+- First build
diff --git a/plugins/gingerbase/contrib/gingerbase.spec.suse.in b/plugins/gingerbase/contrib/gingerbase.spec.suse.in
new file mode 100644
index 0000000..5ecd8b4
--- /dev/null
+++ b/plugins/gingerbase/contrib/gingerbase.spec.suse.in
@@ -0,0 +1,62 @@
+Name: Ginger Base
+Version: @PACKAGE_VERSION@
+Release: @PACKAGE_RELEASE@%{?dist}
+Summary: Kimchi server application
+BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
+BuildArch: noarch
+Group: System Environment/Base
+License: LGPL/ASL2
+Source0: %{name}-%{version}.tar.gz
+Requires: wok
+Requires: python-psutil >= 0.6.0
+BuildRequires: libxslt-tools
+BuildRequires: python-lxml
+
+%if 0%{?suse_version} == 1100
+Requires: python-ordereddict
+%endif
+
+%if 0%{?suse_version} > 1140
+%global with_systemd 1
+%endif
+
+%description
+Ginger Base is an open source base host management plugin for Wok
+(Webserver Originated from Kimchi), that provides an intuitive web panel with
+common tools for configuring and managing the Linux systems.
+
+%prep
+%setup
+
+%install
+rm -rf %{buildroot}
+make DESTDIR=%{buildroot} install
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%attr(-,root,root)
+%{python_sitelib}/wok/plugins/gingerbase/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/control/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/model/*.py*
+%{python_sitelib}/wok/plugins/gingerbase/API.json
+%{python_sitelib}/wok/plugins/gingerbase/
+%{_datadir}/wok/plugins/gingerbase/doc/API.md
+%{_datadir}/wok/plugins/gingerbase/doc/README.md
+%{_datadir}/wok/plugins/gingerbase/doc/README-federation.md
+%{_prefix}/share/locale/*/LC_MESSAGES/gingerbase.mo
+%{_datadir}/wok/plugins/gingerbase/ui/config/*.xml
+%{_datadir}/wok/plugins/gingerbase/ui/
+%{_datadir}/wok/plugins/gingerbase
+%{_sysconfdir}/wok/plugins.d/gingerbase.conf
+%{_sysconfdir}/wok/
+%{_var}/lib/wok/debugreports/
+%{_var}/lib/wok/
+
+
+
+%changelog
+* Thu Aug 25 2015 Aline Manera <alinefm(a)br.ibm.com> 0.0-1
+- First build
diff --git a/plugins/gingerbase/contrib/make-deb.sh.in b/plugins/gingerbase/contrib/make-deb.sh.in
new file mode 100644
index 0000000..a4c92bf
--- /dev/null
+++ b/plugins/gingerbase/contrib/make-deb.sh.in
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+VERSION="@PACKAGE_VERSION@"
+RELEASE="@PACKAGE_RELEASE@"
+
+if [ ! -f configure ]; then
+ echo "Please run this script from the top of the package tree"
+ exit 1
+fi
+
+TMPDIR=`mktemp -d`
+
+make DESTDIR=$TMPDIR install-deb
+dpkg-deb -b $TMPDIR gingerbase-${VERSION}-${RELEASE}.noarch.deb
+rm -rf $TMPDIR
--
2.1.0
3
2
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/Makefile.am | 151 +++++++++++
plugins/gingerbase/VERSION | 1 +
plugins/gingerbase/__init__.py | 21 ++
plugins/gingerbase/autogen.sh | 21 ++
plugins/gingerbase/config.py.in | 47 ++++
plugins/gingerbase/configure.ac | 116 ++++++++
plugins/gingerbase/disks.py | 196 ++++++++++++++
plugins/gingerbase/gingerbase.conf | 40 +++
plugins/gingerbase/gingerbase.py | 70 +++++
plugins/gingerbase/i18n.py | 96 +++++++
plugins/gingerbase/lscpu.py | 122 +++++++++
plugins/gingerbase/mockmodel.py | 298 +++++++++++++++++++++
plugins/gingerbase/repositories.py | 529 +++++++++++++++++++++++++++++++++++++
plugins/gingerbase/swupdate.py | 263 ++++++++++++++++++
plugins/gingerbase/yumparser.py | 283 ++++++++++++++++++++
plugins/kimchi/disks.py | 196 --------------
plugins/kimchi/repositories.py | 529 -------------------------------------
plugins/kimchi/swupdate.py | 263 ------------------
plugins/kimchi/yumparser.py | 283 --------------------
19 files changed, 2254 insertions(+), 1271 deletions(-)
create mode 100644 plugins/gingerbase/Makefile.am
create mode 100644 plugins/gingerbase/VERSION
create mode 100644 plugins/gingerbase/__init__.py
create mode 100755 plugins/gingerbase/autogen.sh
create mode 100644 plugins/gingerbase/config.py.in
create mode 100644 plugins/gingerbase/configure.ac
create mode 100644 plugins/gingerbase/disks.py
create mode 100644 plugins/gingerbase/gingerbase.conf
create mode 100644 plugins/gingerbase/gingerbase.py
create mode 100644 plugins/gingerbase/i18n.py
create mode 100644 plugins/gingerbase/lscpu.py
create mode 100644 plugins/gingerbase/mockmodel.py
create mode 100644 plugins/gingerbase/repositories.py
create mode 100644 plugins/gingerbase/swupdate.py
create mode 100644 plugins/gingerbase/yumparser.py
delete mode 100644 plugins/kimchi/disks.py
delete mode 100644 plugins/kimchi/repositories.py
delete mode 100644 plugins/kimchi/swupdate.py
delete mode 100644 plugins/kimchi/yumparser.py
diff --git a/plugins/gingerbase/Makefile.am b/plugins/gingerbase/Makefile.am
new file mode 100644
index 0000000..03daf25
--- /dev/null
+++ b/plugins/gingerbase/Makefile.am
@@ -0,0 +1,151 @@
+#
+# Kimchi
+#
+# Copyright IBM Corp, 2013
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SUBDIRS = contrib control docs model po tests ui
+
+gingerbase_PYTHON = $(filter-out config.py, $(wildcard *.py))
+
+nodist_gingerbase_PYTHON = config.py
+
+wokdir = $(pythondir)/wok
+gingerbasedir = $(pythondir)/wok/plugins/gingerbase
+
+confdir = $(sysconfdir)/wok/plugins.d
+dist_conf_DATA = gingerbase.conf
+
+AUTOMAKE_OPTIONS = foreign
+
+ACLOCAL_AMFLAGS = --install -I m4
+
+EXTRA_DIST = \
+ config.rpath \
+ API.json \
+ autogen.sh \
+ COPYING.ASL2 \
+ COPYING.LGPL \
+ CONTRIBUTE.md \
+ VERSION \
+ build-aux/pkg-version \
+ config.py.in \
+ $(NULL)
+
+
+PEP8_BLACKLIST = *config.py,*i18n.py,*tests/test_config.py
+
+I18N_FILES = ./i18n.py \
+ $(NULL)
+
+check-local:
+ contrib/check_i18n.py $(I18N_FILES)
+ find . -path './.git' -prune -type f -o \
+ -name '*.py' -o -name '*.py.in' | xargs $(PYFLAKES) | \
+ while read LINE; do echo "$$LINE"; false; done
+
+ $(PEP8) --version
+ $(PEP8) --filename '*.py,*.py.in' --exclude="$(PEP8_BLACKLIST)" .
+
+
+# Link built mo files in the source tree to enable use of translations from
+# within the source tree
+all-local:
+ while read L && test -n "$$L"; do \
+ dir=mo/$$L/LC_MESSAGES ; \
+ $(MKDIR_P) $$dir ; \
+ ln -sf ../../../po/$$L.gmo $$dir/gingerbase.mo ; \
+ done < po/LINGUAS
+
+do_substitution = \
+ sed -e 's,[@]prefix[@],$(prefix),g' \
+ -e 's,[@]datadir[@],$(datadir),g' \
+ -e 's,[@]sysconfdir[@],$(sysconfdir),g' \
+ -e 's,[@]localstatedir[@],$(localstatedir),g' \
+ -e 's,[@]pkgdatadir[@],$(pkgdatadir),g' \
+ -e 's,[@]wokdir[@],$(wokdir),g' \
+ -e 's,[@]gingerbasedir[@],$(gingerbasedir),g' \
+ -e 's,[@]kimchiversion[@],$(PACKAGE_VERSION),g' \
+ -e 's,[@]kimchirelease[@],$(PACKAGE_RELEASE),g' \
+ -e 's,[@]withspice[@],$(WITH_SPICE),g'
+
+config.py: config.py.in Makefile
+ $(do_substitution) < $(srcdir)/config.py.in > config.py
+
+
+#
+# Packaging helpers
+#
+
+install-deb: install
+ cp -R $(top_srcdir)/contrib/DEBIAN $(DESTDIR)/
+ mkdir -p $(DESTDIR)/var/lib/kimchi/debugreports
+
+
+deb: contrib/make-deb.sh
+ $(top_srcdir)/contrib/make-deb.sh
+
+gingerbase.spec: contrib/gingerbase.spec.fedora contrib/gingerbase.spec.suse
+ @if test -e /etc/redhat-release; then \
+ ln -sf contrib/gingerbase.spec.fedora $@ ; \
+ elif test -e /etc/SuSE-release; then \
+ ln -sf contrib/gingerbase.spec.suse $@ ; \
+ else \
+ echo "Unable to select a spec file for RPM build" ; \
+ /bin/false ; \
+ fi
+
+rpm: dist gingerbase.spec
+ $(MKDIR_P) rpm/BUILD rpm/RPMS rpm/SOURCES rpm/SPECS rpm/SRPMS
+ cp $(top_srcdir)/gingerbase.spec rpm/SPECS/gingerbase.spec
+ cp $(DIST_ARCHIVES) rpm/SOURCES
+ rpmbuild -ba --define "_topdir `pwd`/rpm" rpm/SPECS/gingerbase.spec
+
+fedora-rpm: contrib/gingerbase.spec.fedora
+ ln -sf contrib/gingerbase.spec.fedora gingerbase.spec
+ $(MAKE) rpm
+
+suse-rpm: contrib/gingerbase.spec.suse
+ ln -sf contrib/gingerbase.spec.suse gingerbase.spec
+ $(MAKE) rpm
+
+ChangeLog:
+ @if test -d .git; then \
+ $(top_srcdir)/build-aux/genChangelog --release > $@; \
+ fi
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(gingerbasedir)
+ $(INSTALL_DATA) API.json $(DESTDIR)$(gingerbasedir)/API.json
+ mkdir -p $(DESTDIR)/var/lib/kimchi/{debugreports}
+
+uninstall-local:
+ $(RM) $(DESTDIR)$(gingerbasedir)/API.json
+ $(RM) -rf $(DESTDIR)/var/lib/kimchi
+
+VERSION:
+ @if test -d .git; then \
+ git describe --abbrev=0 > $@; \
+ fi
+
+.PHONY: deb install-deb rpm fedora-rpm suse-rpm ChangeLog VERSION
+
+
+clean-local:
+ rm -rf mo rpm
+
+BUILT_SOURCES = config.py
+CLEANFILES = config.py gingerbase.spec `find "$(top_srcdir)" -type f -name "*.pyc" -print`
diff --git a/plugins/gingerbase/VERSION b/plugins/gingerbase/VERSION
new file mode 100644
index 0000000..bc80560
--- /dev/null
+++ b/plugins/gingerbase/VERSION
@@ -0,0 +1 @@
+1.5.0
diff --git a/plugins/gingerbase/__init__.py b/plugins/gingerbase/__init__.py
new file mode 100644
index 0000000..e383126
--- /dev/null
+++ b/plugins/gingerbase/__init__.py
@@ -0,0 +1,21 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from gingerbase import GingerBase
+__all__ = [GingerBase]
diff --git a/plugins/gingerbase/autogen.sh b/plugins/gingerbase/autogen.sh
new file mode 100755
index 0000000..0f22dba
--- /dev/null
+++ b/plugins/gingerbase/autogen.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+aclocal
+automake --add-missing
+autoreconf
+
+if [ ! -f "configure" ]; then
+ echo "Failed to generate configure script. Check to make sure autoconf, "
+ echo "automake, and other build dependencies are properly installed."
+ exit 1
+fi
+
+if [ "x$1" == "x--system" ]; then
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+else
+ if [ $# -gt 0 ]; then
+ ./configure $@
+ else
+ ./configure --prefix=/usr/local
+ fi
+fi
diff --git a/plugins/gingerbase/config.py.in b/plugins/gingerbase/config.py.in
new file mode 100644
index 0000000..44e1cc4
--- /dev/null
+++ b/plugins/gingerbase/config.py.in
@@ -0,0 +1,47 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+import os
+import platform
+import threading
+
+from wok.config import PluginPaths
+from wok.xmlutils.utils import xpath_get_text
+
+kimchiLock = threading.Lock()
+
+
+def get_debugreports_path():
+ return os.path.join(PluginPaths('gingerbase').state_dir, 'debugreports')
+
+
+class KimchiPaths(PluginPaths):
+
+ def __init__(self):
+ super(KimchiPaths, self).__init__('gingerbase')
+
+
+kimchiPaths = KimchiPaths()
+
+
+class KimchiConfig(dict):
+ def __init__(self):
+ super(KimchiConfig, self).__init__(self)
+
diff --git a/plugins/gingerbase/configure.ac b/plugins/gingerbase/configure.ac
new file mode 100644
index 0000000..2e44e72
--- /dev/null
+++ b/plugins/gingerbase/configure.ac
@@ -0,0 +1,116 @@
+#
+# Kimchi
+#
+# Copyright IBM Corp, 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+AC_INIT([gingerbase], [m4_esyscmd([./build-aux/pkg-version --version])])
+
+AC_SUBST([PACKAGE_VERSION],
+ [m4_esyscmd([./build-aux/pkg-version --version])])
+
+AC_SUBST([PACKAGE_RELEASE],
+ [m4_esyscmd([./build-aux/pkg-version --release])])
+
+# Testing for version and release
+AS_IF([test "x$PACKAGE_VERSION" = x],
+ AC_MSG_ERROR([package version not defined]))
+AS_IF([test "x$PACKAGE_RELEASE" = x],
+ AC_MSG_ERROR([package release not defined]))
+
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([-Wno-portability])
+AM_PATH_PYTHON([2.6])
+AC_PATH_PROG([PEP8], [pep8], [/usr/bin/pep8])
+AC_PYTHON_MODULE([unittest])
+AC_SUBST([HAVE_PYMOD_UNITTEST])
+AC_SUBST([PYTHON_VERSION])
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION([0.10])
+AC_PATH_PROG([CHEETAH], [cheetah], [/usr/bin/cheetah])
+
+# Checking for pyflakes
+AC_PATH_PROG([PYFLAKES], [pyflakes])
+if test "x$PYFLAKES" = "x"; then
+ AC_MSG_WARN([pyflakes not found])
+fi
+
+AC_ARG_ENABLE(
+ [sample],
+ [AS_HELP_STRING(
+ [--enable-sample],
+ [enable sample plugin @<:@default=no@:>@]
+ )],
+ ,
+ [enable_sample="no"]
+)
+
+if test "${enable_sample}" = "yes"; then
+AC_SUBST([ENABLE_SAMPLE], [True])
+else
+AC_SUBST([ENABLE_SAMPLE], [False])
+fi
+
+#AC_ARG_WITH(
+# [spice-html5],
+# [AS_HELP_STRING([--with-spice-html5],
+# [Build Kimchi with spice-html5 @<:@default=no@:>@])],
+# ,
+# [with_spice_html5="no"]
+#)
+#AM_CONDITIONAL([WITH_SPICE], [test "x$with_spice_html5" = xyes])
+
+AC_CONFIG_FILES([
+ po/Makefile.in
+ po/gen-pot
+ Makefile
+ docs/Makefile
+ control/Makefile
+ model/Makefile
+ ui/Makefile
+ ui/config/Makefile
+ ui/css/Makefile
+ ui/images/Makefile
+ ui/images/theme-default/Makefile
+ ui/js/Makefile
+ ui/libs/Makefile
+ ui/libs/themes/Makefile
+ ui/libs/themes/base/Makefile
+ ui/libs/themes/base/images/Makefile
+ ui/pages/Makefile
+ ui/pages/help/Makefile
+ ui/pages/help/en_US/Makefile
+ ui/pages/help/de_DE/Makefile
+ ui/pages/help/es_ES/Makefile
+ ui/pages/help/fr_FR/Makefile
+ ui/pages/help/it_IT/Makefile
+ ui/pages/help/ja_JP/Makefile
+ ui/pages/help/ko_KR/Makefile
+ ui/pages/help/pt_BR/Makefile
+ ui/pages/help/ru_RU/Makefile
+ ui/pages/help/zh_CN/Makefile
+ ui/pages/help/zh_TW/Makefile
+ contrib/Makefile
+ contrib/DEBIAN/Makefile
+ contrib/DEBIAN/control
+ contrib/gingerbase.spec.fedora
+ contrib/gingerbase.spec.suse
+ tests/Makefile
+],[
+ chmod +x po/gen-pot
+])
+
+AC_OUTPUT
diff --git a/plugins/gingerbase/disks.py b/plugins/gingerbase/disks.py
new file mode 100644
index 0000000..fa20a1b
--- /dev/null
+++ b/plugins/gingerbase/disks.py
@@ -0,0 +1,196 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os.path
+import re
+import subprocess
+from parted import Device as PDevice
+from parted import Disk as PDisk
+
+from wok.exception import OperationFailed
+from wok.utils import wok_log
+
+
+def _get_dev_node_path(maj_min):
+ """ Returns device node path given the device number 'major:min' """
+
+ dm_name = "/sys/dev/block/%s/dm/name" % maj_min
+ if os.path.exists(dm_name):
+ with open(dm_name) as dm_f:
+ content = dm_f.read().rstrip('\n')
+ return "/dev/mapper/" + content
+
+ uevent = "/sys/dev/block/%s/uevent" % maj_min
+ with open(uevent) as ueventf:
+ content = ueventf.read()
+
+ data = dict(re.findall(r'(\S+)=(".*?"|\S+)', content.replace("\n", " ")))
+
+ return "/dev/%s" % data["DEVNAME"]
+
+
+def _get_lsblk_devs(keys, devs=[]):
+ lsblk = subprocess.Popen(
+ ["lsblk", "-Pbo"] + [','.join(keys)] + devs,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = lsblk.communicate()
+ if lsblk.returncode != 0:
+ raise OperationFailed("GGBDISKS0001E", {'err': err})
+
+ return _parse_lsblk_output(out, keys)
+
+
+def _get_dev_major_min(name):
+ maj_min = None
+
+ keys = ["NAME", "MAJ:MIN"]
+ dev_list = _get_lsblk_devs(keys)
+
+ for dev in dev_list:
+ if dev['name'].split()[0] == name:
+ maj_min = dev['maj:min']
+ break
+ else:
+ raise OperationFailed("GGBDISKS0002E", {'device': name})
+
+ return maj_min
+
+
+def _is_dev_leaf(devNodePath):
+ try:
+ # By default, lsblk prints a device information followed by children
+ # device information
+ childrenCount = len(
+ _get_lsblk_devs(["NAME"], [devNodePath])) - 1
+ except OperationFailed as e:
+ # lsblk is known to fail on multipath devices
+ # Assume these devices contain children
+ wok_log.error(
+ "Error getting device info for %s: %s", devNodePath, e)
+ return False
+
+ return childrenCount == 0
+
+
+def _is_dev_extended_partition(devType, devNodePath):
+ if devType != 'part':
+ return False
+ diskPath = devNodePath.rstrip('0123456789')
+ device = PDevice(diskPath)
+ try:
+ extended_part = PDisk(device).getExtendedPartition()
+ except NotImplementedError as e:
+ wok_log.warning(
+ "Error getting extended partition info for dev %s type %s: %s",
+ devNodePath, devType, e.message)
+ # Treate disk with unsupported partiton table as if it does not
+ # contain extended partitions.
+ return False
+ if extended_part and extended_part.path == devNodePath:
+ return True
+ return False
+
+
+def _parse_lsblk_output(output, keys):
+ # output is on format key="value",
+ # where key can be NAME, TYPE, FSTYPE, SIZE, MOUNTPOINT, etc
+ lines = output.rstrip("\n").split("\n")
+ r = []
+ for line in lines:
+ d = {}
+ for key in keys:
+ expression = r"%s=\".*?\"" % key
+ match = re.search(expression, line)
+ field = match.group()
+ k, v = field.split('=', 1)
+ d[k.lower()] = v[1:-1]
+ r.append(d)
+ return r
+
+
+def _get_vgname(devNodePath):
+ """ Return volume group name of a physical volume. If the device node path
+ is not a physical volume, return empty string. """
+ pvs = subprocess.Popen(
+ ["pvs", "--unbuffered", "--nameprefixes", "--noheadings",
+ "-o", "vg_name", devNodePath],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = pvs.communicate()
+ if pvs.returncode != 0:
+ return ""
+
+ return re.findall(r"LVM2_VG_NAME='([^\']*)'", out)[0]
+
+
+def _is_available(name, devtype, fstype, mountpoint, majmin):
+ devNodePath = _get_dev_node_path(majmin)
+ # Only list unmounted and unformated and leaf and (partition or disk)
+ # leaf means a partition, a disk has no partition, or a disk not held
+ # by any multipath device. Physical volume belongs to no volume group
+ # is also listed. Extended partitions should not be listed.
+ if (devtype in ['part', 'disk', 'mpath'] and
+ fstype in ['', 'LVM2_member'] and
+ mountpoint == "" and
+ _get_vgname(devNodePath) == "" and
+ _is_dev_leaf(devNodePath) and
+ not _is_dev_extended_partition(devtype, devNodePath)):
+ return True
+ return False
+
+
+def get_partitions_names(check=False):
+ names = set()
+ keys = ["NAME", "TYPE", "FSTYPE", "MOUNTPOINT", "MAJ:MIN"]
+ # output is on format key="value",
+ # where key can be NAME, TYPE, FSTYPE, MOUNTPOINT
+ for dev in _get_lsblk_devs(keys):
+ # split()[0] to avoid the second part of the name, after the
+ # whiteline
+ name = dev['name'].split()[0]
+ if check and not _is_available(name, dev['type'], dev['fstype'],
+ dev['mountpoint'], dev['maj:min']):
+ continue
+ names.add(name)
+
+ return list(names)
+
+
+def get_partition_details(name):
+ majmin = _get_dev_major_min(name)
+ dev_path = _get_dev_node_path(majmin)
+
+ keys = ["TYPE", "FSTYPE", "SIZE", "MOUNTPOINT"]
+ try:
+ dev = _get_lsblk_devs(keys, [dev_path])[0]
+ except OperationFailed as e:
+ wok_log.error(
+ "Error getting partition info for %s: %s", name, e)
+ return {}
+
+ dev['available'] = _is_available(name, dev['type'], dev['fstype'],
+ dev['mountpoint'], majmin)
+ if dev['mountpoint']:
+ # Sometimes the mountpoint comes with [SWAP] or other
+ # info which is not an actual mount point. Filtering it
+ regexp = re.compile(r"\[.*\]")
+ if regexp.search(dev['mountpoint']) is not None:
+ dev['mountpoint'] = ''
+ dev['path'] = dev_path
+ dev['name'] = name
+ return dev
diff --git a/plugins/gingerbase/gingerbase.conf b/plugins/gingerbase/gingerbase.conf
new file mode 100644
index 0000000..544ac7b
--- /dev/null
+++ b/plugins/gingerbase/gingerbase.conf
@@ -0,0 +1,40 @@
+[wok]
+enable = True
+plugin_class = "GingerBase"
+uri = "/plugins/gingerbase"
+extra_auth_api_class = "control.sub_nodes"
+
+[/]
+tools.trailing_slash.on = False
+request.methods_with_bodies = ('POST', 'PUT')
+tools.nocache.on = True
+tools.proxy.on = True
+tools.sessions.on = True
+tools.sessions.name = 'wok'
+tools.sessions.secure = True
+tools.sessions.httponly = True
+tools.sessions.locking = 'explicit'
+tools.sessions.storage_type = 'ram'
+tools.sessions.timeout = 10
+tools.wokauth.on = True
+
+[/data/debugreports]
+tools.staticdir.on = True
+tools.staticdir.dir = wok.config.PluginPaths('gingerbase').state_dir + '/debugreports'
+tools.nocache.on = False
+tools.wokauth.on = True
+tools.staticdir.content_types = {'xz': 'application/x-xz'}
+
+[/favicon.ico]
+tools.staticfile.on = True
+tools.staticfile.filename = wok.config.PluginPaths('gingerbase').ui_dir + '/images/logo.ico'
+
+[/robots.txt]
+tools.staticfile.on = True
+tools.staticfile.filename = wok.config.PluginPaths('gingerbase').ui_dir + '/robots.txt'
+
+[/help]
+tools.staticdir.on = True
+tools.staticdir.dir = wok.config.PluginPaths('gingerbase').ui_dir + '/pages/help'
+tools.nocache.on = True
+
diff --git a/plugins/gingerbase/gingerbase.py b/plugins/gingerbase/gingerbase.py
new file mode 100644
index 0000000..f726042
--- /dev/null
+++ b/plugins/gingerbase/gingerbase.py
@@ -0,0 +1,70 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import os
+import cherrypy
+
+from wok import vnc
+from wok.i18n import messages
+from wok.root import WokRoot
+
+import config
+import mockmodel
+from control import sub_nodes
+from model import model as gingerBaseModel
+
+
+class GingerBase(WokRoot):
+ def __init__(self, wok_options):
+ if hasattr(wok_options, "model"):
+ self.model = wok_options.model
+ elif wok_options.test:
+ self.model = mockmodel.MockModel()
+ else:
+ self.model = gingerBaseModel.Model()
+
+ dev_env = wok_options.environment != 'production'
+ super(GingerBase, self).__init__(self.model, dev_env)
+
+ for ident, node in sub_nodes.items():
+ setattr(self, ident, node(self.model))
+
+ if isinstance(self.model, gingerBaseModel.Model):
+ vnc_ws_proxy = vnc.new_ws_proxy()
+ cherrypy.engine.subscribe('exit', vnc_ws_proxy.terminate)
+
+ self.api_schema = json.load(open(os.path.join(os.path.dirname(
+ os.path.abspath(__file__)), 'API.json')))
+ self.paths = config.kimchiPaths
+ self.domain = 'gingerbase'
+ self.messages = messages
+
+ make_dirs = [
+ # os.path.abspath(config.get_distros_store()),
+ os.path.abspath(config.get_debugreports_path()),
+ # os.path.abspath(config.get_screenshot_path())
+ ]
+ for directory in make_dirs:
+ if not os.path.isdir(directory):
+ os.makedirs(directory)
+
+ def get_custom_conf(self):
+ return config.KimchiConfig()
+
diff --git a/plugins/gingerbase/i18n.py b/plugins/gingerbase/i18n.py
new file mode 100644
index 0000000..249d170
--- /dev/null
+++ b/plugins/gingerbase/i18n.py
@@ -0,0 +1,96 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import gettext
+
+_ = gettext.gettext
+
+
+messages = {
+ "GGBAPI0001E": _("Unknown parameter %(value)s"),
+
+ "GGBASYNC0001E": _("Timeout of %(seconds)s seconds expired while running task '%(task)s."),
+
+ "GGBDISKS0001E": _("Error while getting block devices. Details: %(err)s"),
+ "GGBDISKS0002E": _("Error while getting block device information for %(device)s."),
+
+ "GGBDR0001E": _("Debug report %(name)s does not exist"),
+ "GGBDR0002E": _("Debug report tool not found in system"),
+ "GGBDR0003E": _("Unable to create debug report %(name)s. Details: %(err)s."),
+ "GGBDR0004E": _("Can not find any debug report with the given name %(name)s"),
+ "GGBDR0005E": _("Unable to generate debug report %(name)s. Details: %(err)s"),
+ "GGBDR0006E": _("You should give a name for the debug report file."),
+ "GGBDR0007E": _("Debug report name must be a string. Only letters, digits, underscore ('_') and hyphen ('-') are allowed."),
+ "GGBDR0008E": _("The debug report with specified name \"%(name)s\" already exists. Please use another one."),
+
+ "GGBPART0001E": _("Partition %(name)s does not exist in the host"),
+
+ "GGBHOST0001E": _("Unable to shutdown host machine as there are running virtual machines"),
+ "GGBHOST0002E": _("Unable to reboot host machine as there are running virtual machines"),
+ "GGBHOST0003E": _("Node device '%(name)s' not found"),
+ "GGBHOST0004E": _("Conflicting flag filters specified."),
+ "GGBHOST0005E": _("When specifying CPU topology, each element must be an integer greater than zero."),
+
+ "GGBPKGUPD0001E": _("No packages marked for update"),
+ "GGBPKGUPD0002E": _("Package %(name)s is not marked to be updated."),
+ "GGBPKGUPD0003E": _("Error while getting packages marked to be updated. Details: %(err)s"),
+ "GGBPKGUPD0004E": _("There is no compatible package manager for this system."),
+
+
+ "GGBREPOS0001E": _("YUM Repository ID must be one word only string."),
+ "GGBREPOS0002E": _("Repository URL must be an http://, ftp:// or file:// URL."),
+ "GGBREPOS0003E": _("Repository configuration is a dictionary with specific values according to repository type."),
+ "GGBREPOS0004E": _("Distribution to DEB repository must be a string"),
+ "GGBREPOS0005E": _("Components to DEB repository must be listed in a array"),
+ "GGBREPOS0006E": _("Components to DEB repository must be a string"),
+ "GGBREPOS0007E": _("Mirror list to repository must be a string"),
+ "GGBREPOS0008E": _("YUM Repository name must be string."),
+ "GGBREPOS0009E": _("GPG check must be a boolean value."),
+ "GGBREPOS0010E": _("GPG key must be a URL pointing to the ASCII-armored file."),
+ "GGBREPOS0011E": _("Could not update repository %(repo_id)s."),
+ "GGBREPOS0012E": _("Repository %(repo_id)s does not exist."),
+ "GGBREPOS0013E": _("Specify repository base URL, mirror list or metalink in order to create or update a YUM repository."),
+ "GGBREPOS0014E": _("Repository management tool was not recognized for your system."),
+ "GGBREPOS0015E": _("Repository %(repo_id)s is already enabled."),
+ "GGBREPOS0016E": _("Repository %(repo_id)s is already disabled."),
+ "GGBREPOS0017E": _("Could not remove repository %(repo_id)s."),
+ "GGBREPOS0018E": _("Could not write repository configuration file %(repo_file)s"),
+ "GGBREPOS0019E": _("Specify repository distribution in order to create a DEB repository."),
+ "GGBREPOS0020E": _("Could not enable repository %(repo_id)s."),
+ "GGBREPOS0021E": _("Could not disable repository %(repo_id)s."),
+ "GGBREPOS0022E": _("YUM Repository ID already exists"),
+ "GGBREPOS0023E": _("YUM Repository name must be a string"),
+ "GGBREPOS0024E": _("Unable to list repositories. Details: '%(err)s'"),
+ "GGBREPOS0025E": _("Unable to retrieve repository information. Details: '%(err)s'"),
+ "GGBREPOS0026E": _("Unable to add repository. Details: '%(err)s'"),
+ "GGBREPOS0027E": _("Unable to remove repository. Details: '%(err)s'"),
+ "GGBREPOS0028E": _("Configuration items: '%(items)s' are not supported by repository manager"),
+ "GGBREPOS0029E": _("Repository metalink must be an http://, ftp:// or file:// URL."),
+ "GGBREPOS0030E": _("Cannot specify mirrorlist and metalink at the same time."),
+
+
+ "GGBCPUINF0001E": _("The number of vCPUs is too large for this system."),
+ "GGBCPUINF0002E": _("Invalid vCPU/topology combination."),
+ "GGBCPUINF0003E": _("This host (or current configuration) does not allow CPU topology."),
+ "GGBCPUINF0004E": _("This host (or current configuration) does not allow to fetch lscpu details."),
+ "GGBCPUINF0005E": _("This host (or current configuration) does not provide Socket(s) information."),
+ "GGBCPUINF0006E": _("This host (or current configuration) does not provide Core(s) per socket information."),
+ "GGBCPUINF0007E": _("This host (or current configuration) does not provide Thread(s) per core information."),
+
+}
diff --git a/plugins/gingerbase/lscpu.py b/plugins/gingerbase/lscpu.py
new file mode 100644
index 0000000..7c6a688
--- /dev/null
+++ b/plugins/gingerbase/lscpu.py
@@ -0,0 +1,122 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+import logging
+
+from wok.utils import run_command
+from wok.exception import NotFoundError
+
+
+class LsCpu(object):
+ """
+ Get CPU information about a CPU hyper threading/architecture on x86
+ """
+ def log_error(e):
+ """
+ param e: error details to be logged
+ """
+ log = logging.getLogger('Util')
+ log.warning('Exception in fetching the CPU architecture details: %s', e)
+
+ def __init__(self):
+ self.lsCpuInfo = {}
+ try:
+ # lscpu - display information about the CPU architecture
+ out, error, rc = run_command(['lscpu'])
+ # Output of lscpu on x86 is expected to be:
+ # Architecture: x86_64
+ # CPU op-mode(s): 32-bit, 64-bit
+ # Byte Order: Little Endian
+ # CPU(s): 4
+ # On-line CPU(s) list: 0-3
+ # Thread(s) per core: 2
+ # Core(s) per socket: 2
+ # Socket(s): 1
+ # NUMA node(s): 1
+ # Vendor ID: GenuineIntel
+ # CPU family: 6
+ # Model: 42
+ # Model name: Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz
+ # Stepping: 7
+ # CPU MHz: 976.421
+ # CPU max MHz: 3300.0000
+ # CPU min MHz: 800.0000
+ # BogoMIPS: 5182.99
+ # Virtualization: VT-x
+ # L1d cache: 32K
+ # L1i cache: 32K
+ # L2 cache: 256K
+ # L3 cache: 3072K
+ # NUMA node0 CPU(s): 0-3
+
+ if not rc and (not out.isspace()):
+ lscpuout = out.split('\n')
+ if lscpuout and len(lscpuout) > 0:
+ for line in lscpuout:
+ if ":" in line and (len(line.split(':')) == 2) :
+ self.lsCpuInfo[line.split(':')[0].strip()] = line.split(':')[1].strip()
+ else:
+ continue
+ except Exception, e:
+ self.log_error(e)
+ raise NotFoundError("GGBCPUINF0004E")
+
+ def get_sockets(self):
+ """
+ param self: object of the class self
+ return: Socket(s) (information about the CPU architecture)
+ """
+ try:
+ sockets = "Socket(s)"
+ if len(self.lsCpuInfo) > 0 and sockets in self.lsCpuInfo.keys():
+ return int(self.lsCpuInfo[sockets])
+ else:
+ raise NotFoundError("GGBCPUINF0005E")
+ except IndexError, e:
+ self.log_error(e)
+ raise NotFoundError("GGBCPUINF0005E")
+
+ def get_cores_per_socket(self):
+ """
+ param self: object of the class self
+ return: Core(s) per socket (information about the CPU architecture)
+ """
+ try:
+ cores_per_socket = "Core(s) per socket"
+ if len(self.lsCpuInfo) > 0 and cores_per_socket in self.lsCpuInfo.keys():
+ return int(self.lsCpuInfo[cores_per_socket])
+ else:
+ raise NotFoundError("GGBCPUINF0006E")
+ except IndexError, e:
+ self.log_error(e)
+ raise NotFoundError("GGBCPUINF0006E")
+
+ def get_threads_per_core(self):
+ """
+ param self: object of the class self
+ return: Thread(s) per core (information about the CPU architecture)
+ """
+ try:
+ threads_per_core = "Thread(s) per core"
+ if len(self.lsCpuInfo) > 0 and threads_per_core in self.lsCpuInfo.keys():
+ return int(self.lsCpuInfo[threads_per_core])
+ else:
+ raise NotFoundError("GGBCPUINF0007E")
+ except IndexError, e:
+ self.log_error(e)
+ raise NotFoundError("GGBCPUINF0007E")
diff --git a/plugins/gingerbase/mockmodel.py b/plugins/gingerbase/mockmodel.py
new file mode 100644
index 0000000..05bcb1c
--- /dev/null
+++ b/plugins/gingerbase/mockmodel.py
@@ -0,0 +1,298 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import lxml.etree as ET
+import os
+import random
+import time
+
+from wok.objectstore import ObjectStore
+from wok.utils import add_task, wok_log
+
+import config
+from model import cpuinfo
+from model.debugreports import DebugReportsModel
+from model.model import Model
+
+
+fake_user = {'root': 'letmein!'}
+mockmodel_defaults = {'domain': 'test', 'arch': 'i686'}
+
+
+class MockModel(Model):
+
+ def __init__(self, objstore_loc=None):
+ # Override osinfo.defaults to ajust the values according to
+ # test:///default driver
+
+ self._mock_devices = MockDevices()
+ self._mock_partitions = MockPartitions()
+ self._mock_swupdate = MockSoftwareUpdate()
+ self._mock_repositories = MockRepositories()
+
+ cpuinfo.get_topo_capabilities = \
+ MockModel.get_topo_capabilities
+
+ super(MockModel, self).__init__(objstore_loc)
+ self.objstore_loc = objstore_loc
+ self.objstore = ObjectStore(objstore_loc)
+
+ # The MockModel methods are instantiated on runtime according to Model
+ # and BaseModel
+ # Because that a normal method override will not work here
+ # Instead of that we also need to do the override on runtime
+ for method in dir(self):
+ if method.startswith('_mock_'):
+ mock_method = getattr(self, method)
+ if not callable(mock_method):
+ continue
+
+ m = method[6:]
+ model_method = getattr(self, m)
+ setattr(self, '_model_' + m, model_method)
+ setattr(self, m, mock_method)
+
+ DebugReportsModel._gen_debugreport_file = self._gen_debugreport_file
+
+ def reset(self):
+ self._mock_swupdate = MockSoftwareUpdate()
+ self._mock_repositories = MockRepositories()
+
+ if hasattr(self, 'objstore'):
+ self.objstore = ObjectStore(self.objstore_loc)
+
+ @staticmethod
+ def get_topo_capabilities(conn):
+ # The libvirt test driver doesn't return topology.
+ xml = "<topology sockets='1' cores='2' threads='2'/>"
+ return ET.fromstring(xml)
+
+ def _gen_debugreport_file(self, name):
+ return add_task('/plugins/gingerbase/debugreports/%s' % name, self._create_log,
+ self.objstore, name)
+
+ def _create_log(self, cb, name):
+ path = config.get_debugreports_path()
+ tmpf = os.path.join(path, name + '.tmp')
+ realf = os.path.join(path, name + '.txt')
+ length = random.randint(1000, 10000)
+ with open(tmpf, 'w') as fd:
+ while length:
+ fd.write('I am logged')
+ length = length - 1
+ os.rename(tmpf, realf)
+ cb("OK", True)
+
+ def _mock_host_shutdown(self, *name):
+ wok_log.info("The host system will be shutted down")
+
+ def _mock_host_reboot(self, *name):
+ wok_log.info("The host system will be rebooted")
+
+ def _mock_partitions_get_list(self):
+ return self._mock_partitions.partitions.keys()
+
+ def _mock_partition_lookup(self, name):
+ return self._mock_partitions.partitions[name]
+
+ def _mock_packagesupdate_get_list(self):
+ return self._mock_swupdate.pkgs.keys()
+
+ def _mock_packageupdate_lookup(self, pkg_name):
+ return self._mock_swupdate.pkgs[pkg_name]
+
+ def _mock_host_swupdate(self, args=None):
+ task_id = add_task('/plugins/gingerbase/host/swupdate', self._mock_swupdate.doUpdate,
+ self.objstore)
+ return self.task_lookup(task_id)
+
+ def _mock_repositories_get_list(self):
+ return self._mock_repositories.repos.keys()
+
+ def _mock_repositories_create(self, params):
+ # Create a repo_id if not given by user. The repo_id will follow
+ # the format kimchi_repo_<integer>, where integer is the number of
+ # seconds since the Epoch (January 1st, 1970), in UTC.
+ repo_id = params.get('repo_id', None)
+ if repo_id is None:
+ repo_id = "kimchi_repo_%s" % str(int(time.time() * 1000))
+ params.update({'repo_id': repo_id})
+
+ config = params.get('config', {})
+ info = {'repo_id': repo_id,
+ 'baseurl': params['baseurl'],
+ 'enabled': True,
+ 'config': {'repo_name': config.get('repo_name', repo_id),
+ 'gpgkey': config.get('gpgkey', []),
+ 'gpgcheck': True,
+ 'mirrorlist': params.get('mirrorlist', '')}}
+ self._mock_repositories.repos[repo_id] = info
+ return repo_id
+
+ def _mock_repository_lookup(self, repo_id):
+ return self._mock_repositories.repos[repo_id]
+
+ def _mock_repository_delete(self, repo_id):
+ del self._mock_repositories.repos[repo_id]
+
+ def _mock_repository_enable(self, repo_id):
+ self._mock_repositories.repos[repo_id]['enabled'] = True
+
+ def _mock_repository_disable(self, repo_id):
+ self._mock_repositories.repos[repo_id]['enabled'] = False
+
+ def _mock_repository_update(self, repo_id, params):
+ self._mock_repositories.repos[repo_id].update(params)
+ return repo_id
+
+class MockPartitions(object):
+ def __init__(self):
+ self.partitions = {"vdx": {"available": True, "name": "vdx",
+ "fstype": "", "path": "/dev/vdx",
+ "mountpoint": "", "type": "disk",
+ "size": "2147483648"},
+ "vdz": {"available": True, "name": "vdz",
+ "fstype": "", "path": "/dev/vdz",
+ "mountpoint": "", "type": "disk",
+ "size": "2147483648"}}
+
+
+class MockDevices(object):
+ def __init__(self):
+ self.devices = {
+ 'computer': {'device_type': 'system',
+ 'firmware': {'release_date': '01/01/2012',
+ 'vendor': 'LENOVO',
+ 'version': 'XXXXX (X.XX )'},
+ 'hardware': {'serial': 'PXXXXX',
+ 'uuid':
+ '9d660370-820f-4241-8731-5a60c97e8aa6',
+ 'vendor': 'LENOVO',
+ 'version': 'ThinkPad T420'},
+ 'name': 'computer',
+ 'parent': None,
+ 'product': '4180XXX'},
+ 'pci_0000_03_00_0': {'bus': 3,
+ 'device_type': 'pci',
+ 'domain': 0,
+ 'driver': {'name': 'iwlwifi'},
+ 'function': 0,
+ 'iommuGroup': 7,
+ 'name': 'pci_0000_03_00_0',
+ 'parent': 'computer',
+ 'path':
+ '/sys/devices/pci0000:00/0000:03:00.0',
+ 'product': {
+ 'description':
+ 'Centrino Advanced-N 6205 [Taylor Peak]',
+ 'id': '0x0085'},
+ 'slot': 0,
+ 'vendor': {'description': 'Intel Corporation',
+ 'id': '0x8086'}},
+ 'pci_0000_0d_00_0': {'bus': 13,
+ 'device_type': 'pci',
+ 'domain': 0,
+ 'driver': {'name': 'sdhci-pci'},
+ 'function': 0,
+ 'iommuGroup': 7,
+ 'name': 'pci_0000_0d_00_0',
+ 'parent': 'computer',
+ 'path':
+ '/sys/devices/pci0000:00/0000:0d:00.0',
+ 'product': {'description':
+ 'PCIe SDXC/MMC Host Controller',
+ 'id': '0xe823'},
+ 'slot': 0,
+ 'vendor': {'description': 'Ricoh Co Ltd',
+ 'id': '0x1180'}},
+ 'scsi_host0': {'adapter': {'fabric_wwn': '37df6c1efa1b4388',
+ 'type': 'fc_host',
+ 'wwnn': 'efb6563f06434a98',
+ 'wwpn': '742f32073aab45d7'},
+ 'device_type': 'scsi_host',
+ 'host': 0,
+ 'name': 'scsi_host0',
+ 'parent': 'computer',
+ 'path': '/sys/devices/pci0000:00/0000:40:00.0/0'},
+ 'scsi_host1': {'adapter': {'fabric_wwn': '542efa5dced34123',
+ 'type': 'fc_host',
+ 'wwnn': 'b7433a40c9b84092',
+ 'wwpn': '25c1f485ae42497f'},
+ 'device_type': 'scsi_host',
+ 'host': 0,
+ 'name': 'scsi_host1',
+ 'parent': 'computer',
+ 'path': '/sys/devices/pci0000:00/0000:40:00.0/1'},
+ 'scsi_host2': {'adapter': {'fabric_wwn': '5c373c334c20478d',
+ 'type': 'fc_host',
+ 'wwnn': 'f2030bec4a254e6b',
+ 'wwpn': '07dbca4164d44096'},
+ 'device_type': 'scsi_host',
+ 'host': 0,
+ 'name': 'scsi_host2',
+ 'parent': 'computer',
+ 'path': '/sys/devices/pci0000:00/0000:40:00.0/2'}}
+
+
+class MockSoftwareUpdate(object):
+ def __init__(self):
+ self.pkgs = {
+ 'udevmountd': {'repository': 'openSUSE-13.1-Update',
+ 'version': '0.81.5-14.1',
+ 'arch': 'x86_64',
+ 'package_name': 'udevmountd'},
+ 'sysconfig-network': {'repository': 'openSUSE-13.1-Extras',
+ 'version': '0.81.5-14.1',
+ 'arch': 'x86_64',
+ 'package_name': 'sysconfig-network'},
+ 'libzypp': {'repository': 'openSUSE-13.1-Update',
+ 'version': '13.9.0-10.1',
+ 'arch': 'noarch',
+ 'package_name': 'libzypp'}}
+ self._num2update = 3
+
+ def doUpdate(self, cb, params):
+ msgs = []
+ for pkg in self.pkgs.keys():
+ msgs.append("Updating package %s" % pkg)
+ cb('\n'.join(msgs))
+ time.sleep(1)
+
+ time.sleep(2)
+ msgs.append("All packages updated")
+ cb('\n'.join(msgs), True)
+
+ # After updating all packages any package should be listed to be
+ # updated, so reset self._packages
+ self.pkgs = {}
+
+
+class MockRepositories(object):
+ def __init__(self):
+ self.repos = {"kimchi_repo_1392167832":
+ {"repo_id": "kimchi_repo_1392167832",
+ "enabled": True,
+ "baseurl": "http://www.fedora.org",
+ "config": {"repo_name": "kimchi_repo_1392167832",
+ "gpgkey": [],
+ "gpgcheck": True,
+ "mirrorlist": ""}}}
+
+
+
diff --git a/plugins/gingerbase/repositories.py b/plugins/gingerbase/repositories.py
new file mode 100644
index 0000000..b99ea5f
--- /dev/null
+++ b/plugins/gingerbase/repositories.py
@@ -0,0 +1,529 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import copy
+import os
+import time
+import urlparse
+from ConfigParser import ConfigParser
+
+from wok.basemodel import Singleton
+from wok.exception import InvalidOperation, InvalidParameter
+from wok.exception import OperationFailed, NotFoundError, MissingParameter
+from wok.utils import validate_repo_url
+
+from config import kimchiLock
+from yumparser import get_yum_repositories, write_repo_to_file
+
+
+class Repositories(object):
+ __metaclass__ = Singleton
+
+ """
+ Class to represent and operate with repositories information.
+ """
+ def __init__(self):
+ try:
+ __import__('yum')
+ self._pkg_mnger = YumRepo()
+ except ImportError:
+ try:
+ __import__('apt_pkg')
+ self._pkg_mnger = AptRepo()
+ except ImportError:
+ raise InvalidOperation('GGBREPOS0014E')
+
+ def addRepository(self, params):
+ """
+ Add and enable a new repository
+ """
+ config = params.get('config', {})
+ extra_keys = list(
+ set(config.keys()).difference(set(self._pkg_mnger.CONFIG_ENTRY)))
+ if len(extra_keys) > 0:
+ raise InvalidParameter("GGBREPOS0028E",
+ {'items': ",".join(extra_keys)})
+
+ return self._pkg_mnger.addRepo(params)
+
+ def getRepositories(self):
+ """
+ Return a dictionary with all Kimchi's repositories. Each element uses
+ the format {<repo_id>: {repo}}, where repo is a dictionary in the
+ repositories.Repositories() format.
+ """
+ return self._pkg_mnger.getRepositoriesList()
+
+ def getRepository(self, repo_id):
+ """
+ Return a dictionary with all info from a given repository ID.
+ """
+ info = self._pkg_mnger.getRepo(repo_id)
+ info['repo_id'] = repo_id
+ return info
+
+ def enableRepository(self, repo_id):
+ """
+ Enable a repository.
+ """
+ return self._pkg_mnger.toggleRepo(repo_id, True)
+
+ def disableRepository(self, repo_id):
+ """
+ Disable a given repository.
+ """
+ return self._pkg_mnger.toggleRepo(repo_id, False)
+
+ def updateRepository(self, repo_id, params):
+ """
+ Update the information of a given repository.
+ The input is the repo_id of the repository to be updated and a dict
+ with the information to be updated.
+ """
+ return self._pkg_mnger.updateRepo(repo_id, params)
+
+ def removeRepository(self, repo_id):
+ """
+ Remove a given repository
+ """
+ return self._pkg_mnger.removeRepo(repo_id)
+
+
+class YumRepo(object):
+ """
+ Class to represent and operate with YUM repositories.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ TYPE = 'yum'
+ DEFAULT_CONF_DIR = "/etc/yum.repos.d"
+ CONFIG_ENTRY = ('repo_name', 'mirrorlist', 'metalink')
+
+ def __init__(self):
+ self._confdir = self.DEFAULT_CONF_DIR
+
+ def _get_repos(self, errcode):
+ try:
+ kimchiLock.acquire()
+ repos = get_yum_repositories()
+ except Exception, e:
+ kimchiLock.release()
+ raise OperationFailed(errcode, {'err': str(e)})
+ finally:
+ kimchiLock.release()
+
+ return repos
+
+ def getRepositoriesList(self):
+ """
+ Return a list of repositories IDs
+ """
+ repos = self._get_repos('GGBREPOS0024E')
+ return repos.keys()
+
+ def getRepo(self, repo_id):
+ """
+ Return a dictionary in the repositories.Repositories() of the given
+ repository ID format with the information of a YumRepository object.
+ """
+ repos = self._get_repos('GGBREPOS0025E')
+
+ if repo_id not in repos.keys():
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+
+ info = {}
+ info['enabled'] = entry.enabled
+ info['baseurl'] = entry.baseurl or ''
+ info['config'] = {}
+ info['config']['repo_name'] = entry.name or ''
+ info['config']['gpgcheck'] = entry.gpgcheck
+ info['config']['gpgkey'] = entry.gpgkey or ''
+ info['config']['mirrorlist'] = entry.mirrorlist or ''
+ info['config']['metalink'] = entry.metalink or ''
+ return info
+
+ def addRepo(self, params):
+ """
+ Add a given repository to YumBase
+ """
+ # At least one base url, or one mirror, must be given.
+ baseurl = params.get('baseurl', '')
+
+ config = params.get('config', {})
+ mirrorlist = config.get('mirrorlist', '')
+ metalink = config.get('metalink', '')
+ if not baseurl and not mirrorlist and not metalink:
+ raise MissingParameter("GGBREPOS0013E")
+
+ if baseurl:
+ validate_repo_url(baseurl)
+
+ if mirrorlist:
+ validate_repo_url(mirrorlist)
+
+ if metalink:
+ validate_repo_url(metalink)
+
+ if mirrorlist and metalink:
+ raise InvalidOperation('GGBREPOS0030E')
+
+ repo_id = params.get('repo_id', None)
+ if repo_id is None:
+ repo_id = "kimchi_repo_%s" % str(int(time.time() * 1000))
+
+ repos = self._get_repos('GGBREPOS0026E')
+ if repo_id in repos.keys():
+ raise InvalidOperation("GGBREPOS0022E", {'repo_id': repo_id})
+
+ repo_name = config.get('repo_name', repo_id)
+ repo = {'baseurl': baseurl, 'mirrorlist': mirrorlist,
+ 'name': repo_name, 'gpgcheck': 1,
+ 'gpgkey': [], 'enabled': 1, 'metalink': metalink}
+
+ # write a repo file in the system with repo{} information.
+ parser = ConfigParser()
+ parser.add_section(repo_id)
+
+ for key, value in repo.iteritems():
+ if value:
+ parser.set(repo_id, key, value)
+
+ repofile = os.path.join(self._confdir, repo_id + '.repo')
+ try:
+ with open(repofile, 'w') as fd:
+ parser.write(fd)
+ except:
+ raise OperationFailed("GGBREPOS0018E",
+ {'repo_file': repofile})
+
+ return repo_id
+
+ def toggleRepo(self, repo_id, enable):
+ repos = self._get_repos('GGBREPOS0011E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+ if enable and entry.enabled:
+ raise InvalidOperation("GGBREPOS0015E", {'repo_id': repo_id})
+
+ if not enable and not entry.enabled:
+ raise InvalidOperation("GGBREPOS0016E", {'repo_id': repo_id})
+
+ kimchiLock.acquire()
+ try:
+ if enable:
+ entry.enable()
+ else:
+ entry.disable()
+
+ write_repo_to_file(entry)
+ except:
+ if enable:
+ raise OperationFailed("GGBREPOS0020E", {'repo_id': repo_id})
+
+ raise OperationFailed("GGBREPOS0021E", {'repo_id': repo_id})
+ finally:
+ kimchiLock.release()
+
+ return repo_id
+
+ def updateRepo(self, repo_id, params):
+ """
+ Update a given repository in repositories.Repositories() format
+ """
+ repos = self._get_repos('GGBREPOS0011E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+
+ baseurl = params.get('baseurl', None)
+ config = params.get('config', {})
+ mirrorlist = config.get('mirrorlist', None)
+ metalink = config.get('metalink', None)
+
+ if baseurl is not None and len(baseurl.strip()) == 0:
+ baseurl = None
+
+ if mirrorlist is not None and len(mirrorlist.strip()) == 0:
+ mirrorlist = None
+
+ if metalink is not None and len(metalink.strip()) == 0:
+ metalink = None
+
+ if baseurl is None and mirrorlist is None and metalink is None:
+ raise MissingParameter("GGBREPOS0013E")
+
+ if baseurl is not None:
+ validate_repo_url(baseurl)
+ entry.baseurl = baseurl
+
+ if mirrorlist is not None:
+ validate_repo_url(mirrorlist)
+ entry.mirrorlist = mirrorlist
+
+ if metalink is not None:
+ validate_repo_url(metalink)
+ entry.metalink = metalink
+
+ if mirrorlist and metalink:
+ raise InvalidOperation('GGBREPOS0030E')
+
+ entry.id = params.get('repo_id', repo_id)
+ entry.name = config.get('repo_name', entry.name)
+ entry.gpgcheck = config.get('gpgcheck', entry.gpgcheck)
+ entry.gpgkey = config.get('gpgkey', entry.gpgkey)
+ kimchiLock.acquire()
+ write_repo_to_file(entry)
+ kimchiLock.release()
+ return repo_id
+
+ def removeRepo(self, repo_id):
+ """
+ Remove a given repository
+ """
+ repos = self._get_repos('GGBREPOS0027E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+ parser = ConfigParser()
+ with open(entry.repofile) as fd:
+ parser.readfp(fd)
+
+ if len(parser.sections()) == 1:
+ os.remove(entry.repofile)
+ return
+
+ parser.remove_section(repo_id)
+ with open(entry.repofile, "w") as fd:
+ parser.write(fd)
+
+
+class AptRepo(object):
+ """
+ Class to represent and operate with YUM repositories.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ TYPE = 'deb'
+ KIMCHI_LIST = "kimchi-source.list"
+ CONFIG_ENTRY = ('dist', 'comps')
+
+ def __init__(self):
+ getattr(__import__('apt_pkg'), 'init_config')()
+ getattr(__import__('apt_pkg'), 'init_system')()
+ config = getattr(__import__('apt_pkg'), 'config')
+ self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
+ module = __import__('aptsources.sourceslist', globals(), locals(),
+ ['SourcesList'], -1)
+
+ self._sourceparts_path = '/%s%s' % (
+ config.get('Dir::Etc'), config.get('Dir::Etc::sourceparts'))
+ self._sourceslist = getattr(module, 'SourcesList')
+ self.filename = os.path.join(self._sourceparts_path, self.KIMCHI_LIST)
+ if not os.path.exists(self.filename):
+ with open(self.filename, 'w') as fd:
+ fd.write("# This file is managed by Kimchi and it must not "
+ "be modified manually\n")
+
+ def _get_repos(self):
+ try:
+ with self.pkg_lock():
+ repos = self._sourceslist()
+ repos.refresh()
+ except Exception, e:
+ kimchiLock.release()
+ raise OperationFailed('GGBREPOS0025E', {'err': e.message})
+
+ return repos
+
+ def _get_repo_id(self, repo):
+ data = urlparse.urlparse(repo.uri)
+ name = data.hostname or data.path
+ return '%s-%s-%s' % (name, repo.dist, "-".join(repo.comps))
+
+ def _get_source_entry(self, repo_id):
+ kimchiLock.acquire()
+ repos = self._get_repos()
+ kimchiLock.release()
+
+ for r in repos:
+ # Ignore deb-src repositories
+ if r.type != 'deb':
+ continue
+
+ if self._get_repo_id(r) != repo_id:
+ continue
+
+ return r
+
+ return None
+
+ def getRepositoriesList(self):
+ """
+ Return a list of repositories IDs
+
+ APT repositories there aren't the concept about repository ID, so for
+ internal control, the repository ID will be built as described in
+ _get_repo_id()
+ """
+ kimchiLock.acquire()
+ repos = self._get_repos()
+ kimchiLock.release()
+
+ res = []
+ for r in repos:
+ # Ignore deb-src repositories
+ if r.type != 'deb':
+ continue
+
+ res.append(self._get_repo_id(r))
+
+ return res
+
+ def getRepo(self, repo_id):
+ """
+ Return a dictionary in the repositories.Repositories() format of the
+ given repository ID with the information of a SourceEntry object.
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ info = {'enabled': not r.disabled,
+ 'baseurl': r.uri,
+ 'config': {'dist': r.dist,
+ 'comps': r.comps}}
+ return info
+
+ def addRepo(self, params):
+ """
+ Add a new APT repository based on <params>
+ """
+ # To create a APT repository the dist is a required parameter
+ # (in addition to baseurl, verified on controller through API.json)
+ config = params.get('config', None)
+ if config is None:
+ raise MissingParameter("GGBREPOS0019E")
+
+ if 'dist' not in config.keys():
+ raise MissingParameter("GGBREPOS0019E")
+
+ uri = params['baseurl']
+ dist = config['dist']
+ comps = config.get('comps', [])
+
+ validate_repo_url(uri)
+
+ kimchiLock.acquire()
+ try:
+ repos = self._get_repos()
+ source_entry = repos.add('deb', uri, dist, comps,
+ file=self.filename)
+ with self.pkg_lock():
+ repos.save()
+ except Exception as e:
+ kimchiLock.release()
+ raise OperationFailed("GGBREPOS0026E", {'err': e.message})
+ kimchiLock.release()
+ return self._get_repo_id(source_entry)
+
+ def toggleRepo(self, repo_id, enable):
+ """
+ Enable a given repository
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ if enable and not r.disabled:
+ raise InvalidOperation("GGBREPOS0015E", {'repo_id': repo_id})
+
+ if not enable and r.disabled:
+ raise InvalidOperation("GGBREPOS0016E", {'repo_id': repo_id})
+
+ if enable:
+ line = 'deb'
+ else:
+ line = '#deb'
+
+ kimchiLock.acquire()
+ try:
+ repos = self._get_repos()
+ with self.pkg_lock():
+ repos.remove(r)
+ repos.add(line, r.uri, r.dist, r.comps, file=self.filename)
+ repos.save()
+ except:
+ kimchiLock.release()
+ if enable:
+ raise OperationFailed("GGBREPOS0020E", {'repo_id': repo_id})
+
+ raise OperationFailed("GGBREPOS0021E", {'repo_id': repo_id})
+ finally:
+ kimchiLock.release()
+
+ return repo_id
+
+ def updateRepo(self, repo_id, params):
+ """
+ Update a given repository in repositories.Repositories() format
+ """
+ old_info = self.getRepo(repo_id)
+ updated_info = copy.deepcopy(old_info)
+ updated_info['baseurl'] = params.get(
+ 'baseurl', updated_info['baseurl'])
+
+ if 'config' in params.keys():
+ config = params['config']
+ updated_info['config']['dist'] = config.get(
+ 'dist', old_info['config']['dist'])
+ updated_info['config']['comps'] = config.get(
+ 'comps', old_info['config']['comps'])
+
+ self.removeRepo(repo_id)
+ try:
+ return self.addRepo(updated_info)
+ except:
+ self.addRepo(old_info)
+ raise
+
+ def removeRepo(self, repo_id):
+ """
+ Remove a given repository
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("GGBREPOS0012E", {'repo_id': repo_id})
+
+ kimchiLock.acquire()
+ try:
+ repos = self._get_repos()
+ with self.pkg_lock():
+ repos.remove(r)
+ repos.save()
+ except:
+ kimchiLock.release()
+ raise OperationFailed("GGBREPOS0017E", {'repo_id': repo_id})
+ finally:
+ kimchiLock.release()
diff --git a/plugins/gingerbase/swupdate.py b/plugins/gingerbase/swupdate.py
new file mode 100644
index 0000000..b26d1f5
--- /dev/null
+++ b/plugins/gingerbase/swupdate.py
@@ -0,0 +1,263 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import subprocess
+import time
+
+from wok.basemodel import Singleton
+from wok.exception import NotFoundError, OperationFailed
+from wok.utils import run_command, wok_log
+
+from config import kimchiLock
+from yumparser import get_yum_packages_list_update
+
+
+class SoftwareUpdate(object):
+ __metaclass__ = Singleton
+
+ """
+ Class to represent and operate with OS software update.
+ """
+ def __init__(self):
+ # This stores all packages to be updated for Kimchi perspective. It's a
+ # dictionary of dictionaries, in the format {'package_name': package},
+ # where:
+ # package = {'package_name': <string>, 'version': <string>,
+ # 'arch': <string>, 'repository': <string>
+ # }
+ self._packages = {}
+
+ # This stores the number of packages to update
+ self._num2update = 0
+
+ # Get the distro of host machine and creates an object related to
+ # correct package management system
+ try:
+ __import__('yum')
+ wok_log.info("Loading YumUpdate features.")
+ self._pkg_mnger = YumUpdate()
+ except ImportError:
+ try:
+ __import__('apt')
+ wok_log.info("Loading AptUpdate features.")
+ self._pkg_mnger = AptUpdate()
+ except ImportError:
+ zypper_help = ["zypper", "--help"]
+ (stdout, stderr, returncode) = run_command(zypper_help)
+ if returncode == 0:
+ wok_log.info("Loading ZypperUpdate features.")
+ self._pkg_mnger = ZypperUpdate()
+ else:
+ raise Exception("There is no compatible package manager "
+ "for this system.")
+
+ def _scanUpdates(self):
+ """
+ Update self._packages with packages to be updated.
+ """
+ self._packages = {}
+ self._num2update = 0
+
+ # Call system pkg_mnger to get the packages as list of dictionaries.
+ for pkg in self._pkg_mnger.getPackagesList():
+
+ # Check if already exist a package in self._packages
+ pkg_id = pkg.get('package_name')
+ if pkg_id in self._packages.keys():
+ # package already listed to update. do nothing
+ continue
+
+ # Update the self._packages and self._num2update
+ self._packages[pkg_id] = pkg
+ self._num2update = self._num2update + 1
+
+ def getUpdates(self):
+ """
+ Return the self._packages.
+ """
+ self._scanUpdates()
+ return self._packages
+
+ def getUpdate(self, name):
+ """
+ Return a dictionary with all info from a given package name.
+ """
+ if name not in self._packages.keys():
+ raise NotFoundError('GGBPKGUPD0002E', {'name': name})
+
+ return self._packages[name]
+
+ def getNumOfUpdates(self):
+ """
+ Return the number of packages to be updated.
+ """
+ self._scanUpdates()
+ return self._num2update
+
+ def doUpdate(self, cb, params):
+ """
+ Execute the update
+ """
+ # reset messages
+ cb('')
+
+ cmd = self._pkg_mnger.update_cmd
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ msgs = []
+ while proc.poll() is None:
+ msgs.append(proc.stdout.readline())
+ cb(''.join(msgs))
+ time.sleep(0.5)
+
+ # read the final output lines
+ msgs.extend(proc.stdout.readlines())
+
+ retcode = proc.poll()
+ if retcode == 0:
+ return cb(''.join(msgs), True)
+
+ msgs.extend(proc.stderr.readlines())
+ return cb(''.join(msgs), False)
+
+
+class YumUpdate(object):
+ """
+ Class to represent and operate with YUM software update system.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.update_cmd = ["yum", "-y", "update"]
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ try:
+ kimchiLock.acquire()
+ self._pkgs = get_yum_packages_list_update()
+ except Exception, e:
+ raise OperationFailed('GGBPKGUPD0003E', {'err': str(e)})
+ finally:
+ kimchiLock.release()
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format:
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ self._refreshUpdateList()
+ pkg_list = []
+ for pkg in self._pkgs:
+ package = {'package_name': pkg.name, 'version': pkg.version,
+ 'arch': pkg.arch, 'repository': pkg.ui_from_repo}
+ pkg_list.append(package)
+ return pkg_list
+
+
+class AptUpdate(object):
+ """
+ Class to represent and operate with APT software update system.
+ It's loaded only on those systems listed at APT_DISTROS and loads necessary
+ modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
+ self.update_cmd = ['apt-get', 'upgrade', '-y']
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ apt_cache = getattr(__import__('apt'), 'Cache')()
+ try:
+ with self.pkg_lock():
+ apt_cache.update()
+ apt_cache.upgrade()
+ self._pkgs = apt_cache.get_changes()
+ except Exception, e:
+ kimchiLock.release()
+ raise OperationFailed('GGBPKGUPD0003E', {'err': e.message})
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ kimchiLock.acquire()
+ self._refreshUpdateList()
+ kimchiLock.release()
+ pkg_list = []
+ for pkg in self._pkgs:
+ package = {'package_name': pkg.shortname,
+ 'version': pkg.candidate.version,
+ 'arch': pkg._pkg.architecture,
+ 'repository': pkg.candidate.origins[0].label}
+ pkg_list.append(package)
+
+ return pkg_list
+
+
+class ZypperUpdate(object):
+ """
+ Class to represent and operate with Zypper software update system.
+ It's loaded only on those systems listed at ZYPPER_DISTROS and loads
+ necessary modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.update_cmd = ["zypper", "--non-interactive", "update",
+ "--auto-agree-with-licenses"]
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ self._pkgs = []
+ cmd = ["zypper", "list-updates"]
+ (stdout, stderr, returncode) = run_command(cmd)
+
+ if len(stderr) > 0:
+ raise OperationFailed('GGBPKGUPD0003E', {'err': stderr})
+
+ for line in stdout.split('\n'):
+ if line.find('v |') >= 0:
+ info = line.split(' | ')
+ package = {'package_name': info[2], 'version': info[4],
+ 'arch': info[5], 'repository': info[1]}
+ self._pkgs.append(package)
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ kimchiLock.acquire()
+ self._refreshUpdateList()
+ kimchiLock.release()
+ return self._pkgs
diff --git a/plugins/gingerbase/yumparser.py b/plugins/gingerbase/yumparser.py
new file mode 100644
index 0000000..74f9fa0
--- /dev/null
+++ b/plugins/gingerbase/yumparser.py
@@ -0,0 +1,283 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import subprocess
+from os import listdir
+from os.path import isfile, splitext
+
+
+class YumRepoObject(object):
+
+ def __init__(self, repo_id, repofile):
+ self.repo_id = repo_id
+ self.name = None
+ self.baseurl = None
+ self.enabled = True
+ self.gpgcheck = True
+ self.gpgkey = None
+ self.metalink = None
+ self.mirrorlist = None
+ self.repofile = repofile
+ self.string_attrs = ['baseurl', 'gpgkey', 'name',
+ 'metalink', 'mirrorlist']
+ self.boolean_attrs = ['enabled', 'gpgcheck']
+
+ def set_attribute(self, key, strvalue):
+ if key in self.string_attrs:
+ setattr(self, key, strvalue)
+ elif key in self.boolean_attrs:
+ setattr(self, key, (strvalue == '1'))
+
+ def get_attribute_str(self, key):
+ if key not in self.get_attributes():
+ return None
+
+ if key in self.boolean_attrs:
+ str_value = '1' if getattr(self, key) is True else '0'
+ else:
+ str_value = getattr(self, key)
+
+ if str_value is None:
+ return None
+
+ return key + '=' + str_value
+
+ def get_attributes(self):
+ return self.string_attrs + self.boolean_attrs
+
+ def enable(self):
+ self.enabled = True
+
+ def disable(self):
+ self.enabled = False
+
+ def __str__(self):
+ str_obj = '[' + self.repo_id + ']' + '\n'
+ for key in self.get_attributes():
+ if self.get_attribute_str(key) is not None:
+ str_obj += self.get_attribute_str(key) + '\n'
+ return str_obj
+
+
+def get_repo_files():
+ def _is_repository_file(f):
+ _, f_extension = splitext(f)
+ return isfile(f) and (f_extension == '.repo')
+
+ YUM_REPO_DIR = '/etc/yum.repos.d'
+ return [YUM_REPO_DIR+'/'+f for f in listdir(YUM_REPO_DIR)
+ if _is_repository_file(YUM_REPO_DIR+'/'+f)]
+
+
+def _ignore_line_repo_file(line):
+ return line.startswith("#") or '=' not in line
+
+
+def _get_repos_from_file(repo_file):
+ repos_from_file = {}
+ current_repo = None
+ current_repo_id = None
+ with open(repo_file) as f:
+ for line in f.readlines():
+ line = line.strip()
+ if line.startswith("["):
+ if current_repo is not None:
+ repos_from_file[current_repo_id] = current_repo
+ current_repo_id = line.strip('[]')
+ current_repo = YumRepoObject(current_repo_id, repo_file)
+ continue
+ if _ignore_line_repo_file(line):
+ continue
+ key, value = line.split('=', 1)
+ key = key.strip()
+ value = value.strip()
+ current_repo.set_attribute(key, value)
+
+ # add the last repo from file.
+ if current_repo is not None:
+ repos_from_file[current_repo_id] = current_repo
+
+ return repos_from_file
+
+
+def get_yum_repositories():
+ repo_files = get_repo_files()
+ repos = {}
+ for yum_repo in repo_files:
+ repos.update(_get_repos_from_file(yum_repo))
+
+ return repos
+
+
+def _retrieve_repo_line_index(data, repo):
+ repo_entry = '[' + repo.repo_id + ']\n'
+ try:
+ repo_index = data.index(repo_entry)
+ except:
+ return None
+ return repo_index
+
+
+def _update_repo_file_data(data, repo, repo_index):
+ remaining_repo_attrs = repo.get_attributes()
+
+ for i in range(repo_index + 1, len(data)):
+ line = data[i].strip()
+ if line.startswith('['):
+ break
+ if _ignore_line_repo_file(line):
+ continue
+ key, _ = line.split('=', 1)
+ key = key.strip()
+ attr_str = repo.get_attribute_str(key)
+ if attr_str is None:
+ continue
+ remaining_repo_attrs.remove(key)
+ data[i] = attr_str + '\n'
+
+ for attr in remaining_repo_attrs:
+ attr_str = repo.get_attribute_str(attr)
+ if attr_str is None:
+ continue
+ data.insert(repo_index+1, attr_str + '\n')
+
+ return data
+
+
+def write_repo_to_file(repo):
+ with open(repo.repofile) as f:
+ data = f.readlines()
+
+ repo_index = _retrieve_repo_line_index(data, repo)
+ if repo_index is None:
+ return
+
+ data = _update_repo_file_data(data, repo, repo_index)
+
+ with open(repo.repofile, 'w') as f:
+ f.writelines(data)
+
+
+def _get_last_line_repo(data, repo_index):
+ stop_delete_index = None
+ for i in range(repo_index+1, len(data)):
+ line = data[i].strip()
+ if line.startswith('['):
+ stop_delete_index = i - 1
+ break
+ if stop_delete_index is None:
+ stop_delete_index = len(data) - 1
+
+ return stop_delete_index
+
+
+def _remove_repo_file_data(data, repo_index):
+ last_line_repo = _get_last_line_repo(data, repo_index)
+ for i in range(last_line_repo, repo_index - 1, -1):
+ data.pop(i)
+ return data
+
+
+def delete_repo_from_file(repo):
+ with open(repo.repofile) as f:
+ data = f.readlines()
+
+ repo_index = _retrieve_repo_line_index(data, repo)
+ if repo_index is None:
+ return
+
+ data = _remove_repo_file_data(data, repo_index)
+
+ with open(repo.repofile, 'w') as f:
+ f.writelines(data)
+
+
+class YumUpdatePackageObject(object):
+
+ def __init__(self, name, arch, version, repo):
+ self.name = name
+ self.arch = arch
+ self.version = version
+ self.ui_from_repo = repo
+
+
+def _include_line_checkupdate_output(line):
+ tokens = line.split()
+
+ if len(tokens) != 3:
+ return False
+
+ if '.' not in tokens[0]:
+ return False
+
+ return True
+
+
+def _ignore_obsoleting_packages_in(output):
+ out = ''
+ for l in output.split('\n'):
+ if 'Obsoleting ' in l:
+ break
+ out += l + '\n'
+ return out
+
+
+def _filter_lines_checkupdate_output(output):
+ if output is None:
+ return []
+
+ output = _ignore_obsoleting_packages_in(output)
+
+ out = [l for l in output.split('\n')
+ if _include_line_checkupdate_output(l)]
+ return out
+
+
+def _get_yum_checkupdate_output():
+ cmd = ['yum', 'check-update', '-d0']
+ yum_update_cmd = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ out, error = yum_update_cmd.communicate()
+ return_code = yum_update_cmd.returncode
+ if return_code == 1:
+ return None
+
+ return out
+
+
+def get_yum_packages_list_update(checkupdate_output=None):
+ if checkupdate_output is None:
+ checkupdate_output = _get_yum_checkupdate_output()
+
+ filtered_output = _filter_lines_checkupdate_output(checkupdate_output)
+
+ packages = []
+ for line in filtered_output:
+ line = line.split()
+ index = 0
+ name_arch = line[index]
+ index += 1
+ version = line[index]
+ index += 1
+ repo = line[index]
+ name, arch = name_arch.rsplit('.', 1)
+ packages.append(YumUpdatePackageObject(name, arch, version, repo))
+
+ return packages
diff --git a/plugins/kimchi/disks.py b/plugins/kimchi/disks.py
deleted file mode 100644
index eb40e3a..0000000
--- a/plugins/kimchi/disks.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import os.path
-import re
-import subprocess
-from parted import Device as PDevice
-from parted import Disk as PDisk
-
-from wok.exception import OperationFailed
-from wok.utils import wok_log
-
-
-def _get_dev_node_path(maj_min):
- """ Returns device node path given the device number 'major:min' """
-
- dm_name = "/sys/dev/block/%s/dm/name" % maj_min
- if os.path.exists(dm_name):
- with open(dm_name) as dm_f:
- content = dm_f.read().rstrip('\n')
- return "/dev/mapper/" + content
-
- uevent = "/sys/dev/block/%s/uevent" % maj_min
- with open(uevent) as ueventf:
- content = ueventf.read()
-
- data = dict(re.findall(r'(\S+)=(".*?"|\S+)', content.replace("\n", " ")))
-
- return "/dev/%s" % data["DEVNAME"]
-
-
-def _get_lsblk_devs(keys, devs=[]):
- lsblk = subprocess.Popen(
- ["lsblk", "-Pbo"] + [','.join(keys)] + devs,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = lsblk.communicate()
- if lsblk.returncode != 0:
- raise OperationFailed("KCHDISKS0001E", {'err': err})
-
- return _parse_lsblk_output(out, keys)
-
-
-def _get_dev_major_min(name):
- maj_min = None
-
- keys = ["NAME", "MAJ:MIN"]
- dev_list = _get_lsblk_devs(keys)
-
- for dev in dev_list:
- if dev['name'].split()[0] == name:
- maj_min = dev['maj:min']
- break
- else:
- raise OperationFailed("KCHDISKS0002E", {'device': name})
-
- return maj_min
-
-
-def _is_dev_leaf(devNodePath):
- try:
- # By default, lsblk prints a device information followed by children
- # device information
- childrenCount = len(
- _get_lsblk_devs(["NAME"], [devNodePath])) - 1
- except OperationFailed as e:
- # lsblk is known to fail on multipath devices
- # Assume these devices contain children
- wok_log.error(
- "Error getting device info for %s: %s", devNodePath, e)
- return False
-
- return childrenCount == 0
-
-
-def _is_dev_extended_partition(devType, devNodePath):
- if devType != 'part':
- return False
- diskPath = devNodePath.rstrip('0123456789')
- device = PDevice(diskPath)
- try:
- extended_part = PDisk(device).getExtendedPartition()
- except NotImplementedError as e:
- wok_log.warning(
- "Error getting extended partition info for dev %s type %s: %s",
- devNodePath, devType, e.message)
- # Treate disk with unsupported partiton table as if it does not
- # contain extended partitions.
- return False
- if extended_part and extended_part.path == devNodePath:
- return True
- return False
-
-
-def _parse_lsblk_output(output, keys):
- # output is on format key="value",
- # where key can be NAME, TYPE, FSTYPE, SIZE, MOUNTPOINT, etc
- lines = output.rstrip("\n").split("\n")
- r = []
- for line in lines:
- d = {}
- for key in keys:
- expression = r"%s=\".*?\"" % key
- match = re.search(expression, line)
- field = match.group()
- k, v = field.split('=', 1)
- d[k.lower()] = v[1:-1]
- r.append(d)
- return r
-
-
-def _get_vgname(devNodePath):
- """ Return volume group name of a physical volume. If the device node path
- is not a physical volume, return empty string. """
- pvs = subprocess.Popen(
- ["pvs", "--unbuffered", "--nameprefixes", "--noheadings",
- "-o", "vg_name", devNodePath],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = pvs.communicate()
- if pvs.returncode != 0:
- return ""
-
- return re.findall(r"LVM2_VG_NAME='([^\']*)'", out)[0]
-
-
-def _is_available(name, devtype, fstype, mountpoint, majmin):
- devNodePath = _get_dev_node_path(majmin)
- # Only list unmounted and unformated and leaf and (partition or disk)
- # leaf means a partition, a disk has no partition, or a disk not held
- # by any multipath device. Physical volume belongs to no volume group
- # is also listed. Extended partitions should not be listed.
- if (devtype in ['part', 'disk', 'mpath'] and
- fstype in ['', 'LVM2_member'] and
- mountpoint == "" and
- _get_vgname(devNodePath) == "" and
- _is_dev_leaf(devNodePath) and
- not _is_dev_extended_partition(devtype, devNodePath)):
- return True
- return False
-
-
-def get_partitions_names(check=False):
- names = set()
- keys = ["NAME", "TYPE", "FSTYPE", "MOUNTPOINT", "MAJ:MIN"]
- # output is on format key="value",
- # where key can be NAME, TYPE, FSTYPE, MOUNTPOINT
- for dev in _get_lsblk_devs(keys):
- # split()[0] to avoid the second part of the name, after the
- # whiteline
- name = dev['name'].split()[0]
- if check and not _is_available(name, dev['type'], dev['fstype'],
- dev['mountpoint'], dev['maj:min']):
- continue
- names.add(name)
-
- return list(names)
-
-
-def get_partition_details(name):
- majmin = _get_dev_major_min(name)
- dev_path = _get_dev_node_path(majmin)
-
- keys = ["TYPE", "FSTYPE", "SIZE", "MOUNTPOINT"]
- try:
- dev = _get_lsblk_devs(keys, [dev_path])[0]
- except OperationFailed as e:
- wok_log.error(
- "Error getting partition info for %s: %s", name, e)
- return {}
-
- dev['available'] = _is_available(name, dev['type'], dev['fstype'],
- dev['mountpoint'], majmin)
- if dev['mountpoint']:
- # Sometimes the mountpoint comes with [SWAP] or other
- # info which is not an actual mount point. Filtering it
- regexp = re.compile(r"\[.*\]")
- if regexp.search(dev['mountpoint']) is not None:
- dev['mountpoint'] = ''
- dev['path'] = dev_path
- dev['name'] = name
- return dev
diff --git a/plugins/kimchi/repositories.py b/plugins/kimchi/repositories.py
deleted file mode 100644
index 9caabc4..0000000
--- a/plugins/kimchi/repositories.py
+++ /dev/null
@@ -1,529 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import copy
-import os
-import time
-import urlparse
-from ConfigParser import ConfigParser
-
-from wok.basemodel import Singleton
-from wok.exception import InvalidOperation, InvalidParameter
-from wok.exception import OperationFailed, NotFoundError, MissingParameter
-from wok.utils import validate_repo_url
-
-from config import kimchiLock
-from yumparser import get_yum_repositories, write_repo_to_file
-
-
-class Repositories(object):
- __metaclass__ = Singleton
-
- """
- Class to represent and operate with repositories information.
- """
- def __init__(self):
- try:
- __import__('yum')
- self._pkg_mnger = YumRepo()
- except ImportError:
- try:
- __import__('apt_pkg')
- self._pkg_mnger = AptRepo()
- except ImportError:
- raise InvalidOperation('KCHREPOS0014E')
-
- def addRepository(self, params):
- """
- Add and enable a new repository
- """
- config = params.get('config', {})
- extra_keys = list(
- set(config.keys()).difference(set(self._pkg_mnger.CONFIG_ENTRY)))
- if len(extra_keys) > 0:
- raise InvalidParameter("KCHREPOS0028E",
- {'items': ",".join(extra_keys)})
-
- return self._pkg_mnger.addRepo(params)
-
- def getRepositories(self):
- """
- Return a dictionary with all Kimchi's repositories. Each element uses
- the format {<repo_id>: {repo}}, where repo is a dictionary in the
- repositories.Repositories() format.
- """
- return self._pkg_mnger.getRepositoriesList()
-
- def getRepository(self, repo_id):
- """
- Return a dictionary with all info from a given repository ID.
- """
- info = self._pkg_mnger.getRepo(repo_id)
- info['repo_id'] = repo_id
- return info
-
- def enableRepository(self, repo_id):
- """
- Enable a repository.
- """
- return self._pkg_mnger.toggleRepo(repo_id, True)
-
- def disableRepository(self, repo_id):
- """
- Disable a given repository.
- """
- return self._pkg_mnger.toggleRepo(repo_id, False)
-
- def updateRepository(self, repo_id, params):
- """
- Update the information of a given repository.
- The input is the repo_id of the repository to be updated and a dict
- with the information to be updated.
- """
- return self._pkg_mnger.updateRepo(repo_id, params)
-
- def removeRepository(self, repo_id):
- """
- Remove a given repository
- """
- return self._pkg_mnger.removeRepo(repo_id)
-
-
-class YumRepo(object):
- """
- Class to represent and operate with YUM repositories.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- TYPE = 'yum'
- DEFAULT_CONF_DIR = "/etc/yum.repos.d"
- CONFIG_ENTRY = ('repo_name', 'mirrorlist', 'metalink')
-
- def __init__(self):
- self._confdir = self.DEFAULT_CONF_DIR
-
- def _get_repos(self, errcode):
- try:
- kimchiLock.acquire()
- repos = get_yum_repositories()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed(errcode, {'err': str(e)})
- finally:
- kimchiLock.release()
-
- return repos
-
- def getRepositoriesList(self):
- """
- Return a list of repositories IDs
- """
- repos = self._get_repos('KCHREPOS0024E')
- return repos.keys()
-
- def getRepo(self, repo_id):
- """
- Return a dictionary in the repositories.Repositories() of the given
- repository ID format with the information of a YumRepository object.
- """
- repos = self._get_repos('KCHREPOS0025E')
-
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
-
- info = {}
- info['enabled'] = entry.enabled
- info['baseurl'] = entry.baseurl or ''
- info['config'] = {}
- info['config']['repo_name'] = entry.name or ''
- info['config']['gpgcheck'] = entry.gpgcheck
- info['config']['gpgkey'] = entry.gpgkey or ''
- info['config']['mirrorlist'] = entry.mirrorlist or ''
- info['config']['metalink'] = entry.metalink or ''
- return info
-
- def addRepo(self, params):
- """
- Add a given repository to YumBase
- """
- # At least one base url, or one mirror, must be given.
- baseurl = params.get('baseurl', '')
-
- config = params.get('config', {})
- mirrorlist = config.get('mirrorlist', '')
- metalink = config.get('metalink', '')
- if not baseurl and not mirrorlist and not metalink:
- raise MissingParameter("KCHREPOS0013E")
-
- if baseurl:
- validate_repo_url(baseurl)
-
- if mirrorlist:
- validate_repo_url(mirrorlist)
-
- if metalink:
- validate_repo_url(metalink)
-
- if mirrorlist and metalink:
- raise InvalidOperation('KCHREPOS0030E')
-
- repo_id = params.get('repo_id', None)
- if repo_id is None:
- repo_id = "kimchi_repo_%s" % str(int(time.time() * 1000))
-
- repos = self._get_repos('KCHREPOS0026E')
- if repo_id in repos.keys():
- raise InvalidOperation("KCHREPOS0022E", {'repo_id': repo_id})
-
- repo_name = config.get('repo_name', repo_id)
- repo = {'baseurl': baseurl, 'mirrorlist': mirrorlist,
- 'name': repo_name, 'gpgcheck': 1,
- 'gpgkey': [], 'enabled': 1, 'metalink': metalink}
-
- # write a repo file in the system with repo{} information.
- parser = ConfigParser()
- parser.add_section(repo_id)
-
- for key, value in repo.iteritems():
- if value:
- parser.set(repo_id, key, value)
-
- repofile = os.path.join(self._confdir, repo_id + '.repo')
- try:
- with open(repofile, 'w') as fd:
- parser.write(fd)
- except:
- raise OperationFailed("KCHREPOS0018E",
- {'repo_file': repofile})
-
- return repo_id
-
- def toggleRepo(self, repo_id, enable):
- repos = self._get_repos('KCHREPOS0011E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
- if enable and entry.enabled:
- raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})
-
- if not enable and not entry.enabled:
- raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})
-
- kimchiLock.acquire()
- try:
- if enable:
- entry.enable()
- else:
- entry.disable()
-
- write_repo_to_file(entry)
- except:
- if enable:
- raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})
-
- raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
-
- return repo_id
-
- def updateRepo(self, repo_id, params):
- """
- Update a given repository in repositories.Repositories() format
- """
- repos = self._get_repos('KCHREPOS0011E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
-
- baseurl = params.get('baseurl', None)
- config = params.get('config', {})
- mirrorlist = config.get('mirrorlist', None)
- metalink = config.get('metalink', None)
-
- if baseurl is not None and len(baseurl.strip()) == 0:
- baseurl = None
-
- if mirrorlist is not None and len(mirrorlist.strip()) == 0:
- mirrorlist = None
-
- if metalink is not None and len(metalink.strip()) == 0:
- metalink = None
-
- if baseurl is None and mirrorlist is None and metalink is None:
- raise MissingParameter("KCHREPOS0013E")
-
- if baseurl is not None:
- validate_repo_url(baseurl)
- entry.baseurl = baseurl
-
- if mirrorlist is not None:
- validate_repo_url(mirrorlist)
- entry.mirrorlist = mirrorlist
-
- if metalink is not None:
- validate_repo_url(metalink)
- entry.metalink = metalink
-
- if mirrorlist and metalink:
- raise InvalidOperation('KCHREPOS0030E')
-
- entry.id = params.get('repo_id', repo_id)
- entry.name = config.get('repo_name', entry.name)
- entry.gpgcheck = config.get('gpgcheck', entry.gpgcheck)
- entry.gpgkey = config.get('gpgkey', entry.gpgkey)
- kimchiLock.acquire()
- write_repo_to_file(entry)
- kimchiLock.release()
- return repo_id
-
- def removeRepo(self, repo_id):
- """
- Remove a given repository
- """
- repos = self._get_repos('KCHREPOS0027E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
- parser = ConfigParser()
- with open(entry.repofile) as fd:
- parser.readfp(fd)
-
- if len(parser.sections()) == 1:
- os.remove(entry.repofile)
- return
-
- parser.remove_section(repo_id)
- with open(entry.repofile, "w") as fd:
- parser.write(fd)
-
-
-class AptRepo(object):
- """
- Class to represent and operate with YUM repositories.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- TYPE = 'deb'
- KIMCHI_LIST = "kimchi-source.list"
- CONFIG_ENTRY = ('dist', 'comps')
-
- def __init__(self):
- getattr(__import__('apt_pkg'), 'init_config')()
- getattr(__import__('apt_pkg'), 'init_system')()
- config = getattr(__import__('apt_pkg'), 'config')
- self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
- module = __import__('aptsources.sourceslist', globals(), locals(),
- ['SourcesList'], -1)
-
- self._sourceparts_path = '/%s%s' % (
- config.get('Dir::Etc'), config.get('Dir::Etc::sourceparts'))
- self._sourceslist = getattr(module, 'SourcesList')
- self.filename = os.path.join(self._sourceparts_path, self.KIMCHI_LIST)
- if not os.path.exists(self.filename):
- with open(self.filename, 'w') as fd:
- fd.write("# This file is managed by Kimchi and it must not "
- "be modified manually\n")
-
- def _get_repos(self):
- try:
- with self.pkg_lock():
- repos = self._sourceslist()
- repos.refresh()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed('KCHREPOS0025E', {'err': e.message})
-
- return repos
-
- def _get_repo_id(self, repo):
- data = urlparse.urlparse(repo.uri)
- name = data.hostname or data.path
- return '%s-%s-%s' % (name, repo.dist, "-".join(repo.comps))
-
- def _get_source_entry(self, repo_id):
- kimchiLock.acquire()
- repos = self._get_repos()
- kimchiLock.release()
-
- for r in repos:
- # Ignore deb-src repositories
- if r.type != 'deb':
- continue
-
- if self._get_repo_id(r) != repo_id:
- continue
-
- return r
-
- return None
-
- def getRepositoriesList(self):
- """
- Return a list of repositories IDs
-
- APT repositories there aren't the concept about repository ID, so for
- internal control, the repository ID will be built as described in
- _get_repo_id()
- """
- kimchiLock.acquire()
- repos = self._get_repos()
- kimchiLock.release()
-
- res = []
- for r in repos:
- # Ignore deb-src repositories
- if r.type != 'deb':
- continue
-
- res.append(self._get_repo_id(r))
-
- return res
-
- def getRepo(self, repo_id):
- """
- Return a dictionary in the repositories.Repositories() format of the
- given repository ID with the information of a SourceEntry object.
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- info = {'enabled': not r.disabled,
- 'baseurl': r.uri,
- 'config': {'dist': r.dist,
- 'comps': r.comps}}
- return info
-
- def addRepo(self, params):
- """
- Add a new APT repository based on <params>
- """
- # To create a APT repository the dist is a required parameter
- # (in addition to baseurl, verified on controller through API.json)
- config = params.get('config', None)
- if config is None:
- raise MissingParameter("KCHREPOS0019E")
-
- if 'dist' not in config.keys():
- raise MissingParameter("KCHREPOS0019E")
-
- uri = params['baseurl']
- dist = config['dist']
- comps = config.get('comps', [])
-
- validate_repo_url(uri)
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- source_entry = repos.add('deb', uri, dist, comps,
- file=self.filename)
- with self.pkg_lock():
- repos.save()
- except Exception as e:
- kimchiLock.release()
- raise OperationFailed("KCHREPOS0026E", {'err': e.message})
- kimchiLock.release()
- return self._get_repo_id(source_entry)
-
- def toggleRepo(self, repo_id, enable):
- """
- Enable a given repository
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- if enable and not r.disabled:
- raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})
-
- if not enable and r.disabled:
- raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})
-
- if enable:
- line = 'deb'
- else:
- line = '#deb'
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- with self.pkg_lock():
- repos.remove(r)
- repos.add(line, r.uri, r.dist, r.comps, file=self.filename)
- repos.save()
- except:
- kimchiLock.release()
- if enable:
- raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})
-
- raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
-
- return repo_id
-
- def updateRepo(self, repo_id, params):
- """
- Update a given repository in repositories.Repositories() format
- """
- old_info = self.getRepo(repo_id)
- updated_info = copy.deepcopy(old_info)
- updated_info['baseurl'] = params.get(
- 'baseurl', updated_info['baseurl'])
-
- if 'config' in params.keys():
- config = params['config']
- updated_info['config']['dist'] = config.get(
- 'dist', old_info['config']['dist'])
- updated_info['config']['comps'] = config.get(
- 'comps', old_info['config']['comps'])
-
- self.removeRepo(repo_id)
- try:
- return self.addRepo(updated_info)
- except:
- self.addRepo(old_info)
- raise
-
- def removeRepo(self, repo_id):
- """
- Remove a given repository
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- with self.pkg_lock():
- repos.remove(r)
- repos.save()
- except:
- kimchiLock.release()
- raise OperationFailed("KCHREPOS0017E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
diff --git a/plugins/kimchi/swupdate.py b/plugins/kimchi/swupdate.py
deleted file mode 100644
index 84b927f..0000000
--- a/plugins/kimchi/swupdate.py
+++ /dev/null
@@ -1,263 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import subprocess
-import time
-
-from wok.basemodel import Singleton
-from wok.exception import NotFoundError, OperationFailed
-from wok.utils import run_command, wok_log
-
-from config import kimchiLock
-from yumparser import get_yum_packages_list_update
-
-
-class SoftwareUpdate(object):
- __metaclass__ = Singleton
-
- """
- Class to represent and operate with OS software update.
- """
- def __init__(self):
- # This stores all packages to be updated for Kimchi perspective. It's a
- # dictionary of dictionaries, in the format {'package_name': package},
- # where:
- # package = {'package_name': <string>, 'version': <string>,
- # 'arch': <string>, 'repository': <string>
- # }
- self._packages = {}
-
- # This stores the number of packages to update
- self._num2update = 0
-
- # Get the distro of host machine and creates an object related to
- # correct package management system
- try:
- __import__('yum')
- wok_log.info("Loading YumUpdate features.")
- self._pkg_mnger = YumUpdate()
- except ImportError:
- try:
- __import__('apt')
- wok_log.info("Loading AptUpdate features.")
- self._pkg_mnger = AptUpdate()
- except ImportError:
- zypper_help = ["zypper", "--help"]
- (stdout, stderr, returncode) = run_command(zypper_help)
- if returncode == 0:
- wok_log.info("Loading ZypperUpdate features.")
- self._pkg_mnger = ZypperUpdate()
- else:
- raise Exception("There is no compatible package manager "
- "for this system.")
-
- def _scanUpdates(self):
- """
- Update self._packages with packages to be updated.
- """
- self._packages = {}
- self._num2update = 0
-
- # Call system pkg_mnger to get the packages as list of dictionaries.
- for pkg in self._pkg_mnger.getPackagesList():
-
- # Check if already exist a package in self._packages
- pkg_id = pkg.get('package_name')
- if pkg_id in self._packages.keys():
- # package already listed to update. do nothing
- continue
-
- # Update the self._packages and self._num2update
- self._packages[pkg_id] = pkg
- self._num2update = self._num2update + 1
-
- def getUpdates(self):
- """
- Return the self._packages.
- """
- self._scanUpdates()
- return self._packages
-
- def getUpdate(self, name):
- """
- Return a dictionary with all info from a given package name.
- """
- if name not in self._packages.keys():
- raise NotFoundError('KCHPKGUPD0002E', {'name': name})
-
- return self._packages[name]
-
- def getNumOfUpdates(self):
- """
- Return the number of packages to be updated.
- """
- self._scanUpdates()
- return self._num2update
-
- def doUpdate(self, cb, params):
- """
- Execute the update
- """
- # reset messages
- cb('')
-
- cmd = self._pkg_mnger.update_cmd
- proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- msgs = []
- while proc.poll() is None:
- msgs.append(proc.stdout.readline())
- cb(''.join(msgs))
- time.sleep(0.5)
-
- # read the final output lines
- msgs.extend(proc.stdout.readlines())
-
- retcode = proc.poll()
- if retcode == 0:
- return cb(''.join(msgs), True)
-
- msgs.extend(proc.stderr.readlines())
- return cb(''.join(msgs), False)
-
-
-class YumUpdate(object):
- """
- Class to represent and operate with YUM software update system.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.update_cmd = ["yum", "-y", "update"]
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- try:
- kimchiLock.acquire()
- self._pkgs = get_yum_packages_list_update()
- except Exception, e:
- raise OperationFailed('KCHPKGUPD0003E', {'err': str(e)})
- finally:
- kimchiLock.release()
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format:
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- self._refreshUpdateList()
- pkg_list = []
- for pkg in self._pkgs:
- package = {'package_name': pkg.name, 'version': pkg.version,
- 'arch': pkg.arch, 'repository': pkg.ui_from_repo}
- pkg_list.append(package)
- return pkg_list
-
-
-class AptUpdate(object):
- """
- Class to represent and operate with APT software update system.
- It's loaded only on those systems listed at APT_DISTROS and loads necessary
- modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
- self.update_cmd = ['apt-get', 'upgrade', '-y']
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- apt_cache = getattr(__import__('apt'), 'Cache')()
- try:
- with self.pkg_lock():
- apt_cache.update()
- apt_cache.upgrade()
- self._pkgs = apt_cache.get_changes()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed('KCHPKGUPD0003E', {'err': e.message})
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- kimchiLock.acquire()
- self._refreshUpdateList()
- kimchiLock.release()
- pkg_list = []
- for pkg in self._pkgs:
- package = {'package_name': pkg.shortname,
- 'version': pkg.candidate.version,
- 'arch': pkg._pkg.architecture,
- 'repository': pkg.candidate.origins[0].label}
- pkg_list.append(package)
-
- return pkg_list
-
-
-class ZypperUpdate(object):
- """
- Class to represent and operate with Zypper software update system.
- It's loaded only on those systems listed at ZYPPER_DISTROS and loads
- necessary modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.update_cmd = ["zypper", "--non-interactive", "update",
- "--auto-agree-with-licenses"]
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- self._pkgs = []
- cmd = ["zypper", "list-updates"]
- (stdout, stderr, returncode) = run_command(cmd)
-
- if len(stderr) > 0:
- raise OperationFailed('KCHPKGUPD0003E', {'err': stderr})
-
- for line in stdout.split('\n'):
- if line.find('v |') >= 0:
- info = line.split(' | ')
- package = {'package_name': info[2], 'version': info[4],
- 'arch': info[5], 'repository': info[1]}
- self._pkgs.append(package)
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- kimchiLock.acquire()
- self._refreshUpdateList()
- kimchiLock.release()
- return self._pkgs
diff --git a/plugins/kimchi/yumparser.py b/plugins/kimchi/yumparser.py
deleted file mode 100644
index 74f9fa0..0000000
--- a/plugins/kimchi/yumparser.py
+++ /dev/null
@@ -1,283 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import subprocess
-from os import listdir
-from os.path import isfile, splitext
-
-
-class YumRepoObject(object):
-
- def __init__(self, repo_id, repofile):
- self.repo_id = repo_id
- self.name = None
- self.baseurl = None
- self.enabled = True
- self.gpgcheck = True
- self.gpgkey = None
- self.metalink = None
- self.mirrorlist = None
- self.repofile = repofile
- self.string_attrs = ['baseurl', 'gpgkey', 'name',
- 'metalink', 'mirrorlist']
- self.boolean_attrs = ['enabled', 'gpgcheck']
-
- def set_attribute(self, key, strvalue):
- if key in self.string_attrs:
- setattr(self, key, strvalue)
- elif key in self.boolean_attrs:
- setattr(self, key, (strvalue == '1'))
-
- def get_attribute_str(self, key):
- if key not in self.get_attributes():
- return None
-
- if key in self.boolean_attrs:
- str_value = '1' if getattr(self, key) is True else '0'
- else:
- str_value = getattr(self, key)
-
- if str_value is None:
- return None
-
- return key + '=' + str_value
-
- def get_attributes(self):
- return self.string_attrs + self.boolean_attrs
-
- def enable(self):
- self.enabled = True
-
- def disable(self):
- self.enabled = False
-
- def __str__(self):
- str_obj = '[' + self.repo_id + ']' + '\n'
- for key in self.get_attributes():
- if self.get_attribute_str(key) is not None:
- str_obj += self.get_attribute_str(key) + '\n'
- return str_obj
-
-
-def get_repo_files():
- def _is_repository_file(f):
- _, f_extension = splitext(f)
- return isfile(f) and (f_extension == '.repo')
-
- YUM_REPO_DIR = '/etc/yum.repos.d'
- return [YUM_REPO_DIR+'/'+f for f in listdir(YUM_REPO_DIR)
- if _is_repository_file(YUM_REPO_DIR+'/'+f)]
-
-
-def _ignore_line_repo_file(line):
- return line.startswith("#") or '=' not in line
-
-
-def _get_repos_from_file(repo_file):
- repos_from_file = {}
- current_repo = None
- current_repo_id = None
- with open(repo_file) as f:
- for line in f.readlines():
- line = line.strip()
- if line.startswith("["):
- if current_repo is not None:
- repos_from_file[current_repo_id] = current_repo
- current_repo_id = line.strip('[]')
- current_repo = YumRepoObject(current_repo_id, repo_file)
- continue
- if _ignore_line_repo_file(line):
- continue
- key, value = line.split('=', 1)
- key = key.strip()
- value = value.strip()
- current_repo.set_attribute(key, value)
-
- # add the last repo from file.
- if current_repo is not None:
- repos_from_file[current_repo_id] = current_repo
-
- return repos_from_file
-
-
-def get_yum_repositories():
- repo_files = get_repo_files()
- repos = {}
- for yum_repo in repo_files:
- repos.update(_get_repos_from_file(yum_repo))
-
- return repos
-
-
-def _retrieve_repo_line_index(data, repo):
- repo_entry = '[' + repo.repo_id + ']\n'
- try:
- repo_index = data.index(repo_entry)
- except:
- return None
- return repo_index
-
-
-def _update_repo_file_data(data, repo, repo_index):
- remaining_repo_attrs = repo.get_attributes()
-
- for i in range(repo_index + 1, len(data)):
- line = data[i].strip()
- if line.startswith('['):
- break
- if _ignore_line_repo_file(line):
- continue
- key, _ = line.split('=', 1)
- key = key.strip()
- attr_str = repo.get_attribute_str(key)
- if attr_str is None:
- continue
- remaining_repo_attrs.remove(key)
- data[i] = attr_str + '\n'
-
- for attr in remaining_repo_attrs:
- attr_str = repo.get_attribute_str(attr)
- if attr_str is None:
- continue
- data.insert(repo_index+1, attr_str + '\n')
-
- return data
-
-
-def write_repo_to_file(repo):
- with open(repo.repofile) as f:
- data = f.readlines()
-
- repo_index = _retrieve_repo_line_index(data, repo)
- if repo_index is None:
- return
-
- data = _update_repo_file_data(data, repo, repo_index)
-
- with open(repo.repofile, 'w') as f:
- f.writelines(data)
-
-
-def _get_last_line_repo(data, repo_index):
- stop_delete_index = None
- for i in range(repo_index+1, len(data)):
- line = data[i].strip()
- if line.startswith('['):
- stop_delete_index = i - 1
- break
- if stop_delete_index is None:
- stop_delete_index = len(data) - 1
-
- return stop_delete_index
-
-
-def _remove_repo_file_data(data, repo_index):
- last_line_repo = _get_last_line_repo(data, repo_index)
- for i in range(last_line_repo, repo_index - 1, -1):
- data.pop(i)
- return data
-
-
-def delete_repo_from_file(repo):
- with open(repo.repofile) as f:
- data = f.readlines()
-
- repo_index = _retrieve_repo_line_index(data, repo)
- if repo_index is None:
- return
-
- data = _remove_repo_file_data(data, repo_index)
-
- with open(repo.repofile, 'w') as f:
- f.writelines(data)
-
-
-class YumUpdatePackageObject(object):
-
- def __init__(self, name, arch, version, repo):
- self.name = name
- self.arch = arch
- self.version = version
- self.ui_from_repo = repo
-
-
-def _include_line_checkupdate_output(line):
- tokens = line.split()
-
- if len(tokens) != 3:
- return False
-
- if '.' not in tokens[0]:
- return False
-
- return True
-
-
-def _ignore_obsoleting_packages_in(output):
- out = ''
- for l in output.split('\n'):
- if 'Obsoleting ' in l:
- break
- out += l + '\n'
- return out
-
-
-def _filter_lines_checkupdate_output(output):
- if output is None:
- return []
-
- output = _ignore_obsoleting_packages_in(output)
-
- out = [l for l in output.split('\n')
- if _include_line_checkupdate_output(l)]
- return out
-
-
-def _get_yum_checkupdate_output():
- cmd = ['yum', 'check-update', '-d0']
- yum_update_cmd = subprocess.Popen(cmd,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, error = yum_update_cmd.communicate()
- return_code = yum_update_cmd.returncode
- if return_code == 1:
- return None
-
- return out
-
-
-def get_yum_packages_list_update(checkupdate_output=None):
- if checkupdate_output is None:
- checkupdate_output = _get_yum_checkupdate_output()
-
- filtered_output = _filter_lines_checkupdate_output(checkupdate_output)
-
- packages = []
- for line in filtered_output:
- line = line.split()
- index = 0
- name_arch = line[index]
- index += 1
- version = line[index]
- index += 1
- repo = line[index]
- name, arch = name_arch.rsplit('.', 1)
- packages.append(YumUpdatePackageObject(name, arch, version, repo))
-
- return packages
--
2.1.0
3
2
[PATCH 01/17] Ginger Base : Taking off the host tab functionality from kimchi
by chandra@linux.vnet.ibm.com 11 Sep '15
by chandra@linux.vnet.ibm.com 11 Sep '15
11 Sep '15
From: chandrureddy <chandra(a)linux.vnet.ibm.com>
---
plugins/kimchi/API.json | 134 ------------
plugins/kimchi/Makefile.am | 3 +-
plugins/kimchi/config.py.in | 4 -
plugins/kimchi/control/host.py | 96 ---------
plugins/kimchi/docs/README.md | 6 +-
plugins/kimchi/i18n.py | 50 -----
plugins/kimchi/kimchi.conf | 7 -
plugins/kimchi/mockmodel.py | 21 --
plugins/kimchi/model/config.py | 21 --
plugins/kimchi/model/host.py | 320 -----------------------------
plugins/kimchi/root.py | 1 -
plugins/kimchi/tests/test_authorization.py | 6 -
plugins/kimchi/tests/test_config.py.in | 8 -
plugins/kimchi/tests/test_model.py | 237 ---------------------
plugins/kimchi/tests/test_rest.py | 47 -----
plugins/kimchi/ui/config/tab-ext.xml | 7 -
plugins/kimchi/ui/js/src/kimchi.api.js | 250 ----------------------
plugins/kimchi/ui/pages/i18n.json.tmpl | 43 ----
18 files changed, 4 insertions(+), 1257 deletions(-)
diff --git a/plugins/kimchi/API.json b/plugins/kimchi/API.json
index f1f58ff..e75b35f 100644
--- a/plugins/kimchi/API.json
+++ b/plugins/kimchi/API.json
@@ -59,30 +59,6 @@
}
},
"properties": {
- "debugreports_create": {
- "type": "object",
- "error": "KCHDR0006E",
- "properties": {
- "name": {
- "description": "The name for the debug report file.",
- "type": "string",
- "pattern": "^[_A-Za-z0-9-]*$",
- "error": "KCHDR0007E"
- }
- }
- },
- "debugreport_update": {
- "type": "object",
- "properties": {
- "name": {
- "description": "New name of debug report",
- "type": "string",
- "pattern": "^[_A-Za-z0-9-]*$",
- "error": "KCHDR0007E"
- }
- },
- "additionalProperties": false
- },
"storagepools_create": {
"type": "object",
"error": "KCHPOOL0026E",
@@ -684,116 +660,6 @@
"additionalProperties": false,
"error": "KCHAPI0001E"
},
- "repositories_create": {
- "type": "object",
- "properties": {
- "repo_id": {
- "description": "Repository ID used for YUM repository.",
- "type": "string",
- "error": "KCHREPOS0001E"
- },
- "baseurl": {
- "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
- "type": "string",
- "error": "KCHREPOS0002E"
- },
- "config": {
- "description": "Dictionary containing repository configuration",
- "type": "object",
- "error": "KCHREPOS0003E",
- "properties": {
- "dist": {
- "description": "Distribution to DEB repository",
- "type": "string",
- "error": "KCHREPOS0004E"
- },
- "comps": {
- "description": "List of components to DEB repository",
- "type": "array",
- "error": "KCHREPOS0005E",
- "uniqueItems": true,
- "items": {
- "description": "Component name",
- "type": "string",
- "error": "KCHREPOS0006E"
- }
- },
- "repo_name": {
- "description": "YUM repository name",
- "type": "string",
- "error": "KCHREPOS0023E"
- },
- "mirrorlist": {
- "description": "URL to a file containing a list of baseurls",
- "type": "string",
- "error": "KCHREPOS0007E"
- },
- "metalink": {
- "description": "URL to a metalink file for the repomd.xml",
- "type": "string",
- "error": "KCHREPOS0029E"
- }
- }
- }
- },
- "additionalProperties": false,
- "error": "KCHAPI0001E"
- },
- "repository_update": {
- "type": "object",
- "properties": {
- "baseurl": {
- "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
- "type": "string",
- "error": "KCHREPOS0002E"
- },
- "config": {
- "description": "Dictionary containing repository configuration",
- "type": "object",
- "error": "KCHREPOS0003E",
- "properties": {
- "dist": {
- "description": "Distribution to DEB repository",
- "type": "string",
- "error": "KCHREPOS0004E"
- },
- "comps": {
- "description": "List of components to DEB repository",
- "type": "array",
- "error": "KCHREPOS0005E",
- "uniqueItems": true,
- "items": {
- "description": "Component name",
- "type": "string",
- "error": "KCHREPOS0006E"
- }
- },
- "repo_name": {
- "description": "Human-readable string describing the YUM repository.",
- "type": "string",
- "error": "KCHREPOS0008E"
- },
- "mirrorlist": {
- "description": "URL to a file containing a list of baseurls for YUM repository",
- "type": "string",
- "error": "KCHREPOS0007E"
- },
- "gpgcheck": {
- "description": "Indicates if a GPG signature check on the packages gotten from repository should be performed.",
- "type": "boolean",
- "error": "KCHREPOS0009E"
- },
- "gpgkey": {
- "description": "URL pointing to the ASCII-armored GPG key file for the repository.",
- "type": "string",
- "error": "KCHREPOS0010E"
- }
- }
- }
- },
- "additionalProperties": false,
- "error": "KCHAPI0001E"
- },
"devices_get_list": {
"type": "object",
"properties": {
diff --git a/plugins/kimchi/Makefile.am b/plugins/kimchi/Makefile.am
index faef341..e4a44f7 100644
--- a/plugins/kimchi/Makefile.am
+++ b/plugins/kimchi/Makefile.am
@@ -98,7 +98,6 @@ config.py: config.py.in Makefile
install-deb: install
cp -R $(top_srcdir)/contrib/DEBIAN $(DESTDIR)/
- mkdir -p $(DESTDIR)/var/lib/kimchi/debugreports
mkdir -p $(DESTDIR)/var/lib/kimchi/screenshots
mkdir -p $(DESTDIR)/var/lib/kimchi/isos
@@ -138,7 +137,7 @@ ChangeLog:
install-data-local:
$(MKDIR_P) $(DESTDIR)$(kimchidir)
$(INSTALL_DATA) API.json $(DESTDIR)$(kimchidir)/API.json
- mkdir -p $(DESTDIR)/var/lib/kimchi/{debugreports,screenshots,isos}
+ mkdir -p $(DESTDIR)/var/lib/kimchi/{screenshots,isos}
uninstall-local:
$(RM) $(DESTDIR)$(kimchidir)/API.json
diff --git a/plugins/kimchi/config.py.in b/plugins/kimchi/config.py.in
index 80b72bd..5738c4d 100644
--- a/plugins/kimchi/config.py.in
+++ b/plugins/kimchi/config.py.in
@@ -38,10 +38,6 @@ def get_distros_store():
return os.path.join(PluginPaths('kimchi').conf_dir, 'distros.d')
-def get_debugreports_path():
- return os.path.join(PluginPaths('kimchi').state_dir, 'debugreports')
-
-
def get_screenshot_path():
return os.path.join(PluginPaths('kimchi').state_dir, 'screenshots')
diff --git a/plugins/kimchi/control/host.py b/plugins/kimchi/control/host.py
index 0a40f1b..c71c47b 100644
--- a/plugins/kimchi/control/host.py
+++ b/plugins/kimchi/control/host.py
@@ -19,7 +19,6 @@
from wok.control.base import Collection, Resource, SimpleCollection
from wok.control.utils import UrlSubNode
-from wok.exception import NotFoundError
from cpuinfo import CPUInfo
@@ -31,14 +30,7 @@ class Host(Resource):
self.role_key = 'host'
self.admin_methods = ['GET', 'POST']
self.uri_fmt = '/host/%s'
- self.reboot = self.generate_action_handler('reboot')
- self.shutdown = self.generate_action_handler('shutdown')
- self.stats = HostStats(self.model)
- self.partitions = Partitions(self.model)
self.devices = Devices(self.model)
- self.packagesupdate = PackagesUpdate(self.model)
- self.repositories = Repositories(self.model)
- self.swupdate = self.generate_action_handler_task('swupdate')
self.cpuinfo = CPUInfo(self.model)
@property
@@ -46,54 +38,6 @@ class Host(Resource):
return self.info
-class HostStats(Resource):
- def __init__(self, model, id=None):
- super(HostStats, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET']
- self.history = HostStatsHistory(self.model)
-
- @property
- def data(self):
- return self.info
-
-
-class HostStatsHistory(Resource):
- @property
- def data(self):
- return self.info
-
-
-class Partitions(Collection):
- def __init__(self, model):
- super(Partitions, self).__init__(model)
- self.role_key = 'storage'
- self.admin_methods = ['GET']
- self.resource = Partition
-
- # Defining get_resources in order to return list of partitions in UI
- # sorted by their path
- def _get_resources(self, flag_filter):
- res_list = super(Partitions, self)._get_resources(flag_filter)
- res_list = filter(lambda x: x.info['available'], res_list)
- res_list.sort(key=lambda x: x.info['path'])
- return res_list
-
-
-class Partition(Resource):
- def __init__(self, model, id):
- self.role_key = 'storage'
- self.admin_methods = ['GET']
- super(Partition, self).__init__(model, id)
-
- @property
- def data(self):
- if not self.info['available']:
- raise NotFoundError("KCHPART0001E", {'name': self.info['name']})
-
- return self.info
-
-
class Devices(Collection):
def __init__(self, model):
super(Devices, self).__init__(model)
@@ -115,43 +59,3 @@ class Device(Resource):
def data(self):
return self.info
-
-class PackagesUpdate(Collection):
- def __init__(self, model):
- super(PackagesUpdate, self).__init__(model)
- self.role_key = 'host'
- self.admin_methods = ['GET']
- self.resource = PackageUpdate
-
-
-class PackageUpdate(Resource):
- def __init__(self, model, id=None):
- super(PackageUpdate, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET']
-
- @property
- def data(self):
- return self.info
-
-
-class Repositories(Collection):
- def __init__(self, model):
- super(Repositories, self).__init__(model)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'POST']
- self.resource = Repository
-
-
-class Repository(Resource):
- def __init__(self, model, id):
- super(Repository, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'PUT', 'POST', 'DELETE']
- self.uri_fmt = "/host/repositories/%s"
- self.enable = self.generate_action_handler('enable')
- self.disable = self.generate_action_handler('disable')
-
- @property
- def data(self):
- return self.info
diff --git a/plugins/kimchi/docs/README.md b/plugins/kimchi/docs/README.md
index f400333..ee6bfed 100644
--- a/plugins/kimchi/docs/README.md
+++ b/plugins/kimchi/docs/README.md
@@ -196,13 +196,13 @@ Usage
Connect your browser to https://localhost:8001. You should see a screen like:
-
+
Wok uses PAM to authenticate users so you can log in with the same username
and password that you would use to log in to the machine itself. Once logged in
you will see a screen like:
-
+
This shows you the list of running guests including a live screenshot of
the guest session. You can use the action buttons to shutdown the guests
@@ -216,7 +216,7 @@ top navigation bar.
The template screen looks like:
-
+
From this view, you can change the parameters of a template or create a
new template using the "+" button in the upper right corner.
diff --git a/plugins/kimchi/i18n.py b/plugins/kimchi/i18n.py
index 220bd24..e9699b9 100644
--- a/plugins/kimchi/i18n.py
+++ b/plugins/kimchi/i18n.py
@@ -244,31 +244,12 @@ messages = {
"KCHNET0021E": _("Failed to activate interface %(iface)s. Please check the physical link status."),
"KCHNET0022E": _("Failed to start network %(name)s. Details: %(err)s"),
- "KCHDR0001E": _("Debug report %(name)s does not exist"),
- "KCHDR0002E": _("Debug report tool not found in system"),
- "KCHDR0003E": _("Unable to create debug report %(name)s. Details: %(err)s."),
- "KCHDR0004E": _("Can not find any debug report with the given name %(name)s"),
- "KCHDR0005E": _("Unable to generate debug report %(name)s. Details: %(err)s"),
- "KCHDR0006E": _("You should give a name for the debug report file."),
- "KCHDR0007E": _("Debug report name must be a string. Only letters, digits, underscore ('_') and hyphen ('-') are allowed."),
- "KCHDR0008E": _("The debug report with specified name \"%(name)s\" already exists. Please use another one."),
-
"KCHSR0001E": _("Storage server %(server)s was not used by Kimchi"),
"KCHDISTRO0001E": _("Distro '%(name)s' does not exist"),
"KCHPART0001E": _("Partition %(name)s does not exist in the host"),
- "KCHHOST0001E": _("Unable to shutdown host machine as there are running virtual machines"),
- "KCHHOST0002E": _("Unable to reboot host machine as there are running virtual machines"),
- "KCHHOST0003E": _("Node device '%(name)s' not found"),
- "KCHHOST0004E": _("Conflicting flag filters specified."),
-
- "KCHPKGUPD0001E": _("No packages marked for update"),
- "KCHPKGUPD0002E": _("Package %(name)s is not marked to be updated."),
- "KCHPKGUPD0003E": _("Error while getting packages marked to be updated. Details: %(err)s"),
- "KCHPKGUPD0004E": _("There is no compatible package manager for this system."),
-
"KCHUTILS0001E": _("Invalid URI %(uri)s"),
"KCHUTILS0003E": _("Unable to choose a virtual machine name"),
@@ -288,37 +269,6 @@ messages = {
"KCHVMSTOR0017E": _("Only one of path or pool/volume can be specified to add a new virtual machine disk"),
"KCHVMSTOR0018E": _("Volume chosen with format %(format)s does not fit in the storage type %(type)s"),
- "KCHREPOS0001E": _("YUM Repository ID must be one word only string."),
- "KCHREPOS0002E": _("Repository URL must be an http://, ftp:// or file:// URL."),
- "KCHREPOS0003E": _("Repository configuration is a dictionary with specific values according to repository type."),
- "KCHREPOS0004E": _("Distribution to DEB repository must be a string"),
- "KCHREPOS0005E": _("Components to DEB repository must be listed in a array"),
- "KCHREPOS0006E": _("Components to DEB repository must be a string"),
- "KCHREPOS0007E": _("Mirror list to repository must be a string"),
- "KCHREPOS0008E": _("YUM Repository name must be string."),
- "KCHREPOS0009E": _("GPG check must be a boolean value."),
- "KCHREPOS0010E": _("GPG key must be a URL pointing to the ASCII-armored file."),
- "KCHREPOS0011E": _("Could not update repository %(repo_id)s."),
- "KCHREPOS0012E": _("Repository %(repo_id)s does not exist."),
- "KCHREPOS0013E": _("Specify repository base URL, mirror list or metalink in order to create or update a YUM repository."),
- "KCHREPOS0014E": _("Repository management tool was not recognized for your system."),
- "KCHREPOS0015E": _("Repository %(repo_id)s is already enabled."),
- "KCHREPOS0016E": _("Repository %(repo_id)s is already disabled."),
- "KCHREPOS0017E": _("Could not remove repository %(repo_id)s."),
- "KCHREPOS0018E": _("Could not write repository configuration file %(repo_file)s"),
- "KCHREPOS0019E": _("Specify repository distribution in order to create a DEB repository."),
- "KCHREPOS0020E": _("Could not enable repository %(repo_id)s."),
- "KCHREPOS0021E": _("Could not disable repository %(repo_id)s."),
- "KCHREPOS0022E": _("YUM Repository ID already exists"),
- "KCHREPOS0023E": _("YUM Repository name must be a string"),
- "KCHREPOS0024E": _("Unable to list repositories. Details: '%(err)s'"),
- "KCHREPOS0025E": _("Unable to retrieve repository information. Details: '%(err)s'"),
- "KCHREPOS0026E": _("Unable to add repository. Details: '%(err)s'"),
- "KCHREPOS0027E": _("Unable to remove repository. Details: '%(err)s'"),
- "KCHREPOS0028E": _("Configuration items: '%(items)s' are not supported by repository manager"),
- "KCHREPOS0029E": _("Repository metalink must be an http://, ftp:// or file:// URL."),
- "KCHREPOS0030E": _("Cannot specify mirrorlist and metalink at the same time."),
-
"KCHSNAP0001E": _("Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."),
"KCHSNAP0002E": _("Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %(err)s"),
"KCHSNAP0003E": _("Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."),
diff --git a/plugins/kimchi/kimchi.conf b/plugins/kimchi/kimchi.conf
index 78f4f3f..98a6c57 100644
--- a/plugins/kimchi/kimchi.conf
+++ b/plugins/kimchi/kimchi.conf
@@ -23,13 +23,6 @@ tools.staticdir.on = True
tools.staticdir.dir = wok.config.PluginPaths('kimchi').state_dir + '/screenshots'
tools.nocache.on = False
-[/data/debugreports]
-tools.staticdir.on = True
-tools.staticdir.dir = wok.config.PluginPaths('kimchi').state_dir + '/debugreports'
-tools.nocache.on = False
-tools.wokauth.on = True
-tools.staticdir.content_types = {'xz': 'application/x-xz'}
-
[/favicon.ico]
tools.staticfile.on = True
tools.staticfile.filename = wok.config.PluginPaths('kimchi').ui_dir + '/images/logo.ico'
diff --git a/plugins/kimchi/mockmodel.py b/plugins/kimchi/mockmodel.py
index e316c21..68acf6f 100644
--- a/plugins/kimchi/mockmodel.py
+++ b/plugins/kimchi/mockmodel.py
@@ -33,8 +33,6 @@ from wok.xmlutils.utils import xml_item_update
import config
import imageinfo
import osinfo
-from model import cpuinfo
-from model.debugreports import DebugReportsModel
from model.host import DeviceModel
from model.libvirtstoragepool import IscsiPoolDef, NetfsPoolDef
from model.libvirtstoragepool import StoragePoolDef
@@ -73,8 +71,6 @@ class MockModel(Model):
self._mock_swupdate = MockSoftwareUpdate()
self._mock_repositories = MockRepositories()
- cpuinfo.get_topo_capabilities = \
- MockModel.get_topo_capabilities
libvirt.virConnect.defineXML = MockModel.domainDefineXML
libvirt.virDomain.XMLDesc = MockModel.domainXMLDesc
libvirt.virDomain.undefine = MockModel.undefineDomain
@@ -112,7 +108,6 @@ class MockModel(Model):
StoragePoolModel._update_lvm_disks = self._update_lvm_disks
StorageVolumesModel.get_list = self._mock_storagevolumes_get_list
StorageVolumeModel.doUpload = self._mock_storagevolume_doUpload
- DebugReportsModel._gen_debugreport_file = self._gen_debugreport_file
LibvirtVMTemplate._get_volume_path = self._get_volume_path
VMTemplate.get_iso_info = self._probe_image
imageinfo.probe_image = self._probe_image
@@ -244,22 +239,6 @@ class MockModel(Model):
return MockModel._libvirt_get_vol_path(pool, vol)
- def _gen_debugreport_file(self, name):
- return add_task('/plugins/kimchi/debugreports/%s' % name, self._create_log,
- self.objstore, name)
-
- def _create_log(self, cb, name):
- path = config.get_debugreports_path()
- tmpf = os.path.join(path, name + '.tmp')
- realf = os.path.join(path, name + '.txt')
- length = random.randint(1000, 10000)
- with open(tmpf, 'w') as fd:
- while length:
- fd.write('I am logged')
- length = length - 1
- os.rename(tmpf, realf)
- cb("OK", True)
-
def _update_lvm_disks(self, pool_name, disks):
conn = self.conn.get()
pool = conn.storagePoolLookupByName(pool_name.encode('utf-8'))
diff --git a/plugins/kimchi/model/config.py b/plugins/kimchi/model/config.py
index 371e382..5c984ee 100644
--- a/plugins/kimchi/model/config.py
+++ b/plugins/kimchi/model/config.py
@@ -28,10 +28,7 @@ from wok.utils import check_url_path, run_command, wok_log
from ..config import find_qemu_binary
from ..distroloader import DistroLoader
-from ..repositories import Repositories
from ..screenshot import VMScreenshot
-from ..swupdate import SoftwareUpdate
-from debugreports import DebugReportsModel
from featuretests import FeatureTests, FEATURETEST_POOL_NAME
from featuretests import FEATURETEST_VM_NAME
@@ -116,28 +113,10 @@ class CapabilitiesModel(object):
return False
def lookup(self, *ident):
- report_tool = DebugReportsModel.get_system_report_tool()
- try:
- SoftwareUpdate()
- except Exception:
- update_tool = False
- else:
- update_tool = True
-
- try:
- repo = Repositories()
- except Exception:
- repo_mngt_tool = None
- else:
- repo_mngt_tool = repo._pkg_mnger.TYPE
-
return {'libvirt_stream_protocols': self.libvirt_stream_protocols,
'qemu_spice': self._qemu_support_spice(),
'qemu_stream': self.qemu_stream,
'screenshot': VMScreenshot.get_stream_test_result(),
- 'system_report_tool': bool(report_tool),
- 'update_tool': update_tool,
- 'repo_mngt_tool': repo_mngt_tool,
'federation': kconfig.get("server", "federation"),
'auth': kconfig.get("authentication", "method"),
'kernel_vfio': self.kernel_vfio,
diff --git a/plugins/kimchi/model/host.py b/plugins/kimchi/model/host.py
index 3ff034c..e24c686 100644
--- a/plugins/kimchi/model/host.py
+++ b/plugins/kimchi/model/host.py
@@ -18,27 +18,15 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import libvirt
-import os
-import platform
import psutil
-import time
-from cherrypy.process.plugins import BackgroundTask
-from collections import defaultdict
-from wok import netinfo
-from wok.basemodel import Singleton
from wok.exception import InvalidOperation, InvalidParameter
from wok.exception import NotFoundError, OperationFailed
-from wok.utils import add_task, wok_log
from wok.xmlutils.utils import xpath_get_text
import hostdev
-from .. import disks
-from ..repositories import Repositories
-from ..swupdate import SoftwareUpdate
from config import CapabilitiesModel
from tasks import TaskModel
-from vms import DOM_STATE_MAP
HOST_STATS_INTERVAL = 1
@@ -49,57 +37,6 @@ class HostModel(object):
self.conn = kargs['conn']
self.objstore = kargs['objstore']
self.task = TaskModel(**kargs)
- self.host_info = self._get_host_info()
-
- def _get_ppc_cpu_info(self):
- res = {}
- with open('/proc/cpuinfo') as f:
- for line in f.xreadlines():
- # Parse CPU, CPU's revision and CPU's clock information
- for key in ['cpu', 'revision', 'clock']:
- if key in line:
- info = line.split(':')[1].strip()
- if key == 'clock':
- value = float(info.split('MHz')[0].strip()) / 1000
- else:
- value = info.split('(')[0].strip()
- res[key] = value
-
- # Power machines show, for each cpu/core, a block with
- # all cpu information. Here we control the scan of the
- # necessary information (1st block provides
- # everything), skipping the function when find all
- # information.
- if len(res.keys()) == 3:
- return "%(cpu)s (%(revision)s) @ %(clock)s GHz\
- " % res
-
- return ""
-
- def _get_host_info(self):
- res = {}
- if platform.machine().startswith('ppc'):
- res['cpu_model'] = self._get_ppc_cpu_info()
- else:
- with open('/proc/cpuinfo') as f:
- for line in f.xreadlines():
- if "model name" in line:
- res['cpu_model'] = line.split(':')[1].strip()
- break
-
- res['cpus'] = 0
- res['memory'] = 0L
-
- # Include IBM PowerKVM name to supported distro names
- _sup_distros = platform._supported_dists + ('ibm_powerkvm',)
- # 'fedora' '17' 'Beefy Miracle'
- distro, version, codename = platform.linux_distribution(
- supported_dists=_sup_distros)
- res['os_distro'] = distro
- res['os_version'] = version
- res['os_codename'] = unicode(codename, "utf-8")
-
- return res
def lookup(self, *name):
cpus = psutil.NUM_CPUS
@@ -121,179 +58,6 @@ class HostModel(object):
self.host_info['memory'] = psutil.phymem_usage().total
return self.host_info
- def swupdate(self, *name):
- try:
- swupdate = SoftwareUpdate()
- except:
- raise OperationFailed('KCHPKGUPD0004E')
-
- pkgs = swupdate.getNumOfUpdates()
- if pkgs == 0:
- raise OperationFailed('KCHPKGUPD0001E')
-
- wok_log.debug('Host is going to be updated.')
- taskid = add_task('/plugins/kimchi/host/swupdate', swupdate.doUpdate,
- self.objstore, None)
- return self.task.lookup(taskid)
-
- def shutdown(self, args=None):
- # Check for running vms before shutdown
- running_vms = self._get_vms_list_by_state('running')
- if len(running_vms) > 0:
- raise OperationFailed("KCHHOST0001E")
-
- wok_log.info('Host is going to shutdown.')
- os.system('shutdown -h now')
-
- def reboot(self, args=None):
- # Find running VMs
- running_vms = self._get_vms_list_by_state('running')
- if len(running_vms) > 0:
- raise OperationFailed("KCHHOST0002E")
-
- wok_log.info('Host is going to reboot.')
- os.system('reboot')
-
- def _get_vms_list_by_state(self, state):
- conn = self.conn.get()
- return [dom.name().decode('utf-8')
- for dom in conn.listAllDomains(0)
- if (DOM_STATE_MAP[dom.info()[0]]) == state]
-
-
-class HostStatsModel(object):
- __metaclass__ = Singleton
-
- def __init__(self, **kargs):
- self.host_stats = defaultdict(list)
- self.host_stats_thread = BackgroundTask(HOST_STATS_INTERVAL,
- self._update_host_stats)
- self.host_stats_thread.start()
-
- def lookup(self, *name):
- return {'cpu_utilization': self.host_stats['cpu_utilization'][-1],
- 'memory': self.host_stats['memory'][-1],
- 'disk_read_rate': self.host_stats['disk_read_rate'][-1],
- 'disk_write_rate': self.host_stats['disk_write_rate'][-1],
- 'net_recv_rate': self.host_stats['net_recv_rate'][-1],
- 'net_sent_rate': self.host_stats['net_sent_rate'][-1]}
-
- def _update_host_stats(self):
- preTimeStamp = self.host_stats['timestamp']
- timestamp = time.time()
- # FIXME when we upgrade psutil, we can get uptime by psutil.uptime
- # we get uptime by float(open("/proc/uptime").readline().split()[0])
- # and calculate the first io_rate after the OS started.
- with open("/proc/uptime") as time_f:
- seconds = (timestamp - preTimeStamp if preTimeStamp else
- float(time_f.readline().split()[0]))
-
- self.host_stats['timestamp'] = timestamp
- self._get_host_disk_io_rate(seconds)
- self._get_host_network_io_rate(seconds)
-
- self._get_percentage_host_cpu_usage()
- self._get_host_memory_stats()
-
- # store only 60 stats (1 min)
- for key, value in self.host_stats.iteritems():
- if isinstance(value, list):
- if len(value) == 60:
- self.host_stats[key] = value[10:]
-
- def _get_percentage_host_cpu_usage(self):
- # This is cpu usage producer. This producer will calculate the usage
- # at an interval of HOST_STATS_INTERVAL.
- # The psutil.cpu_percent works as non blocking.
- # psutil.cpu_percent maintains a cpu time sample.
- # It will update the cpu time sample when it is called.
- # So only this producer can call psutil.cpu_percent in kimchi.
- self.host_stats['cpu_utilization'].append(psutil.cpu_percent(None))
-
- def _get_host_memory_stats(self):
- virt_mem = psutil.virtual_memory()
- # available:
- # the actual amount of available memory that can be given
- # instantly to processes that request more memory in bytes; this
- # is calculated by summing different memory values depending on
- # the platform (e.g. free + buffers + cached on Linux)
- memory_stats = {'total': virt_mem.total,
- 'free': virt_mem.free,
- 'cached': virt_mem.cached,
- 'buffers': virt_mem.buffers,
- 'avail': virt_mem.available}
- self.host_stats['memory'].append(memory_stats)
-
- def _get_host_disk_io_rate(self, seconds):
- disk_read_bytes = self.host_stats['disk_read_bytes']
- disk_write_bytes = self.host_stats['disk_write_bytes']
- prev_read_bytes = disk_read_bytes[-1] if disk_read_bytes else 0
- prev_write_bytes = disk_write_bytes[-1] if disk_write_bytes else 0
-
- disk_io = psutil.disk_io_counters(False)
- read_bytes = disk_io.read_bytes
- write_bytes = disk_io.write_bytes
-
- rd_rate = int(float(read_bytes - prev_read_bytes) / seconds + 0.5)
- wr_rate = int(float(write_bytes - prev_write_bytes) / seconds + 0.5)
-
- self.host_stats['disk_read_rate'].append(rd_rate)
- self.host_stats['disk_write_rate'].append(wr_rate)
- self.host_stats['disk_read_bytes'].append(read_bytes)
- self.host_stats['disk_write_bytes'].append(write_bytes)
-
- def _get_host_network_io_rate(self, seconds):
- net_recv_bytes = self.host_stats['net_recv_bytes']
- net_sent_bytes = self.host_stats['net_sent_bytes']
- prev_recv_bytes = net_recv_bytes[-1] if net_recv_bytes else 0
- prev_sent_bytes = net_sent_bytes[-1] if net_sent_bytes else 0
-
- net_ios = psutil.network_io_counters(True)
- recv_bytes = 0
- sent_bytes = 0
- for key in set(netinfo.nics() +
- netinfo.wlans()) & set(net_ios.iterkeys()):
- recv_bytes = recv_bytes + net_ios[key].bytes_recv
- sent_bytes = sent_bytes + net_ios[key].bytes_sent
-
- rx_rate = int(float(recv_bytes - prev_recv_bytes) / seconds + 0.5)
- tx_rate = int(float(sent_bytes - prev_sent_bytes) / seconds + 0.5)
-
- self.host_stats['net_recv_rate'].append(rx_rate)
- self.host_stats['net_sent_rate'].append(tx_rate)
- self.host_stats['net_recv_bytes'].append(recv_bytes)
- self.host_stats['net_sent_bytes'].append(sent_bytes)
-
-
-class HostStatsHistoryModel(object):
- def __init__(self, **kargs):
- self.history = HostStatsModel(**kargs)
-
- def lookup(self, *name):
- return {'cpu_utilization': self.history.host_stats['cpu_utilization'],
- 'memory': self.history.host_stats['memory'],
- 'disk_read_rate': self.history.host_stats['disk_read_rate'],
- 'disk_write_rate': self.history.host_stats['disk_write_rate'],
- 'net_recv_rate': self.history.host_stats['net_recv_rate'],
- 'net_sent_rate': self.history.host_stats['net_sent_rate']}
-
-
-class PartitionsModel(object):
- def __init__(self, **kargs):
- pass
-
- def get_list(self):
- result = disks.get_partitions_names()
- return result
-
-
-class PartitionModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- return disks.get_partition_details(name)
-
class DevicesModel(object):
def __init__(self, **kargs):
@@ -390,87 +154,3 @@ class DeviceModel(object):
raise NotFoundError('KCHHOST0003E', {'name': nodedev_name})
return hostdev.get_dev_info(dev)
-
-class PackagesUpdateModel(object):
- def __init__(self, **kargs):
- try:
- self.host_swupdate = SoftwareUpdate()
- except:
- self.host_swupdate = None
-
- def get_list(self):
- if self.host_swupdate is None:
- raise OperationFailed('KCHPKGUPD0004E')
-
- return self.host_swupdate.getUpdates()
-
-
-class PackageUpdateModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- try:
- swupdate = SoftwareUpdate()
- except Exception:
- raise OperationFailed('KCHPKGUPD0004E')
-
- return swupdate.getUpdate(name)
-
-
-class RepositoriesModel(object):
- def __init__(self, **kargs):
- try:
- self.host_repositories = Repositories()
- except:
- self.host_repositories = None
-
- def get_list(self):
- if self.host_repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return sorted(self.host_repositories.getRepositories())
-
- def create(self, params):
- if self.host_repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self.host_repositories.addRepository(params)
-
-
-class RepositoryModel(object):
- def __init__(self, **kargs):
- try:
- self._repositories = Repositories()
- except:
- self._repositories = None
-
- def lookup(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.getRepository(repo_id)
-
- def enable(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.enableRepository(repo_id)
-
- def disable(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.disableRepository(repo_id)
-
- def update(self, repo_id, params):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.updateRepository(repo_id, params)
-
- def delete(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.removeRepository(repo_id)
diff --git a/plugins/kimchi/root.py b/plugins/kimchi/root.py
index 20c41ca..1e4cab7 100644
--- a/plugins/kimchi/root.py
+++ b/plugins/kimchi/root.py
@@ -58,7 +58,6 @@ class KimchiRoot(WokRoot):
make_dirs = [
os.path.abspath(config.get_distros_store()),
- os.path.abspath(config.get_debugreports_path()),
os.path.abspath(config.get_screenshot_path())
]
for directory in make_dirs:
diff --git a/plugins/kimchi/tests/test_authorization.py b/plugins/kimchi/tests/test_authorization.py
index 53aa847..0976622 100644
--- a/plugins/kimchi/tests/test_authorization.py
+++ b/plugins/kimchi/tests/test_authorization.py
@@ -77,12 +77,6 @@ class AuthorizationTests(unittest.TestCase):
resp = self.request('/plugins/kimchi/host/shutdown', '{}', 'POST')
self.assertEquals(403, resp.status)
- # Non-root users can not get or debug reports
- resp = self.request('/plugins/kimchi/debugreports', '{}', 'GET')
- self.assertEquals(403, resp.status)
- resp = self.request('/plugins/kimchi/debugreports', '{}', 'POST')
- self.assertEquals(403, resp.status)
-
# Non-root users can not create or delete network (only get)
resp = self.request('/plugins/kimchi/networks', '{}', 'GET')
self.assertEquals(200, resp.status)
diff --git a/plugins/kimchi/tests/test_config.py.in b/plugins/kimchi/tests/test_config.py.in
index 6bca3df..c37069f 100644
--- a/plugins/kimchi/tests/test_config.py.in
+++ b/plugins/kimchi/tests/test_config.py.in
@@ -22,7 +22,6 @@ from cherrypy.lib.reprconf import Parser
from wok.config import Paths
-from wok.plugins.kimchi.config import get_debugreports_path
from wok.plugins.kimchi.config import get_screenshot_path
from wok.plugins.kimchi.config import KimchiPaths
@@ -167,13 +166,6 @@ class ConfigTests(unittest.TestCase):
'tools.staticdir.dir': get_screenshot_path(),
'tools.nocache.on': False
},
- '/data/debugreports': {
- 'tools.staticdir.on': True,
- 'tools.staticdir.dir': get_debugreports_path(),
- 'tools.nocache.on': False,
- 'tools.wokauth.on': True,
- 'tools.staticdir.content_types': {'xz': 'application/x-xz'}
- },
'/favicon.ico': {
'tools.staticfile.on': True,
'tools.staticfile.filename':
diff --git a/plugins/kimchi/tests/test_model.py b/plugins/kimchi/tests/test_model.py
index c70e4fb..3e95b58 100644
--- a/plugins/kimchi/tests/test_model.py
+++ b/plugins/kimchi/tests/test_model.py
@@ -943,54 +943,6 @@ class ModelTests(unittest.TestCase):
self.assertTrue('kimchi-vm' in vms)
- @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
- def test_debug_reports(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- if not inst.capabilities_lookup()['system_report_tool']:
- raise unittest.SkipTest("Without debug report tool")
-
- try:
- timeout = int(os.environ['TEST_REPORT_TIMEOUT'])
- except (ValueError, KeyError):
- timeout = 120
-
- namePrefix = 'unitTestReport'
- # sosreport always deletes unsual letters like '-' and '_' in the
- # generated report file name.
- uuidstr = str(uuid.uuid4()).translate(None, "-_")
- reportName = namePrefix + uuidstr
- try:
- inst.debugreport_delete(namePrefix + '*')
- except NotFoundError:
- pass
- with RollbackContext() as rollback:
- report_list = inst.debugreports_get_list()
- self.assertFalse(reportName in report_list)
- try:
- tmp_name = reportName + "_1"
- task = inst.debugreports_create({'name': reportName})
- rollback.prependDefer(inst.debugreport_delete, tmp_name)
- taskid = task['id']
- inst.task_wait(taskid, timeout)
- self.assertEquals('finished',
- inst.task_lookup(taskid)['status'],
- "It is not necessary an error. "
- "You may need to increase the "
- "timeout number by "
- "TEST_REPORT_TIMEOUT=200 "
- "./run_tests.sh test_model")
- report_list = inst.debugreports_get_list()
- self.assertTrue(reportName in report_list)
- name = inst.debugreport_update(reportName, {'name': tmp_name})
- self.assertEquals(name, tmp_name)
- report_list = inst.debugreports_get_list()
- self.assertTrue(tmp_name in report_list)
- except OperationFailed, e:
- if 'debugreport tool not found' not in e.message:
- raise e
-
def test_get_distros(self):
inst = model.Model('test:///default',
objstore_loc=self.tmp_store)
@@ -1029,195 +981,6 @@ class ModelTests(unittest.TestCase):
volumes = inst.storagevolumes_get_list(args['name'])
self.assertEquals(len(volumes), 2)
- def test_repository_create(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repos = [{'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'},
- {'repo_id': 'fedora-updates-fake',
- 'config':
- {'mirrorlist': 'http://www.fedoraproject.org'}}]
-
- deb_repos = [{'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}},
- {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal', 'comps': ['main']}}]
-
- yum_invalid_repos = []
- deb_invalid_repos = []
-
- for url in invalid_repository_urls:
- wrong_baseurl = {'repo_id': 'wrong-id', 'baseurl': url}
- wrong_mirrorlist = {'repo_id': 'wrong-id',
- 'baseurl': 'www.example.com',
- 'config': {'mirrorlist': url}}
- wrong_config_item = {
- 'repo_id': 'wrong-id',
- 'baseurl': 'www.example.com',
- 'config': {
- 'gpgkey': 'file:///tmp/KEY-fedora-updates-fake-19'}}
-
- yum_invalid_repos.append(wrong_baseurl)
- yum_invalid_repos.append(wrong_mirrorlist)
- yum_invalid_repos.append(wrong_config_item)
-
- wrong_baseurl['config'] = {'dist': 'tasty'}
- wrong_config = {'baseurl': deb_repos[0]['baseurl'],
- 'config': {
- 'unsupported_item': "a_unsupported_item"}}
- deb_invalid_repos.append(wrong_baseurl)
- deb_invalid_repos.append(wrong_config)
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- test_repos = yum_repos
- invalid_repos = yum_invalid_repos
- elif repo_type == 'deb':
- test_repos = deb_repos
- invalid_repos = deb_invalid_repos
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- # create repositories with invalid data
- for repo in invalid_repos:
- self.assertRaises(InvalidParameter, inst.repositories_create, repo)
-
- for repo in test_repos:
- system_host_repos = len(inst.repositories_get_list())
- repo_id = inst.repositories_create(repo)
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(repo_id, repo_info['repo_id'])
- self.assertEquals(True, repo_info.get('enabled'))
- self.assertEquals(repo.get('baseurl', ''),
- repo_info.get('baseurl'))
-
- original_config = repo.get('config', {})
- config_info = repo_info.get('config', {})
-
- if repo_type == 'yum':
- self.assertEquals(original_config.get('mirrorlist', ''),
- config_info.get('mirrorlist', ''))
- self.assertEquals(True, config_info['gpgcheck'])
- else:
- self.assertEquals(original_config['dist'], config_info['dist'])
- self.assertEquals(original_config.get('comps', []),
- config_info.get('comps', []))
-
- inst.repository_delete(repo_id)
- self.assertRaises(NotFoundError, inst.repository_lookup, repo_id)
-
- self.assertRaises(NotFoundError, inst.repository_lookup, 'google')
-
- def test_repository_update(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repo = {'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'}
- yum_new_repo = {'baseurl': 'http://www.fedoraproject.org'}
-
- deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}}
- deb_new_repo = {'baseurl': 'http://br.archive.canonical.com/ubuntu/',
- 'config': {'dist': 'utopic'}}
-
- yum_invalid_repos = []
- deb_invalid_repos = []
-
- for url in invalid_repository_urls:
- wrong_baseurl = {'baseurl': url}
- wrong_mirrorlist = {'baseurl': 'www.example.com',
- 'config': {'mirrorlist': url}}
-
- yum_invalid_repos.append(wrong_baseurl)
- yum_invalid_repos.append(wrong_mirrorlist)
-
- wrong_baseurl['config'] = {'dist': 'tasty'}
- deb_invalid_repos.append(wrong_baseurl)
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- repo = yum_repo
- new_repo = yum_new_repo
- invalid_repos = yum_invalid_repos
- elif repo_type == 'deb':
- repo = deb_repo
- new_repo = deb_new_repo
- invalid_repos = deb_invalid_repos
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- system_host_repos = len(inst.repositories_get_list())
-
- with RollbackContext() as rollback:
- repo_id = inst.repositories_create(repo)
- rollback.prependDefer(inst.repository_delete, repo_id)
-
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- # update repositories with invalid data
- for tmp_repo in invalid_repos:
- self.assertRaises(InvalidParameter, inst.repository_update,
- repo_id, tmp_repo)
-
- new_repo_id = inst.repository_update(repo_id, new_repo)
- repo_info = inst.repository_lookup(new_repo_id)
-
- self.assertEquals(new_repo_id, repo_info['repo_id'])
- self.assertEquals(new_repo['baseurl'], repo_info['baseurl'])
- self.assertEquals(True, repo_info['enabled'])
- inst.repository_update(new_repo_id, repo)
-
- def test_repository_disable_enable(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repo = {'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'}
- deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}}
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- repo = yum_repo
- elif repo_type == 'deb':
- repo = deb_repo
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- system_host_repos = len(inst.repositories_get_list())
-
- repo_id = inst.repositories_create(repo)
-
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(True, repo_info['enabled'])
-
- inst.repository_disable(repo_id)
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(False, repo_info['enabled'])
-
- inst.repository_enable(repo_id)
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(True, repo_info['enabled'])
-
- # remove files creates
- inst.repository_delete(repo_id)
-
-
class BaseModelTests(unittest.TestCase):
class FoosModel(object):
def __init__(self):
diff --git a/plugins/kimchi/tests/test_rest.py b/plugins/kimchi/tests/test_rest.py
index 1a1ae6c..75e4342 100644
--- a/plugins/kimchi/tests/test_rest.py
+++ b/plugins/kimchi/tests/test_rest.py
@@ -1127,53 +1127,6 @@ class RestTests(unittest.TestCase):
# Distro not found error
self.assertIn('KCHDISTRO0001E', distro.get('reason'))
- def test_debugreports(self):
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports')
- self.assertEquals(200, resp.status)
-
- def _report_delete(self, name):
- request(host, ssl_port, '/plugins/kimchi/debugreports/%s' % name, '{}', 'DELETE')
-
- def test_create_debugreport(self):
- req = json.dumps({'name': 'report1'})
- with RollbackContext() as rollback:
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports', req, 'POST')
- self.assertEquals(202, resp.status)
- task = json.loads(resp.read())
- # make sure the debugreport doesn't exist until the
- # the task is finished
- wait_task(self._task_lookup, task['id'])
- rollback.prependDefer(self._report_delete, 'report2')
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1')
- debugreport = json.loads(resp.read())
- self.assertEquals("report1", debugreport['name'])
- self.assertEquals(200, resp.status)
- req = json.dumps({'name': 'report2'})
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1',
- req, 'PUT')
- self.assertEquals(303, resp.status)
-
- def test_debugreport_download(self):
- req = json.dumps({'name': 'report1'})
- with RollbackContext() as rollback:
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports', req, 'POST')
- self.assertEquals(202, resp.status)
- task = json.loads(resp.read())
- # make sure the debugreport doesn't exist until the
- # the task is finished
- wait_task(self._task_lookup, task['id'], 20)
- rollback.prependDefer(self._report_delete, 'report1')
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1')
- debugreport = json.loads(resp.read())
- self.assertEquals("report1", debugreport['name'])
- self.assertEquals(200, resp.status)
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1/content')
- self.assertEquals(200, resp.status)
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1')
- debugre = json.loads(resp.read())
- resp = request(host, ssl_port, debugre['uri'])
- self.assertEquals(200, resp.status)
-
def test_repositories(self):
def verify_repo(t, res):
for field in ('repo_id', 'enabled', 'baseurl', 'config'):
diff --git a/plugins/kimchi/ui/config/tab-ext.xml b/plugins/kimchi/ui/config/tab-ext.xml
index ee88c88..48ec9ec 100644
--- a/plugins/kimchi/ui/config/tab-ext.xml
+++ b/plugins/kimchi/ui/config/tab-ext.xml
@@ -2,13 +2,6 @@
<tabs-ext>
<tab>
<access role="admin" mode="admin"/>
- <access role="user" mode="none"/>
-
- <title>Host</title>
- <path>plugins/kimchi/host.html</path>
- </tab>
- <tab>
- <access role="admin" mode="admin"/>
<access role="user" mode="byInstance"/>
<title>Guests</title>
diff --git a/plugins/kimchi/ui/js/src/kimchi.api.js b/plugins/kimchi/ui/js/src/kimchi.api.js
index 0ec3747..19fe1a6 100644
--- a/plugins/kimchi/ui/js/src/kimchi.api.js
+++ b/plugins/kimchi/ui/js/src/kimchi.api.js
@@ -70,37 +70,6 @@ var kimchi = {
},
/**
- * Get the dynamic host stats (usually used for monitoring).
- */
- getHostStats : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/stats',
- type : 'GET',
- contentType : 'application/json',
- headers: {'Wok-Robot': 'wok-robot'},
- dataType : 'json',
- success : suc,
- error: err
- });
- },
-
- /**
- * Get the historic host stats.
- */
- getHostStatsHistory : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/stats/history',
- type : 'GET',
- resend: true,
- contentType : 'application/json',
- headers: {'Wok-Robot': 'wok-robot'},
- dataType : 'json',
- success : suc,
- error: err
- });
- },
-
- /**
*
* Create a new Virtual Machine. Usage: kimchi.createVM({ name: 'MyUbuntu',
* template: '/templates/ubuntu_base' }, creationSuc, creationErr);
@@ -638,18 +607,6 @@ var kimchi = {
});
},
- listReports : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/debugreports',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- resend: true,
- success : suc,
- error : err
- });
- },
-
trackTask : function(taskID, suc, err, progress) {
var onTaskResponse = function(result) {
var taskStatus = result['status'];
@@ -676,75 +633,6 @@ var kimchi = {
kimchi.trackingTasks.push(taskID);
},
- createReport: function(settings, suc, err, progress) {
- var onResponse = function(data) {
- taskID = data['id'];
- kimchi.trackTask(taskID, suc, err, progress);
- };
-
- wok.requestJSON({
- url : 'plugins/kimchi/debugreports',
- type : "POST",
- contentType : "application/json",
- data : JSON.stringify(settings),
- dataType : "json",
- success : onResponse,
- error : err
- });
- },
-
- renameReport : function(name, settings, suc, err) {
- $.ajax({
- url : "plugins/kimchi/debugreports/" + encodeURIComponent(name),
- type : 'PUT',
- contentType : 'application/json',
- data : JSON.stringify(settings),
- dataType : 'json',
- success: suc,
- error: err
- });
- },
-
- deleteReport: function(settings, suc, err) {
- var reportName = encodeURIComponent(settings['name']);
- wok.requestJSON({
- url : 'plugins/kimchi/debugreports/' + reportName,
- type : 'DELETE',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- downloadReport: function(settings, suc, err) {
- window.open(settings['file']);
- },
-
- shutdown: function(settings, suc, err) {
- var reboot = settings && settings['reboot'] === true;
- var url = 'plugins/kimchi/host/' + (reboot ? 'reboot' : 'shutdown');
- wok.requestJSON({
- url : url,
- type : 'POST',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- listHostPartitions : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/partitions',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
getStorageServers: function(type, suc, err) {
var url = 'plugins/kimchi/storageservers?_target_type=' + type;
wok.requestJSON({
@@ -872,131 +760,6 @@ var kimchi = {
});
},
- listSoftwareUpdates : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/packagesupdate',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- resend: true,
- success : suc,
- error : err
- });
- },
-
- updateSoftware : function(suc, err, progress) {
- var taskID = -1;
- var onResponse = function(data) {
- taskID = data['id'];
- trackTask();
- };
-
- var trackTask = function() {
- kimchi.getTask(taskID, onTaskResponse, err);
- };
-
- var onTaskResponse = function(result) {
- var taskStatus = result['status'];
- switch(taskStatus) {
- case 'running':
- progress && progress(result);
- setTimeout(function() {
- trackTask();
- }, 200);
- break;
- case 'finished':
- case 'failed':
- suc(result);
- break;
- default:
- break;
- }
- };
-
- wok.requestJSON({
- url : 'plugins/kimchi/host/swupdate',
- type : "POST",
- contentType : "application/json",
- dataType : "json",
- success : onResponse,
- error : err
- });
- },
-
- createRepository : function(settings, suc, err) {
- wok.requestJSON({
- url : "plugins/kimchi/host/repositories",
- type : "POST",
- contentType : "application/json",
- data : JSON.stringify(settings),
- dataType : "json",
- success: suc,
- error: err
- });
- },
-
- retrieveRepository : function(repository, suc, err) {
- var reposID = encodeURIComponent(repository);
- wok.requestJSON({
- url : "plugins/kimchi/host/repositories/" + reposID,
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- updateRepository : function(name, settings, suc, err) {
- var reposID = encodeURIComponent(name);
- $.ajax({
- url : "plugins/kimchi/host/repositories/" + reposID,
- type : 'PUT',
- contentType : 'application/json',
- data : JSON.stringify(settings),
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- enableRepository : function(name, enable, suc, err) {
- var reposID = encodeURIComponent(name);
- $.ajax({
- url : "plugins/kimchi/host/repositories/" + reposID +
- '/' + (enable === true ? 'enable' : 'disable'),
- type : 'POST',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- deleteRepository : function(repository, suc, err) {
- var reposID = encodeURIComponent(repository);
- wok.requestJSON({
- url : 'plugins/kimchi/host/repositories/' + reposID,
- type : 'DELETE',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- listRepositories : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/repositories',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- resend: true,
- success : suc,
- error : err
- });
- },
-
getHostFCDevices: function(suc, err) {
var url = 'plugins/kimchi/host/devices?_cap=fc_host';
wok.requestJSON({
@@ -1339,17 +1102,4 @@ var kimchi = {
});
},
- getCPUInfo : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/cpuinfo',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- resend : true,
- success : suc,
- error : err ? err : function(data) {
- wok.message.error(data.responseJSON.reason);
- }
- });
- }
};
diff --git a/plugins/kimchi/ui/pages/i18n.json.tmpl b/plugins/kimchi/ui/pages/i18n.json.tmpl
index cd320e0..f7f557d 100644
--- a/plugins/kimchi/ui/pages/i18n.json.tmpl
+++ b/plugins/kimchi/ui/pages/i18n.json.tmpl
@@ -75,49 +75,6 @@
"KCHHOST6007M": "$_("Sent")",
"KCHHOST6008M": "$_("Shutting down or restarting host will cause unsaved work lost. Continue to shut down/restarting?")",
-
- "KCHREPO6001M": "$_("Confirm")",
- "KCHREPO6002M": "$_("Repository will be removed permanently and can't be recovered. Do you want to continue?")",
- "KCHREPO6003M": "$_("Repositories")",
- "KCHREPO6004M": "$_("ID")",
- "KCHREPO6005M": "$_("Name")",
- "KCHREPO6006M": "$_("Base URL")",
- "KCHREPO6007M": "$_("Is Mirror")",
- "KCHREPO6008M": "$_("URL Args")",
- "KCHREPO6009M": "$_("Enabled")",
- "KCHREPO6010M": "$_("GPG Check")",
- "KCHREPO6011M": "$_("GPG Key")",
- "KCHREPO6012M": "$_("Add")",
- "KCHREPO6013M": "$_("Edit")",
- "KCHREPO6014M": "$_("Remove")",
- "KCHREPO6016M": "$_("Enable")",
- "KCHREPO6017M": "$_("Disable")",
-
-
- "KCHUPD6001M": "$_("Software Updates")",
- "KCHUPD6002M": "$_("Package Name")",
- "KCHUPD6003M": "$_("Version")",
- "KCHUPD6004M": "$_("Architecture")",
- "KCHUPD6005M": "$_("Repository")",
- "KCHUPD6006M": "$_("Update All")",
- "KCHUPD6007M": "$_("Updating...")",
- "KCHUPD6008M": "$_("Failed to retrieve packages update information.")",
- "KCHUPD6009M": "$_("Failed to update package(s).")",
-
-
- "KCHDR6001M": "$_("Debug report will be removed permanently and can't be recovered. Do you want to continue?")",
- "KCHDR6002M": "$_("Debug Reports")",
- "KCHDR6003M": "$_("Name")",
- "KCHDR6005M": "$_("Generated Time")",
- "KCHDR6006M": "$_("Generate")",
- "KCHDR6007M": "$_("Generating...")",
- "KCHDR6008M": "$_("Rename")",
- "KCHDR6009M": "$_("Remove")",
- "KCHDR6010M": "$_("Download")",
- "KCHDR6011M": "$_("Report name should contain only letters, digits, underscore ('_') and/or hyphen ('-').")",
- "KCHDR6012M": "$_("Pending...")",
- "KCHDR6013M": "$_("Report name is the same as the original one.")",
-
"KCHVM6001M": "$_("This will delete the virtual machine and its virtual disks. This operation cannot be undone. Would you like to continue?")",
"KCHVM6002M": "$_("Power off Confirmation")",
"KCHVM6003M": "$_("This action may produce undesirable results, "
--
2.1.0
3
2
[PATCH 1/5] [WOK] Removing fontello references and unused CSS and old JS
by sguimaraes943@gmail.com 10 Sep '15
by sguimaraes943@gmail.com 10 Sep '15
10 Sep '15
From: samhenri <samuel.guimaraes(a)eldorado.org.br>
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
.../ui/css/theme-default/jquery-ui.custom.css | 203 ----------------
plugins/kimchi/ui/css/theme-default/toolbar.css | 53 -----
ui/css/theme-default/topbar.css | 214 -----------------
ui/fontello/LICENSE.txt | 66 ------
ui/fontello/Makefile.am | 22 --
ui/fontello/css/Makefile.am | 20 --
ui/fontello/css/animation.css | 85 -------
ui/fontello/css/fontello.css | 261 ---------------------
ui/fontello/font/Makefile.am | 20 --
ui/fontello/font/fontello.eot | Bin 42700 -> 0 bytes
ui/fontello/font/fontello.svg | 220 -----------------
ui/fontello/font/fontello.ttf | Bin 42532 -> 0 bytes
ui/fontello/font/fontello.woff | Bin 24196 -> 0 bytes
ui/libs/jquery-1.10.0.min.js | 6 -
ui/libs/jquery-ui.min.js | 13 -
15 files changed, 1183 deletions(-)
delete mode 100644 plugins/kimchi/ui/css/theme-default/jquery-ui.custom.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/toolbar.css
delete mode 100644 ui/css/theme-default/topbar.css
delete mode 100644 ui/fontello/LICENSE.txt
delete mode 100644 ui/fontello/Makefile.am
delete mode 100644 ui/fontello/css/Makefile.am
delete mode 100644 ui/fontello/css/animation.css
delete mode 100644 ui/fontello/css/fontello.css
delete mode 100644 ui/fontello/font/Makefile.am
delete mode 100644 ui/fontello/font/fontello.eot
delete mode 100644 ui/fontello/font/fontello.svg
delete mode 100644 ui/fontello/font/fontello.ttf
delete mode 100644 ui/fontello/font/fontello.woff
delete mode 100644 ui/libs/jquery-1.10.0.min.js
delete mode 100644 ui/libs/jquery-ui.min.js
diff --git a/plugins/kimchi/ui/css/theme-default/jquery-ui.custom.css b/plugins/kimchi/ui/css/theme-default/jquery-ui.custom.css
deleted file mode 100644
index 56f7e06..0000000
--- a/plugins/kimchi/ui/css/theme-default/jquery-ui.custom.css
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-.ui-button-primary {
- border-radius: 8px 8px 8px 8px;
-}
-
-.ui-button-primary.ui-state-default {
- background: none repeat scroll 0 0 #0066FF;
- border: 0 none;
-}
-
-.ui-button-primary.ui-state-disabled {
- background-color: silver;
- opacity: 1;
-}
-
-.ui-button-primary.ui-state-hover {
- background: #0044DD;
-}
-
-.ui-button-primary .ui-button-text {
- padding: 10px 23px;
- font-size: 13px;
- color: #EEEEEE;
-}
-
-.ui-button-secondary {
- border: 1px solid #AAAAAA;
- border-radius: 5px 5px 5px 5px;
- cursor: pointer;
-}
-
-.ui-button-secondary.ui-state-default {
- background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat
- scroll 0 0 transparent;
- box-shadow: -2px -2px 2px #EAEAEA, 2px 2px 2px #FFFFFF, 3px 3px 3px white
- inset, -3px -3px 3px rgba(0, 0, 0, 0.25) inset;
-}
-
-.ui-button-secondary.ui-state-hover {
- background: linear-gradient(to bottom, #d5d5d5 0%, #eeeeee 100%);
- box-shadow: -2px -2px 2px #dadada, 2px 2px 2px #fff, 3px 3px 3px white
- inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
-}
-
-.ui-button-secondary .ui-button-text {
- font-size: 13px;
- color: #333333;
- text-overflow: ellipsis;
- text-shadow: -1px -1px 1px #AAAAAA, 1px 1px 1px #FFFFFF;
- white-space: nowrap;
-}
-
-.ui-button-secondary.ui-button-text-only .ui-button-text {
- padding: 12px 23px 13px 20px;
-}
-
-.ui-button-secondary.ui-button-text-icon-secondary .ui-button-text {
- padding: 12px 35px 13px 13px;
-}
-
-.ui-button-secondary .ui-button-icon-secondary {
- padding-right: 5px;
- width: 15px;
- height: 15px;
-}
-
-.ui-menu {
- background: linear-gradient(to bottom, #EEEEEE 0%, #CCCCCC 10px, #CCCCCC
- 96%, #A5A5A5 100%) repeat scroll 0 0 transparent;
- padding: 10px 10px 0;
- width: 250px;
-}
-
-.ui-menu .ui-menu-item a {
- background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat
- scroll 0 0 transparent;
- border: 1px solid #CCCCCC;
- border-radius: 5px 5px 5px 5px;
- box-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #EEEEEE;
- display: block;
- font-size: 13px;
- line-height: 38px;
- margin-bottom: 10px;
- text-align: center;
- text-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #FFFFFF;
- width: 96%;
-}
-
-.ui-menu .ui-menu-item a.ui-state-focus {
- background: linear-gradient(to bottom, #EEEEEE 0%, #D5D5D5 100%) repeat
- scroll 0 0 transparent;
- box-shadow: -1px -1px 1px #BBBBBB, 1px 1px 1px #DDDDDD;
- margin: 0px 0px 10px 0px;
-}
-
-.ui-menu .ui-menu-item a.red:not([disabled]) {
- background: linear-gradient(to bottom, #FF3019 0%, #CF0404 100%) repeat
- scroll 0 0 transparent;
- border: 1px solid #B10F14;
- color: #FFFFFF;
- text-shadow: -1px -1px 1px #9E0505, 1px 1px 1px #FC5D4C;
-}
-
-.ui-menu .ui-menu-item a.red:hover:not([disabled]) {
- background: linear-gradient(to bottom, #EF2009 0%, #BF0404 100%) repeat
- scroll 0 0 transparent;
-}
-
-.ui-menu .ui-state-disabled {
- opacity: 1;
-}
-
-.ui-menu .ui-state-disabled a {
- color: gray;
-}
-
-.ui-widget-overlay {
- background: url("../images/theme-default/bg-mask.png") repeat scroll
- 0 0 transparent;
- opacity: 1;
-}
-
-.ui-dialog {
- background: none;
- background-color: #EEEEEE;
- border: 2px solid #0F71B4;
- border-radius: 8px;
- padding: 0px;
-}
-
-.ui-dialog .ui-dialog-titlebar {
- border: none;
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
- background: none;
- padding: 13px 0px 13px 10px;
- box-shadow: 0 1px 3px rgba(0,0,0,0.15), 0 -1px 0 rgba(0,0,0,0.05) inset;
-}
-
-.ui-dialog .ui-dialog-title {
- font-size: 18px;
- color: #0066CC;
-}
-
-.ui-dialog .ui-dialog-titlebar-close {
- margin: 4px 0 0;
- background: none repeat scroll 0 0 #EEEEEE;
- border: 2px solid #CCCCCC;
- border-radius: 35px 35px 35px 35px;
- color: #CCCCCC;
- cursor: pointer;
- height: 35px;
- width: 35px;
- position: absolute;
- right: 7px;
- text-align: center;
- top: 5px;
-}
-
-.ui-dialog .ui-dialog-titlebar .ui-state-hover {
- border: 2px solid #444444;
- color: #444444;
-}
-
-.ui-dialog .ui-dialog-titlebar .ui-button-text {
- font-size: 24px;
- font-weight: bold;
- padding: 0px;
- text-indent: 0px;
-}
-
-.ui-dialog .ui-dialog-titlebar .ui-button-icon-primary {
- display: none;
-}
-
-.ui-dialog .ui-dialog-buttonpane {
- padding: 0px;
- background-color: transparent;
- border-width: 0;
- box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.15);
-}
-
-.ui-dialog .ui-dialog-buttonpane button {
- cursor: pointer;
- margin: 0.5em 13px 0.5em 0;
-}
diff --git a/plugins/kimchi/ui/css/theme-default/toolbar.css b/plugins/kimchi/ui/css/theme-default/toolbar.css
deleted file mode 100644
index ea2a039..0000000
--- a/plugins/kimchi/ui/css/theme-default/toolbar.css
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Generated at http://colorzilla.com/gradient-editor/ */
-.toolbar {
- position: relative;
- height: 48px;
- padding: 0 5px;
- overflow: hidden;
- background: #e5e5e5;
- background: -moz-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -webkit-gradient(linear, left top, left bottom,
- color-stop(0%, #e5e5e5), color-stop(100%, #c4c4c4));
- background: -webkit-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -o-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -ms-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: linear-gradient(to bottom, #e5e5e5 0%, #c4c4c4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e5e5e5',
- endColorstr='#c4c4c4', GradientType=0);
- border-bottom: 1px solid #aaa;
-}
-
-.toolbar .filters {
- float: left;
-}
-
-.toolbar .tools {
- float: right;
-}
-
-.toolbar .divide {
- display: inline-block;
- height: 42px;
- margin: 3px;
- vertical-align: top;
- border-left: 1px solid #999;
- border-right: 1px solid #eee;
-}
diff --git a/ui/css/theme-default/topbar.css b/ui/css/theme-default/topbar.css
deleted file mode 100644
index 4fce02c..0000000
--- a/ui/css/theme-default/topbar.css
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Generated at http://colorzilla.com/gradient-editor/ */
-.topbar {
- height: 52px;
- background: #4a4a4a; /* Old browsers */
- background: -moz-linear-gradient(top, #4a4a4a 0%,
- #272727 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom,
- color-stop(0%, #4a4a4a),
- color-stop(100%, #272727)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #4a4a4a 0%,
- #272727 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #4a4a4a 0%,
- #272727 100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* IE10+ */
- background: linear-gradient(to bottom, #4a4a4a 0%, #272727 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4a4a4a',
- endColorstr='#272727', GradientType=0);
- border-top: 1px solid #6b6868;
- boder-bottom: 1px solid #151718;
- position: relative;
-}
-
-#logo {
- height: 48px;
- line-height: 48px;
- padding: 0 10px;
- font-size: 20px;
- font-weight: normal;
- color: #eee;
- text-shadow: -1px -1px 1px #000, 1px 1px 1px #555;
- vertical-align: top;
- max-width: 250px;
- overflow: hidden;
-}
-
-.nav-top {
- position: absolute;
- right: 0;
- top: 0;
- border-left: 1px solid #000;
- border-right: 1px solid #585858;
-}
-
-.nav-top>li {
- float: left;
- border-left: 1px solid #585858;
- border-right: 1px solid #000;
-}
-
-.nav-top .icon {
- display: block;
- position: relative;
- width: 58px;
- height: 48px;
-}
-
-.nav-top .icon .count {
- position: absolute;
- top: 3px;
- right: 3px;
- height: 16px;
- line-height: 17px;
- padding: 0 5px;
- -webkit-border-radius: 12px;
- -moz-border-radius: 12px;
- border-radius: 12px;
- font-size: 10px;
- color: #fff;
- text-align: center;
- background: #06C;
- text-shadow: none;
-}
-
-.icon.setting {
- background: url(../images/theme-default/icon-setting.png) no-repeat
- center center;
-}
-
-.icon.tool {
- background: url(../images/theme-default/icon-tool.png) no-repeat
- center center;
-}
-
-.icon.event {
- background: url(../images/theme-default/icon-event.png) no-repeat
- center center;
-}
-
-.icon.alert {
- background: url(../images/theme-default/icon-alert.png) no-repeat
- center center;
-}
-
-#user {
- color: white;
- cursor: pointer;
- display: block;
- position: relative;
- height: 52px;
- margin: 0 12px;
-}
-
-#user span {
- display: inline-block;
- margin-top: 16px;
-}
-
-#user:hover #user-name {
- border-bottom: 1px solid white;
-}
-
-#user.not-logged-in {
- display: none;
-}
-
-#user-icon {
- background: url("../images/theme-default/user-icon.png") no-repeat left top;
- height: 16px;
- width: 16px;
-}
-
-#user-name {
- height: 16px;
- line-height: 16px;
-}
-
-#user .arrow {
- border: 6px solid transparent;
- border-bottom: none;
- border-top-color: white;
- display: inline-block;
- width: 0;
-}
-
-#user .action-panel {
- top: 45px;
- color: black;
- padding: 12px 18px;
- white-space: nowrap;
- line-height: 12px;
- width: inherit;
-}
-
-.user-menu-item {
- color: black;
- font-size: 14px;
-}
-
-
-a#btn-logout:hover {
- text-decoration: underline;
-}
-
-@media ( max-width : 640px) {
- #logo {
- display: none;
- }
-}
-
-.peers {
- color: white;
- cursor: pointer;
- height: 52px;
- margin: 0 12px;
-}
-
-.peers span {
- margin-top: 25px;
-}
-
-.peers .arrow {
- border: 6px solid transparent;
- border-bottom: none;
- border-top-color: white;
- display: inline-block;
- width: 0;
-}
-
-.peers .dropdown {
- top: 45px;
- right: 110px;
- color: black;
- padding: 10px 15px;
- white-space: nowrap;
- line-height: 12px;
- width: inherit;
-}
-
-.peers .dropdown a {
- display: block;
- padding: 10px;
-}
-
-.hide-content {
- display: none!important;
-}
diff --git a/ui/fontello/LICENSE.txt b/ui/fontello/LICENSE.txt
deleted file mode 100644
index 0effddb..0000000
--- a/ui/fontello/LICENSE.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-Font license info
-
-
-## Font Awesome
-
- Copyright (C) 2012 by Dave Gandy
-
- Author: Dave Gandy
- License: SIL ()
- Homepage: http://fortawesome.github.com/Font-Awesome/
-
-
-## Entypo
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: Daniel Bruce
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.entypo.com
-
-
-## Elusive
-
- Copyright (C) 2013 by Aristeides Stathopoulos
-
- Author: Aristeides Stathopoulos
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://aristeides.com/
-
-
-## MFG Labs
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: MFG Labs
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.mfglabs.com/
-
-
-## Typicons
-
- (c) Stephen Hutchings 2012
-
- Author: Stephen Hutchings
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://typicons.com/
-
-
-## Zocial
-
- Copyright (C) 2012 by Sam Collins
-
- Author: Sam Collins
- License: MIT (http://opensource.org/licenses/mit-license.php)
- Homepage: http://zocial.smcllns.com/
-
-
-## Fontelico
-
- Copyright (C) 2012 by Fontello project
-
- Author: Crowdsourced, for Fontello project
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://fontello.com
-
-
diff --git a/ui/fontello/Makefile.am b/ui/fontello/Makefile.am
deleted file mode 100644
index 0576ed2..0000000
--- a/ui/fontello/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SUBDIRS = css font
-
-fontellodir = $(datadir)/wok/ui/fontello
-
-dist_fontello_DATA = LICENSE.txt
diff --git a/ui/fontello/css/Makefile.am b/ui/fontello/css/Makefile.am
deleted file mode 100644
index 50b5489..0000000
--- a/ui/fontello/css/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-cssdir = $(datadir)/wok/ui/fontello/css
-
-dist_css_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/fontello/css/animation.css b/ui/fontello/css/animation.css
deleted file mode 100644
index ac5a956..0000000
--- a/ui/fontello/css/animation.css
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- Animation example, for spinners
-*/
-.animate-spin {
- -moz-animation: spin 2s infinite linear;
- -o-animation: spin 2s infinite linear;
- -webkit-animation: spin 2s infinite linear;
- animation: spin 2s infinite linear;
- display: inline-block;
-}
-@-moz-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-webkit-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-o-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-ms-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
diff --git a/ui/fontello/css/fontello.css b/ui/fontello/css/fontello.css
deleted file mode 100644
index d9df9ce..0000000
--- a/ui/fontello/css/fontello.css
+++ /dev/null
@@ -1,261 +0,0 @@
-@font-face {
- font-family: 'fontello';
- src: url('../font/fontello.eot?99320945');
- src: url('../font/fontello.eot?99320945#iefix') format('embedded-opentype'),
- url('../font/fontello.woff?99320945') format('woff'),
- url('../font/fontello.ttf?99320945') format('truetype'),
- url('../font/fontello.svg?99320945#fontello') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
-/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
-/*
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: 'fontello';
- src: url('../font/fontello.svg?99320945#fontello') format('svg');
- }
-}
-*/
-
- [class^="icon-"]:before, [class*=" icon-"]:before {
- font-family: "fontello";
- font-style: normal;
- font-weight: normal;
- speak: none;
-
- display: inline-block;
- text-decoration: inherit;
- width: 1em;
- margin-right: .2em;
- text-align: center;
- /* opacity: .8; */
-
- /* For safety - reset parent styles, that can break glyph codes*/
- font-variant: normal;
- text-transform: none;
-
- /* fix buttons height, for twitter bootstrap */
- line-height: 1em;
-
- /* Animation center compensation - margins should be symmetric */
- /* remove if not needed */
- margin-left: .2em;
-
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
-
- /* Uncomment for 3D effect */
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
-}
-
-.icon-user:before { content: '\e800'; } /* '' */
-.icon-help-circled:before { content: '\e801'; } /* '' */
-.icon-search:before { content: '\e802'; } /* '' */
-.icon-tag:before { content: '\e803'; } /* '' */
-.icon-dot-2:before { content: '\e804'; } /* '' */
-.icon-arrows-cw:before { content: '\e805'; } /* '' */
-.icon-print:before { content: '\e806'; } /* '' */
-.icon-cancel-circled:before { content: '\e807'; } /* '' */
-.icon-edit-alt:before { content: '\e808'; } /* '' */
-.icon-login:before { content: '\e809'; } /* '' */
-.icon-logout:before { content: '\e80a'; } /* '' */
-.icon-download:before { content: '\e80b'; } /* '' */
-.icon-th-large:before { content: '\e80c'; } /* '' */
-.icon-th:before { content: '\e80d'; } /* '' */
-.icon-th-list:before { content: '\e80e'; } /* '' */
-.icon-star:before { content: '\e80f'; } /* '' */
-.icon-star-empty:before { content: '\e810'; } /* '' */
-.icon-users:before { content: '\e811'; } /* '' */
-.icon-upload:before { content: '\e812'; } /* '' */
-.icon-circle-thin:before { content: '\e813'; } /* '' */
-.icon-dot-circled:before { content: '\e814'; } /* '' */
-.icon-ok:before { content: '\e815'; } /* '' */
-.icon-check-empty-1:before { content: '\e816'; } /* '' */
-.icon-clock-2:before { content: '\e817'; } /* '' */
-.icon-ok-squared:before { content: '\e818'; } /* '' */
-.icon-pin:before { content: '\e820'; } /* '' */
-.icon-eye:before { content: '\e821'; } /* '' */
-.icon-attach:before { content: '\e824'; } /* '' */
-.icon-unlink:before { content: '\e825'; } /* '' */
-.icon-link:before { content: '\e826'; } /* '' */
-.icon-home:before { content: '\e827'; } /* '' */
-.icon-info:before { content: '\e828'; } /* '' */
-.icon-info-circled:before { content: '\e829'; } /* '' */
-.icon-export:before { content: '\e82f'; } /* '' */
-.icon-export-alt:before { content: '\e830'; } /* '' */
-.icon-share:before { content: '\e831'; } /* '' */
-.icon-share-squared:before { content: '\e832'; } /* '' */
-.icon-retweet:before { content: '\e836'; } /* '' */
-.icon-attention-alt:before { content: '\e837'; } /* '' */
-.icon-attention:before { content: '\e838'; } /* '' */
-.icon-attention-circled:before { content: '\e839'; } /* '' */
-.icon-location:before { content: '\e83a'; } /* '' */
-.icon-trash:before { content: '\e83b'; } /* '' */
-.icon-doc:before { content: '\e83c'; } /* '' */
-.icon-docs:before { content: '\e83d'; } /* '' */
-.icon-doc-text:before { content: '\e83e'; } /* '' */
-.icon-doc-inv:before { content: '\e83f'; } /* '' */
-.icon-doc-text-inv:before { content: '\e840'; } /* '' */
-.icon-file-pdf:before { content: '\e841'; } /* '' */
-.icon-file-word:before { content: '\e842'; } /* '' */
-.icon-file-excel:before { content: '\e843'; } /* '' */
-.icon-file-powerpoint:before { content: '\e844'; } /* '' */
-.icon-file-image:before { content: '\e845'; } /* '' */
-.icon-cog:before { content: '\e84b'; } /* '' */
-.icon-cog-alt:before { content: '\e84c'; } /* '' */
-.icon-wrench:before { content: '\e84d'; } /* '' */
-.icon-calendar:before { content: '\e84e'; } /* '' */
-.icon-calendar-empty:before { content: '\e84f'; } /* '' */
-.icon-clock:before { content: '\e852'; } /* '' */
-.icon-block:before { content: '\e853'; } /* '' */
-.icon-zoom-in:before { content: '\e857'; } /* '' */
-.icon-zoom-out:before { content: '\e858'; } /* '' */
-.icon-down-circled2:before { content: '\e859'; } /* '' */
-.icon-up-circled2:before { content: '\e85a'; } /* '' */
-.icon-left-circled2:before { content: '\e85b'; } /* '' */
-.icon-right-circled2:before { content: '\e85c'; } /* '' */
-.icon-down-dir:before { content: '\e85d'; } /* '' */
-.icon-up-dir:before { content: '\e85e'; } /* '' */
-.icon-left-dir:before { content: '\e85f'; } /* '' */
-.icon-right-dir:before { content: '\e860'; } /* '' */
-.icon-down-open:before { content: '\e861'; } /* '' */
-.icon-left-open:before { content: '\e862'; } /* '' */
-.icon-right-open:before { content: '\e863'; } /* '' */
-.icon-up-open:before { content: '\e864'; } /* '' */
-.icon-angle-left:before { content: '\e865'; } /* '' */
-.icon-angle-right:before { content: '\e866'; } /* '' */
-.icon-angle-up:before { content: '\e867'; } /* '' */
-.icon-angle-down:before { content: '\e868'; } /* '' */
-.icon-angle-circled-left:before { content: '\e869'; } /* '' */
-.icon-angle-circled-right:before { content: '\e86a'; } /* '' */
-.icon-angle-circled-up:before { content: '\e86b'; } /* '' */
-.icon-angle-circled-down:before { content: '\e86c'; } /* '' */
-.icon-angle-double-left:before { content: '\e86d'; } /* '' */
-.icon-angle-double-right:before { content: '\e86e'; } /* '' */
-.icon-angle-double-up:before { content: '\e86f'; } /* '' */
-.icon-angle-double-down:before { content: '\e870'; } /* '' */
-.icon-down-big:before { content: '\e871'; } /* '' */
-.icon-left-big:before { content: '\e872'; } /* '' */
-.icon-right-big:before { content: '\e873'; } /* '' */
-.icon-up-big:before { content: '\e874'; } /* '' */
-.icon-left-circled:before { content: '\e875'; } /* '' */
-.icon-right-circled:before { content: '\e876'; } /* '' */
-.icon-up-circled:before { content: '\e877'; } /* '' */
-.icon-down-circled:before { content: '\e878'; } /* '' */
-.icon-cw:before { content: '\e879'; } /* '' */
-.icon-ccw:before { content: '\e87a'; } /* '' */
-.icon-level-up:before { content: '\e87c'; } /* '' */
-.icon-level-down:before { content: '\e87d'; } /* '' */
-.icon-shuffle:before { content: '\e87e'; } /* '' */
-.icon-exchange:before { content: '\e87f'; } /* '' */
-.icon-history:before { content: '\e880'; } /* '' */
-.icon-expand:before { content: '\e881'; } /* '' */
-.icon-collapse:before { content: '\e882'; } /* '' */
-.icon-expand-right:before { content: '\e883'; } /* '' */
-.icon-collapse-left:before { content: '\e884'; } /* '' */
-.icon-play:before { content: '\e885'; } /* '' */
-.icon-play-circled2:before { content: '\e886'; } /* '' */
-.icon-play-circled:before { content: '\e887'; } /* '' */
-.icon-stop:before { content: '\e888'; } /* '' */
-.icon-cloud:before { content: '\e889'; } /* '' */
-.icon-table:before { content: '\e88a'; } /* '' */
-.icon-off:before { content: '\e88b'; } /* '' */
-.icon-check:before { content: '\e88c'; } /* '' */
-.icon-asterisk:before { content: '\e88e'; } /* '' */
-.icon-chart-bar:before { content: '\e88f'; } /* '' */
-.icon-bug:before { content: '\e890'; } /* '' */
-.icon-certificate:before { content: '\e891'; } /* '' */
-.icon-tasks:before { content: '\e892'; } /* '' */
-.icon-sort-up:before { content: '\e893'; } /* '' */
-.icon-sort-down:before { content: '\e894'; } /* '' */
-.icon-sort:before { content: '\e895'; } /* '' */
-.icon-gauge:before { content: '\e896'; } /* '' */
-.icon-spinner:before { content: '\e897'; } /* '' */
-.icon-database:before { content: '\e898'; } /* '' */
-.icon-lifebuoy:before { content: '\e899'; } /* '' */
-.icon-cubes:before { content: '\e89a'; } /* '' */
-.icon-cube:before { content: '\e89b'; } /* '' */
-.icon-bullseye:before { content: '\e89c'; } /* '' */
-.icon-windows:before { content: '\e89d'; } /* '' */
-.icon-cancel-circled-1:before { content: '\e89e'; } /* '' */
-.icon-plus-1:before { content: '\e8a0'; } /* '' */
-.icon-plus-circled-1:before { content: '\e8a1'; } /* '' */
-.icon-minus-1:before { content: '\e8a3'; } /* '' */
-.icon-minus-circled-1:before { content: '\e8a4'; } /* '' */
-.icon-help-circled-1:before { content: '\e8a7'; } /* '' */
-.icon-heart-empty-1:before { content: '\e8aa'; } /* '' */
-.icon-mail-1:before { content: '\e8ab'; } /* '' */
-.icon-star-1:before { content: '\e8ac'; } /* '' */
-.icon-star-empty-1:before { content: '\e8ad'; } /* '' */
-.icon-link-1:before { content: '\e8ae'; } /* '' */
-.icon-attach-1:before { content: '\e8af'; } /* '' */
-.icon-eye-1:before { content: '\e8b2'; } /* '' */
-.icon-attention-1:before { content: '\e8b3'; } /* '' */
-.icon-doc-text-1:before { content: '\e8b4'; } /* '' */
-.icon-doc-text-inv-1:before { content: '\e8b5'; } /* '' */
-.icon-share-1:before { content: '\e8b7'; } /* '' */
-.icon-shareable:before { content: '\e8b8'; } /* '' */
-.icon-ccw-1:before { content: '\e8cc'; } /* '' */
-.icon-cw-1:before { content: '\e8cd'; } /* '' */
-.icon-arrows-ccw:before { content: '\e8ce'; } /* '' */
-.icon-play-1:before { content: '\e8cf'; } /* '' */
-.icon-pause:before { content: '\e8d0'; } /* '' */
-.icon-record:before { content: '\e8d1'; } /* '' */
-.icon-stop-1:before { content: '\e8d2'; } /* '' */
-.icon-switch:before { content: '\e8d3'; } /* '' */
-.icon-loop:before { content: '\e8d4'; } /* '' */
-.icon-cloud-1:before { content: '\e8d5'; } /* '' */
-.icon-certificate-outline:before { content: '\e8db'; } /* '' */
-.icon-certificate-1:before { content: '\e8dc'; } /* '' */
-.icon-windows-1:before { content: '\e8dd'; } /* '' */
-.icon-spin5:before { content: '\e8df'; } /* '' */
-.icon-spin2:before { content: '\e8e0'; } /* '' */
-.icon-picture:before { content: '\e8e4'; } /* '' */
-.icon-menu:before { content: '\e8e5'; } /* '' */
-.icon-sliders:before { content: '\e8e6'; } /* '' */
-.icon-list-alt:before { content: '\e8e7'; } /* '' */
-.icon-ajust:before { content: '\e8e8'; } /* '' */
-.icon-circle:before { content: '\e8e9'; } /* '' */
-.icon-circle-empty:before { content: '\e8ea'; } /* '' */
-.icon-circle-notch:before { content: '\e8ec'; } /* '' */
-.icon-fork:before { content: '\e8ed'; } /* '' */
-.icon-sitemap:before { content: '\e8ee'; } /* '' */
-.icon-stethoscope:before { content: '\e8ef'; } /* '' */
-.icon-shield:before { content: '\e8f0'; } /* '' */
-.icon-heart-1:before { content: '\e8f1'; } /* '' */
-.icon-search-1:before { content: '\e8f2'; } /* '' */
-.icon-menu-1:before { content: '\e8f3'; } /* '' */
-.icon-back:before { content: '\e8f6'; } /* '' */
-.icon-home-1:before { content: '\e8f7'; } /* '' */
-.icon-pencil-1:before { content: '\e8f8'; } /* '' */
-.icon-location-1:before { content: '\e8f9'; } /* '' */
-.icon-logout-1:before { content: '\e8fb'; } /* '' */
-.icon-login-1:before { content: '\e8fc'; } /* '' */
-.icon-publish:before { content: '\e8fd'; } /* '' */
-.icon-window:before { content: '\e8fe'; } /* '' */
-.icon-chart-pie:before { content: '\e8ff'; } /* '' */
-.icon-chart-line:before { content: '\e900'; } /* '' */
-.icon-chart-area:before { content: '\e901'; } /* '' */
-.icon-chart-bar-1:before { content: '\e902'; } /* '' */
-.icon-air:before { content: '\e905'; } /* '' */
-.icon-database-1:before { content: '\e906'; } /* '' */
-.icon-flow-cascade:before { content: '\e907'; } /* '' */
-.icon-flow-tree:before { content: '\e908'; } /* '' */
-.icon-flow-line:before { content: '\e909'; } /* '' */
-.icon-flow-branch:before { content: '\e90a'; } /* '' */
-.icon-flow-parallel-1:before { content: '\e90f'; } /* '' */
-.icon-dot:before { content: '\e910'; } /* '' */
-.icon-dot-3:before { content: '\e911'; } /* '' */
-.icon-cd:before { content: '\e912'; } /* '' */
-.icon-back-in-time:before { content: '\e913'; } /* '' */
-.icon-list:before { content: '\e914'; } /* '' */
-.icon-list-add:before { content: '\e915'; } /* '' */
-.icon-progress-0:before { content: '\e919'; } /* '' */
-.icon-pencil-2:before { content: '\e91d'; } /* '' */
-.icon-cog-2:before { content: '\e91f'; } /* '' */
-.icon-cog-circled:before { content: '\e920'; } /* '' */
-.icon-cogs:before { content: '\e921'; } /* '' */
-.icon-calendar-1:before { content: '\e924'; } /* '' */
-.icon-doc-new:before { content: '\e925'; } /* '' */
\ No newline at end of file
diff --git a/ui/fontello/font/Makefile.am b/ui/fontello/font/Makefile.am
deleted file mode 100644
index da9cb66..0000000
--- a/ui/fontello/font/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-fontdir = $(datadir)/wok/ui/fontello/font
-
-dist_font_DATA = $(wildcard fontello.*) $(NULL)
diff --git a/ui/fontello/font/fontello.eot b/ui/fontello/font/fontello.eot
deleted file mode 100644
index 4485477e781e2444c35c47b5b8944695fcb79af3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 42700
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
DzM+#I
diff --git a/ui/fontello/font/fontello.svg b/ui/fontello/font/fontello.svg
deleted file mode 100644
index 7efcd70..0000000
--- a/ui/fontello/font/fontello.svg
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Copyright (C) 2014 by original authors @ fontello.com</metadata>
-<defs>
-<font id="fontello" horiz-adv-x="1000" >
-<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
-<missing-glyph horiz-adv-x="1000" />
-<glyph glyph-name="user" unicode="" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58z m-179 498q0-88-63-151t-151-63-152 63-62 151 62 152 152 63 151-63 63-152z" horiz-adv-x="785.7" />
-<glyph glyph-name="help-circled" unicode="" d="m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="search" unicode="" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="tag" unicode="" d="m250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z" horiz-adv-x="857.1" />
-<glyph glyph-name="dot-2" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 32-32 78 32 78 78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33q-46 0-78 32t-32 78 32 78 78 32z" horiz-adv-x="570" />
-<glyph glyph-name="arrows-cw" unicode="" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="print" unicode="" d="m214-7h500v143h-500v-143z m0 357h500v214h-89q-22 0-38 16t-16 38v89h-357v-357z m643-36q0 15-10 25t-26 11-25-11-10-25 10-25 25-10 26 10 10 25z m72 0v-232q0-7-6-12t-12-6h-125v-89q0-22-16-38t-38-16h-536q-22 0-37 16t-16 38v89h-125q-7 0-13 6t-5 12v232q0 44 32 76t75 31h36v304q0 22 16 38t37 16h375q23 0 50-12t42-26l85-85q15-16 27-43t11-49v-143h35q45 0 76-31t32-76z" horiz-adv-x="928.6" />
-<glyph glyph-name="cancel-circled" unicode="" d="m641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="edit-alt" unicode="" d="m0-150l0 1000 646 0-164-164-318 0 0-672 672 0 0 319 164 164 0-647-1000 0z m363 363l0 118 6 0q39 2 72-30 39-39 39-88l-117 0z m51 176l367 367 125-125-367-367z m397 397l64 64 125-125-64-64z" horiz-adv-x="1000" />
-<glyph glyph-name="login" unicode="" d="m661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 63 27t27 63v392q0 37-27 63t-63 27h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
-<glyph glyph-name="logout" unicode="" d="m357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
-<glyph glyph-name="download" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-144 60t-59 143z m155 359q0 33 24 57 23 23 56 23t57-23l105-106v344q0 33 24 57t56 23 57-23 24-57v-344l110 110q24 24 57 24t56-24q24-23 24-56t-24-57l-247-247q-24-25-57-25-32 0-56 25l-242 242q-24 24-24 57z" horiz-adv-x="937.5" />
-<glyph glyph-name="th-large" unicode="" d="m429 279v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z m500-428v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="th" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-22 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-22 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="th-list" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m714-285v-108q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v108q0 22 16 38t38 15h535q23 0 38-15t16-38z m-714 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m714-286v-107q0-22-16-38t-38-15h-535q-23 0-38 15t-16 38v107q0 23 16 38t38 16h535q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-535q-23 0-38 16t-16 38v107q0 22 16 38t38 16h535q23 0 38-16t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="star" unicode="" d="m929 489q0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
-<glyph glyph-name="star-empty" unicode="" d="m634 290l171 165-235 35-106 213-105-213-236-35 171-165-41-235 211 111 211-111z m295 199q0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
-<glyph glyph-name="users" unicode="" d="m331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
-<glyph glyph-name="upload" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-143 59t-60 144z m155 407q0 33 24 57l247 247q23 23 57 23 33 0 56-23l243-242q23-24 23-57t-23-57q-24-23-57-23t-57 23l-105 105v-344q0-33-24-57t-56-24q-33 0-57 24t-24 57v344l-110-110q-24-23-57-23t-56 23-24 57z" horiz-adv-x="937.5" />
-<glyph glyph-name="circle-thin" unicode="" d="m429 707q-73 0-139-28t-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139-29 139-76 114-114 76-138 28z m428-357q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="dot-circled" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m-142 304q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="ok" unicode="" d="m932 534q0-22-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38z" horiz-adv-x="1000" />
-<glyph glyph-name="check-empty-1" unicode="" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
-<glyph glyph-name="clock-2" unicode="" d="m0 349q0 188 134 322t322 134 321-134 133-322-133-321-321-133-322 133-134 321z m119 0q0-140 99-238t238-99 238 99 99 238-99 238-238 99-238-99-99-238z m172-69l0 117 117 0 0 213 117 0 0-330-234 0z" horiz-adv-x="910" />
-<glyph glyph-name="ok-squared" unicode="" d="m382 125l343 343q10 10 10 25t-10 25l-57 57q-11 10-25 10t-25-10l-261-261-118 118q-10 11-25 11t-25-11l-57-57q-10-11-10-25t10-25l200-200q11-11 25-11t25 11z m475 493v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="pin" unicode="" d="m268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
-<glyph glyph-name="eye" unicode="" d="m929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
-<glyph glyph-name="attach" unicode="" d="m783 77q0-65-44-109t-109-44q-75 0-131 55l-434 434q-63 64-63 151 0 88 62 150t150 62q88 0 152-63l338-338q5-5 5-12 0-9-17-26t-26-17q-7 0-13 5l-338 339q-44 43-101 43-59 0-100-42t-40-101q0-58 42-101l433-433q35-35 81-35 36 0 59 23t24 59q0 46-36 81l-324 324q-14 14-33 14-16 0-27-11t-11-27q0-18 14-33l229-228q6-6 6-13 0-9-18-26t-26-17q-7 0-12 5l-229 229q-35 34-35 83 0 46 32 78t77 32q49 0 83-36l325-324q55-54 55-131z" horiz-adv-x="785.7" />
-<glyph glyph-name="unlink" unicode="" d="m245 141l-143-143q-5-5-13-5-6 0-13 5-5 5-5 13t5 13l143 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 11-24 31l134 10 152-153q15-15 38-15t38 15l82 81q15 16 15 37 0 23-15 38l-153 154 10 133q20-12 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z" horiz-adv-x="928.6" />
-<glyph glyph-name="link" unicode="" d="m812 171q0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
-<glyph glyph-name="home" unicode="" d="m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z" horiz-adv-x="928.6" />
-<glyph glyph-name="info" unicode="" d="m357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="info-circled" unicode="" d="m571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="export" unicode="" d="m786 298v-144q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h142q7 0 13-6t5-12q0-15-15-18-43-15-74-34-5-2-9-2h-62q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v119q0 11 10 16 16 7 30 21 9 9 20 4 12-5 12-16z m132 277l-214-214q-10-11-25-11-7 0-14 3-22 9-22 33v107h-89q-181 0-245-73-66-77-41-264 2-13-11-19-5-1-7-1-9 0-14 7-6 8-12 17t-22 38-28 56-21 64-10 68q0 27 2 50t8 51 15 49 27 45 38 42 52 34 70 27 89 17 110 6h89v107q0 24 22 33 7 3 14 3 14 0 25-11l214-214q11-11 11-25t-11-25z" horiz-adv-x="928.6" />
-<glyph glyph-name="export-alt" unicode="" d="m561 236l196 196q11 11 11 25t-11 25l-196 197q-17 17-39 7-22-9-22-32v-90q-66 0-121-11t-90-28-64-44-42-53-25-61-12-62-3-62q0-101 93-226 6-6 14-6 4 0 7 1 13 5 11 19-25 197 34 264 26 29 73 42t125 13v-89q0-24 22-33 7-3 14-3 14 0 25 11z m296 382v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="share" unicode="" d="m679 279q74 0 126-53t52-126-52-126-126-53-127 53-52 126q0 7 1 19l-201 100q-51-48-121-48-75 0-127 53t-52 126 52 126 127 53q70 0 121-48l201 100q-1 12-1 19 0 74 52 126t127 53 126-53 52-126-52-126-126-53q-71 0-122 48l-201-100q1-12 1-19t-1-19l201-100q51 48 122 48z" horiz-adv-x="857.1" />
-<glyph glyph-name="share-squared" unicode="" d="m714 183q0 49-35 84t-84 36q-46 0-80-33l-135 67q1 9 1 13t-1 13l135 67q34-33 80-33 50 0 84 36t35 84-35 84-84 35-84-35-35-84q0-4 1-13l-134-67q-35 32-81 32-49 0-84-35t-35-84 35-84 84-35q46 0 81 32l134-67q-1-9-1-13 0-49 35-84t84-35 84 35 35 84z m143 435v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="retweet" unicode="" d="m714 11q0-8-5-13t-13-5h-535q-5 0-8 1t-5 4-3 4-2 7 0 6v335h-107q-15 0-25 11t-11 25q0 13 8 23l179 214q11 12 27 12t28-12l178-214q9-10 9-23 0-15-11-25t-25-11h-107v-214h321q9 0 14-6l89-108q4-6 4-11z m357 232q0-14-8-23l-179-214q-11-13-27-13t-27 13l-179 214q-8 9-8 23 0 14 10 25t26 11h107v214h-322q-9 0-14 7l-89 107q-4 5-4 11 0 7 5 12t13 6h536q4 0 7-1t5-4 3-5 2-6 1-7v-334h107q14 0 25-11t10-25z" horiz-adv-x="1071.4" />
-<glyph glyph-name="attention-alt" unicode="" d="m286 154v-125q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v125q0 14 11 25t25 10h143q15 0 25-10t11-25z m16 589l-15-429q-1-14-12-25t-25-10h-143q-14 0-25 10t-12 25l-15 429q-1 14 9 25t25 11h179q14 0 25-11t9-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="attention" unicode="" d="m571 83v106q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-106q0-8 5-13t12-6h108q7 0 12 6t5 13z m-1 208l10 257q0 6-5 10-7 6-14 6h-122q-7 0-14-6-5-4-5-12l9-255q0-5 6-9t13-3h103q8 0 13 3t6 9z m-7 522l428-786q20-35-1-70-10-17-26-26t-35-10h-858q-18 0-35 10t-26 26q-21 35-1 70l429 786q9 17 26 27t36 10 36-10 27-27z" horiz-adv-x="1000" />
-<glyph glyph-name="attention-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m71-696v106q0 8-5 13t-12 5h-107q-8 0-13-5t-6-13v-106q0-8 6-13t13-6h107q7 0 12 6t5 13z m-1 192l10 346q0 7-6 10-5 5-13 5h-123q-8 0-13-5-6-3-6-10l10-346q0-6 5-10t14-4h103q8 0 13 4t6 10z" horiz-adv-x="857.1" />
-<glyph glyph-name="location" unicode="" d="m429 493q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m142 0q0-61-18-100l-203-432q-9-18-27-29t-37-11-38 11-26 29l-204 432q-18 39-18 100 0 118 84 202t202 84 202-84 83-202z" horiz-adv-x="571.4" />
-<glyph glyph-name="trash" unicode="" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
-<glyph glyph-name="doc" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z" horiz-adv-x="857.1" />
-<glyph glyph-name="docs" unicode="" d="m946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
-<glyph glyph-name="doc-text" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
-<glyph glyph-name="doc-inv" unicode="" d="m571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-38t38-15h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
-<glyph glyph-name="doc-text-inv" unicode="" d="m819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-38t38-15z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v35q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-35q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-pdf" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-287 331q18-14 47-31 33 4 65 4 82 0 99-27 9-13 1-29 0-1-1-1l-1-2v0q-3-21-39-21-27 0-65 11t-72 29q-123-13-219-46-85-146-135-146-8 0-15 4l-14 6q0 1-3 3-6 6-4 20 5 23 32 51t73 54q8 5 13-3 1-1 1-2 29 47 60 110 38 76 58 146-13 46-17 89t4 71q6 22 23 22h12q13 0 20-8 10-12 5-38-1-3-2-4 0-2 0-5v-17q-1-68-8-107 31-91 82-133z m-322-229q30 13 77 88-29-22-49-47t-28-41z m223 513q-9-23-2-73 1 4 4 24 0 2 4 24 1 3 3 5-1 0-1 1t0 1-1 1q0 12-7 20 0-1 0-1v-2z m-70-368q76 30 159 45-1 0-7 5t-9 8q-43 37-71 98-15-48-47-110-16-31-25-46z m361 8q-14 14-78 14 42-16 69-16 8 0 10 1 0 0-1 1z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-word" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-656 500v-59h39l92-369h88l72 271q4 11 5 25 1 9 1 14h3l1-14q1-1 2-11t3-14l72-271h89l91 369h39v59h-167v-59h50l-55-245q-3-11-4-25l-1-12h-3l-1 12q-1 2-2 11t-3 14l-81 304h-63l-81-304q-1-5-2-13t-2-12l-2-12h-2l-2 12q-1 14-4 25l-55 245h50v59h-167z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-excel" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-547 131v-59h157v59h-42l58 90q3 4 5 9t5 8 2 2h1q0-2 2-6 2-2 3-4t3-4 4-5l60-90h-43v-59h163v59h-38l-107 152 108 158h38v59h-156v-59h41l-57-89q-2-4-6-9t-5-8l-1-1h-1q-1 2-3 5-3 6-9 13l-59 89h42v59h-162v-59h38l106-152-109-158h-38z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-powerpoint" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-554 131v-59h183v59h-52v93h76q43 0 66 9 37 12 59 48t23 82q0 45-21 78t-56 49q-27 10-72 10h-206v-59h52v-310h-52z m197 156h-66v150h67q29 0 46-10 31-19 31-64 0-50-34-67-18-9-44-9z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-image" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-72 250v-178h-571v107l107 107 71-71 215 214z m-464 108q-45 0-76 31t-31 76 31 76 76 31 76-31 31-76-31-76-76-31z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog" unicode="" d="m571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog-alt" unicode="" d="m500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 11 12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
-<glyph glyph-name="wrench" unicode="" d="m214 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m360 234l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50 0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59-27-75-92-122t-144-46q-104 0-177 73t-73 177 73 176 177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
-<glyph glyph-name="calendar" unicode="" d="m71-79h161v161h-161v-161z m197 0h178v161h-178v-161z m-197 197h161v178h-161v-178z m197 0h178v178h-178v-178z m-197 214h161v161h-161v-161z m411-411h179v161h-179v-161z m-214 411h178v161h-178v-161z m428-411h161v161h-161v-161z m-214 197h179v178h-179v-178z m-196 482v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161q0-7 6-13t12-5h36q7 0 12 5t6 13z m410-482h161v178h-161v-178z m-214 214h179v161h-179v-161z m214 0h161v161h-161v-161z m18 268v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161q0-7 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="calendar-empty" unicode="" d="m71-79h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="clock" unicode="" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="block" unicode="" d="m732 352q0 90-48 164l-421-420q76-50 166-50 62 0 118 25t96 65 65 97 24 119z m-557-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137-137-92-166-34-167 34-137 92-91 137-34 168 34 167 91 137 137 91 167 34 166-34 137-91 91-137 34-167z" horiz-adv-x="857.1" />
-<glyph glyph-name="zoom-in" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="zoom-out" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13v36q0 7 6 12t12 5h322q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="down-circled2" unicode="" d="m625 332q0-7-6-13l-178-178q-6-5-12-5t-13 5l-179 178q-8 9-4 20 5 11 17 11h107v196q0 8 5 13t13 5h107q8 0 13-5t5-13v-196h107q8 0 13-5t5-13z m-196 322q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-circled2" unicode="" d="m624 361q-5-11-17-11h-107v-196q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v196h-107q-8 0-13 5t-5 13q0 7 6 13l178 178q6 5 13 5t12-5l179-178q8-9 4-20z m-195 293q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="left-circled2" unicode="" d="m643 404v-108q0-7-5-12t-13-5h-196v-108q0-7-5-12t-13-5q-7 0-14 5l-178 178q-5 5-5 13t5 13l179 178q5 5 13 5 7 0 12-5t6-12v-108h196q7 0 13-5t5-12z m89-54q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-circled2" unicode="" d="m643 350q0-8-5-13l-179-178q-5-5-13-5-7 0-12 5t-5 12v108h-197q-7 0-12 5t-6 12v108q0 7 6 12t12 5h197v108q0 7 5 12t12 5q7 0 14-5l178-178q5-5 5-13z m89 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="down-dir" unicode="" d="m571 457q0-14-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 11-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="up-dir" unicode="" d="m571 171q0-14-10-25t-25-10h-500q-15 0-25 10t-11 25 11 26l250 250q10 10 25 10t25-10l250-250q10-11 10-26z" horiz-adv-x="571.4" />
-<glyph glyph-name="left-dir" unicode="" d="m357 600v-500q0-14-10-25t-26-11-25 11l-250 250q-10 11-10 25t10 25l250 250q11 11 25 11t26-11 10-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="right-dir" unicode="" d="m321 350q0-14-10-25l-250-250q-11-11-25-11t-25 11-11 25v500q0 15 11 25t25 11 25-11l250-250q10-10 10-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="down-open" unicode="" d="m939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l92 92q11 11 26 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" />
-<glyph glyph-name="left-open" unicode="" d="m653 682l-296-296 296-297q11-10 11-25t-11-25l-92-93q-11-10-25-10t-25 10l-414 415q-11 10-11 25t11 25l414 414q10 10 25 10t25-10l92-93q11-10 11-25t-11-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="right-open" unicode="" d="m618 361l-414-415q-11-10-25-10t-26 10l-92 93q-11 11-11 25t11 25l296 297-296 296q-11 11-11 25t11 25l92 93q11 10 26 10t25-10l414-414q10-11 10-25t-10-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="up-open" unicode="" d="m939 107l-92-92q-11-10-26-10t-25 10l-296 297-296-297q-11-10-25-10t-26 10l-92 92q-11 11-11 26t11 25l414 414q11 10 25 10t25-10l414-414q11-11 11-25t-11-26z" horiz-adv-x="1000" />
-<glyph glyph-name="angle-left" unicode="" d="m350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
-<glyph glyph-name="angle-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z" horiz-adv-x="357.1" />
-<glyph glyph-name="angle-up" unicode="" d="m600 189q0-7-6-13l-28-27q-5-6-12-6t-13 6l-220 219-219-219q-5-6-13-6t-13 6l-27 27q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-5 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-down" unicode="" d="m600 439q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 6 13 6t13-6l219-219 220 219q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-circled-left" unicode="" d="m507 72l57 56q11 11 11 26t-11 25l-171 171 171 171q11 11 11 25t-11 25l-57 57q-10 11-25 11t-25-11l-253-253q-11-11-11-25t11-25l253-254q11-10 25-10t25 10z m350 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-right" unicode="" d="m400 72l253 253q11 11 11 25t-11 25l-253 253q-10 11-25 11t-25-11l-57-56q-11-11-11-26t11-25l171-171-171-171q-11-11-11-25t11-26l57-57q11-10 25-10t25 10z m457 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-up" unicode="" d="m650 214l57 57q11 11 11 25t-11 26l-253 253q-11 10-25 10t-26-10l-253-254q-10-10-10-25t10-25l57-57q11-10 25-10t25 10l172 172 171-172q11-10 25-10t25 10z m207 136q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-down" unicode="" d="m454 125l253 253q11 11 11 26t-11 25l-57 57q-10 10-25 10t-25-10l-171-172-172 172q-10 10-25 10t-25-10l-57-57q-10-11-10-25t10-26l253-253q11-10 26-10t25 10z m403 225q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-double-left" unicode="" d="m350 82q0-7-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13z m214 0q0-7-5-13l-28-28q-6-5-13-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q6 6 13 6t13-6l28-28q5-5 5-13t-5-12l-220-220 220-219q5-6 5-13z" horiz-adv-x="571.4" />
-<glyph glyph-name="angle-double-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
-<glyph glyph-name="angle-double-up" unicode="" d="m600 118q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 219-219-219q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 5 12 5t13-5l260-260q6-6 6-13z m0 214q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 220-219-220q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-6 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-double-down" unicode="" d="m600 368q0-7-6-13l-260-260q-5-6-13-6t-12 6l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z m0 214q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="down-big" unicode="" d="m899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l164 164q21 21 51 21 29 0 50-21l42-42q21-21 21-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="left-big" unicode="" d="m857 350v-71q0-30-18-51t-47-21h-393l164-164q21-20 21-50t-21-50l-42-43q-21-20-51-20-29 0-50 20l-364 364q-20 21-20 50 0 29 20 51l364 363q21 21 50 21 29 0 51-21l42-42q21-21 21-50t-21-51l-164-164h393q29 0 47-20t18-51z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-big" unicode="" d="m821 314q0-30-20-50l-363-364q-22-20-51-20-29 0-50 20l-42 42q-22 21-22 51t22 51l163 163h-393q-29 0-47 21t-18 51v71q0 30 18 51t47 20h393l-163 164q-22 21-22 51t22 50l42 42q21 21 50 21 29 0 51-21l363-363q20-20 20-51z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-big" unicode="" d="m899 308q0-28-21-50l-42-42q-21-21-50-21-30 0-51 21l-164 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50 0 30 21 51l363 363q20 21 50 21 30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="left-circled" unicode="" d="m714 314v72q0 14-10 25t-25 10h-281l106 106q11 11 11 25t-11 25l-51 51q-10 10-25 10t-25-10l-202-202-51-51q-10-10-10-25t10-25l51-51 202-202q10-10 25-10t25 10l51 51q10 10 10 25t-10 25l-106 106h281q14 0 25 10t10 25z m143 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-circled" unicode="" d="m717 350q0 15-10 25l-51 51-202 202q-10 10-25 10t-25-10l-51-51q-10-10-10-25t10-25l106-106h-280q-15 0-26-10t-10-25v-72q0-14 10-25t26-10h280l-106-106q-10-10-10-25t10-25l51-51q10-10 25-10t25 10l202 202 51 51q10 10 10 25z m140 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-circled" unicode="" d="m717 351q0 15-11 25l-202 202-50 50q-10 11-25 11t-26-11l-50-50-202-202q-10-10-10-25t10-26l50-50q11-10 26-10t25 10l105 105v-280q0-14 11-25t25-11h71q15 0 25 11t11 25v280l105-105q11-11 26-11t25 11l50 50q11 11 11 26z m140-1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="down-circled" unicode="" d="m717 349q0 16-11 26l-50 50q-10 10-25 10t-26-10l-105-105v280q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-280l-105 105q-11 11-25 11t-26-11l-50-50q-10-10-10-26t10-25l202-202 50-50q11-10 26-10t25 10l50 50 202 202q11 10 11 25z m140 1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="cw" unicode="" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
-<glyph glyph-name="ccw" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
-<glyph glyph-name="level-up" unicode="" d="m568 514q-10-21-32-21h-107v-482q0-8-5-13t-13-5h-393q-12 0-16 10-5 11 2 19l89 108q5 6 14 6h179v357h-107q-23 0-33 21-9 20 5 37l179 215q10 12 27 12t28-12l178-215q15-17 5-37z" horiz-adv-x="571.4" />
-<glyph glyph-name="level-down" unicode="" d="m18 707h393q7 0 12-5t6-13v-482h107q22 0 32-20t-5-39l-178-214q-11-13-28-13t-27 13l-179 214q-14 17-5 39 10 20 33 20h107v357h-179q-8 0-14 6l-89 108q-7 7-2 19 5 10 16 10z" horiz-adv-x="571.4" />
-<glyph glyph-name="shuffle" unicode="" d="m372 582q-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
-<glyph glyph-name="exchange" unicode="" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13 0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
-<glyph glyph-name="history" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
-<glyph glyph-name="expand" unicode="" d="m639 473q10-19-3-36l-178-250q-11-16-29-16t-29 16l-179 250q-13 17-3 36 10 20 32 20h357q22 0 32-20z m75-391v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="collapse" unicode="" d="m639 227q-10-20-32-20h-357q-22 0-32 20-10 19 3 37l179 250q10 15 29 15t29-15l178-250q13-18 3-37z m75-145v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="expand-right" unicode="" d="m607 350q0-18-15-29l-250-179q-17-12-37-2-19 9-19 31v358q0 22 19 31 20 10 37-2l250-179q15-11 15-29z m107-268v536q0 8-5 13t-13 5h-535q-8 0-13-5t-5-13v-536q0-8 5-13t13-5h535q8 0 13 5t5 13z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="collapse-left" unicode="" d="m571 529v-358q0-14-10-25t-25-10q-11 0-21 6l-250 179q-15 11-15 29t15 29l250 179q10 6 21 6 14 0 25-10t10-25z m143-447v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="play" unicode="" d="m772 333l-741-412q-13-7-22-2t-9 20v822q0 14 9 20t22-2l741-412q13-7 13-17t-13-17z" horiz-adv-x="785.7" />
-<glyph glyph-name="play-circled2" unicode="" d="m661 350q0-21-18-31l-304-178q-8-5-18-5-8 0-17 4-18 11-18 31v358q0 20 18 31 18 10 35-1l304-178q18-10 18-31z m71 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="play-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m214-460q18 10 18 31t-18 31l-304 178q-17 11-35 1-18-11-18-31v-358q0-20 18-31 9-4 17-4 10 0 18 5z" horiz-adv-x="857.1" />
-<glyph glyph-name="stop" unicode="" d="m857 743v-786q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v786q0 14 11 25t25 11h785q15 0 26-11t10-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="cloud" unicode="" d="m1071 207q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 74 40 135t104 91q-1 15-1 24 0 118 84 202t202 84q88 0 159-50t105-128q39 35 93 35 59 0 101-42t42-101q0-42-23-77 72-17 119-75t46-134z" horiz-adv-x="1071.4" />
-<glyph glyph-name="table" unicode="" d="m286 82v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-13-5t-5-12v-108q0-7 5-12t13-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
-<glyph glyph-name="off" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34-167 34-136 92-92 137-34 166q0 102 45 191t126 151q24 18 54 14t46-28q18-23 14-53t-28-47q-54-41-84-101t-30-127q0-58 22-111t62-91 91-61 111-23 110 23 92 61 61 91 22 111q0 68-30 127t-84 101q-24 18-28 47t14 53q17 24 47 28t53-14q81-61 126-151t45-191z m-357 429v-358q0-29-21-50t-50-21-51 21-21 50v358q0 29 21 50t51 21 50-21 21-50z" horiz-adv-x="857.1" />
-<glyph glyph-name="check" unicode="" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
-<glyph glyph-name="asterisk" unicode="" d="m827 264q26-14 33-43t-7-55l-35-61q-15-26-44-33t-54 7l-149 85v-171q0-29-21-50t-50-22h-71q-29 0-51 22t-21 50v171l-148-85q-26-15-55-7t-43 33l-36 61q-14 26-7 55t34 43l148 86-148 86q-26 14-34 43t7 55l36 61q15 26 43 33t55-7l148-85v171q0 29 21 50t51 22h71q29 0 50-22t21-50v-171l149 85q26 15 54 7t44-33l35-62q15-25 7-54t-33-43l-148-86z" horiz-adv-x="928.6" />
-<glyph glyph-name="chart-bar" unicode="" d="m357 350v-286h-143v286h143z m214 286v-572h-142v572h142z m572-643v-72h-1143v858h71v-786h1072z m-357 500v-429h-143v429h143z m214 214v-643h-143v643h143z" horiz-adv-x="1142.9" />
-<glyph glyph-name="bug" unicode="" d="m911 314q0-14-11-25t-25-10h-125q0-96-37-162l116-117q10-11 10-25t-10-25q-10-11-25-11t-26 11l-110 110q-3-3-8-7t-24-16-36-21-46-16-54-7v500h-71v-500q-29 0-57 7t-49 19-36 22-25 18l-8 8-102-116q-11-12-27-12-13 0-24 9-11 10-11 25t8 26l113 127q-32 63-32 153h-125q-15 0-25 10t-11 25 11 25 25 11h125v164l-97 97q-11 10-11 25t11 25 25 10 25-10l97-97h471l96 97q11 10 25 10t26-10 10-25-10-25l-97-97v-164h125q15 0 25-11t11-25z m-268 322h-357q0 74 52 126t126 52 127-52 52-126z" horiz-adv-x="928.6" />
-<glyph glyph-name="certificate" unicode="" d="m768 350l77-75q17-16 11-39-7-23-29-29l-105-27 30-103q6-23-11-39-16-18-39-11l-104 30-27-105q-5-23-28-30-7-1-11-1-17 0-28 13l-75 77-76-77q-15-17-39-12-23 7-28 30l-27 105-104-30q-23-7-39 11-17 16-10 39l29 103-105 27q-22 6-29 29-6 23 11 39l77 75-77 75q-17 16-11 39 7 23 29 29l105 27-29 103q-7 23 10 39 16 18 39 11l104-29 27 104q5 23 28 29 23 7 39-11l76-77 75 77q16 17 39 11 23-6 28-29l27-104 104 29q23 7 39-11 17-16 11-39l-30-103 105-27q22-6 29-29 6-23-11-39z" horiz-adv-x="857.1" />
-<glyph glyph-name="tasks" unicode="" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
-<glyph glyph-name="sort-up" unicode="" d="m571 457q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="sort-down" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="sort" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="gauge" unicode="" d="m214 207q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m107 250q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m239-268l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51z m369 18q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-358 357q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m250-107q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m179-250q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269 0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194z" horiz-adv-x="1000" />
-<glyph glyph-name="spinner" unicode="" d="m277 100q0-33-24-57t-57-23q-33 0-56 23t-24 57 24 57 56 23q33 0 57-23t24-57z m241-107q0-30-21-51t-51-21-50 21-21 51 21 50 50 21 51-21 21-50z m-339 357q0-37-27-63t-63-26-63 26-26 63 26 63 63 26 63-26 27-63z m580-250q0-26-18-44t-45-18-44 18-18 44 18 44 44 19 45-19 18-44z m-464 500q0-41-29-69t-70-29-69 29-29 69 29 69 69 29 70-29 29-69z m259 107q0-45-32-76t-76-31-75 31-32 76 32 76 75 31 76-31 32-76z m303-357q0-22-15-38t-38-16-38 16-16 38 16 38 38 16 38-16 15-38z m-116 250q0-18-13-32t-32-13-31 13-13 32 13 31 31 14 32-14 13-31z" horiz-adv-x="875" />
-<glyph glyph-name="database" unicode="" d="m429 421q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0-428q132 0 247 24t181 71v-95q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v95q66-47 181-71t248-24z m0 214q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0 643q116 0 214-19t157-52 57-72v-71q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v71q0 39 58 72t156 52 215 19z" horiz-adv-x="857.1" />
-<glyph glyph-name="lifebuoy" unicode="" d="m500 850q102 0 194-40t160-106 106-160 40-194-40-194-106-160-160-106-194-40-194 40-160 106-106 160-40 194 40 194 106 160 160 106 194 40z m0-71q-106 0-201-51l108-108q46 16 93 16t93-16l108 108q-95 51-201 51z m-378-630l108 108q-16 46-16 93t16 93l-108 108q-51-95-51-201t51-201z m378-228q106 0 201 51l-108 108q-46-16-93-16t-93 16l-108-108q95-51 201-51z m0 215q89 0 152 63t62 151-62 152-152 62-151-62-63-152 63-151 151-63z m270 121l108-108q51 95 51 201t-51 201l-108-108q16-46 16-93t-16-93z" horiz-adv-x="1000" />
-<glyph glyph-name="cubes" unicode="" d="m357-61l214 107v176l-214-92v-191z m-36 254l226 96-226 97-225-97z m608-254l214 107v176l-214-92v-191z m-36 254l225 96-225 97-226-97z m-250 163l214 92v149l-214-92v-149z m-36 212l246 105-246 106-246-106z m607-289v-233q0-20-10-37t-29-26l-250-125q-14-8-32-8t-32 8l-250 125q-3 1-4 2-1-1-4-2l-250-125q-14-8-32-8t-31 8l-250 125q-19 9-29 26t-11 37v233q0 21 12 39t32 26l242 104v223q0 22 12 39t31 27l250 107q13 6 28 6t28-6l250-107q20-9 32-27t12-39v-223l242-104q20-9 32-26t11-40z" horiz-adv-x="1285.7" />
-<glyph glyph-name="cube" unicode="" d="m500-59l357 195v355l-357-130v-420z m-36 483l390 141-390 142-389-142z m465 140v-428q0-20-10-37t-28-26l-393-214q-15-9-34-9t-34 9l-393 214q-17 10-27 26t-10 37v428q0 23 13 41t34 26l393 143q12 5 24 5t25-5l393-143q21-8 34-26t13-41z" horiz-adv-x="1000" />
-<glyph glyph-name="bullseye" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m72 0q0 89-63 152t-151 62-152-62-63-152 63-151 152-63 151 63 63 151z m71 0q0-118-83-202t-202-84-202 84-84 202 84 202 202 84 202-84 83-202z m72 0q0 73-29 139t-76 114-114 76-138 28-139-28-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139z m71 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="windows" unicode="" d="m381 289v-364l-381 53v311h381z m0 414v-367h-381v315z m548-414v-439l-507 70v369h507z m0 490v-443h-507v373z" horiz-adv-x="928.6" />
-<glyph glyph-name="cancel-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m86-420l154 154-86 86-154-152-152 152-88-86 154-154-154-152 88-86 152 152 154-152 86 86z" horiz-adv-x="840" />
-<glyph glyph-name="plus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-210 0 0-210q0-30-50-30t-50 30l0 210-210 0q-30 0-30 50t30 50l210 0 0 210q0 30 50 30t50-30l0-210 210 0z" horiz-adv-x="580" />
-<glyph glyph-name="plus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m52-470l200 0 0 102-200 0 0 202-102 0 0-202-202 0 0-102 202 0 0-202 102 0 0 202z" horiz-adv-x="840" />
-<glyph glyph-name="minus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-520 0q-30 0-30 50t30 50l520 0z" horiz-adv-x="580" />
-<glyph glyph-name="minus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m252-368l-504 0 0-102 504 0 0 102z" horiz-adv-x="840" />
-<glyph glyph-name="help-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78 0 78-54 116-52 38-134 38-64 0-104-26-68-42-72-146l0-4 110 0 0 4q0 26 16 54 16 24 54 24 40 0 52-20 16-20 16-44 0-18-16-40-8-12-20-20l-6-4q-6-4-16-11t-20-15-21-17-17-17q-14-20-18-78l0-8 108 0 0 4q0 12 4 28 6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
-<glyph glyph-name="heart-empty-1" unicode="" d="m790 642q70-64 70-156t-70-156l-360-330-360 330q-70 64-70 156t70 156q64 58 152 58t150-58l58-52 56 52q64 58 152 58t152-58z m-54-260q42 40 42 104 0 66-38 100-38 38-102 38-52 0-104-48l-104-92-106 92q-48 48-102 48-64 0-104-38-38-36-38-100 0-66 44-104l306-286z" horiz-adv-x="860" />
-<glyph glyph-name="mail-1" unicode="" d="m30 586q-32 18-28 40 2 14 26 14l846 0q38 0 20-32-8-14-24-22-14-6-192-102t-182-98q-16-10-46-10-28 0-46 10-4 2-182 98t-192 102z m850-100q20 10 20-10l0-368q0-16-17-32t-33-16l-800 0q-16 0-33 16t-17 32l0 368q0 20 20 10l384-200q18-10 46-10t46 10z" horiz-adv-x="900" />
-<glyph glyph-name="star-1" unicode="" d="m440 790l120-336 320 0-262-196 94-348-272 208-272-208 94 348-262 196 320 0z" horiz-adv-x="880" />
-<glyph glyph-name="star-empty-1" unicode="" d="m880 454l-262-196 94-348-272 208-272-208 94 348-262 196 320 0 120 336 120-336 320 0z m-440-238l150-124-62 178 144 114-176-4-56 202-54-202-176 4 142-114-62-178z" horiz-adv-x="880" />
-<glyph glyph-name="link-1" unicode="" d="m294 116q14 14 34 14t36-14q32-34 0-70l-42-40q-56-56-132-56-78 0-134 56t-56 132q0 78 56 134l148 148q70 68 144 77t128-43q16-16 16-36t-16-36q-36-32-70 0-50 48-132-34l-148-146q-26-26-26-64t26-62q26-26 63-26t63 26z m450 574q56-56 56-132 0-78-56-134l-158-158q-74-72-150-72-62 0-112 50-14 14-14 34t14 36q14 14 35 14t35-14q50-48 122 24l158 156q28 28 28 64 0 38-28 62-24 26-56 31t-60-21l-50-50q-16-14-36-14t-34 14q-34 34 0 70l50 50q54 54 127 51t129-61z" horiz-adv-x="800" />
-<glyph glyph-name="attach-1" unicode="" d="m244-140q-102 0-170 72-72 70-74 166t84 190l496 496q80 80 174 54 44-12 79-47t47-79q26-96-54-176l-474-474q-40-40-88-46-48-4-80 28-30 24-27 74t47 92l332 334q24 26 50 0t0-50l-332-332q-44-44-20-70 12-8 24-6 24 4 46 26l474 474q50 50 34 108-16 60-76 76-54 14-108-36l-494-494q-66-76-64-143t52-117q50-48 117-50t141 62l496 494q24 24 50 0 26-22 0-48l-496-496q-82-82-186-82z" horiz-adv-x="939" />
-<glyph glyph-name="eye-1" unicode="" d="m500 630q92 0 177-25t141-62 99-77 63-71 20-45-20-44-63-71-99-78-141-62-177-25-177 25-141 62-99 78-63 71-20 44 20 45 63 71 99 77 141 62 177 25z m0-494q92 0 157 63t65 151q0 90-65 153t-157 63-157-63-65-153q0-88 65-151t157-63z m0 214q8-8 37-2t50 11 25-9q0-44-33-75t-79-31-78 31-32 75q0 46 32 77t78 31q14 0 10-23t-12-47 2-38z" horiz-adv-x="1000" />
-<glyph glyph-name="attention-1" unicode="" d="m957-24q10-16 0-34-10-16-30-16l-892 0q-18 0-28 16-13 18-2 34l446 782q8 18 30 18t30-18z m-420 50l0 100-110 0 0-100 110 0z m0 174l0 300-110 0 0-300 110 0z" horiz-adv-x="962" />
-<glyph glyph-name="doc-text-1" unicode="" d="m212 308l0 90 280 0 0-90-280 0z m388 492q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m0-800l0 700-500 0 0-700 500 0z m-110 592l0-88-280 0 0 88 280 0z m0-392l0-88-280 0 0 88 280 0z" horiz-adv-x="700" />
-<glyph glyph-name="doc-text-inv-1" unicode="" d="m600 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m-460-208l0-88 420 0 0 88-420 0z m420-480l0 88-420 0 0-88 420 0z m0 196l0 90-418 0 0-90 418 0z" horiz-adv-x="700" />
-<glyph glyph-name="share-1" unicode="" d="m650 200q62 0 106-43t44-107q0-62-44-106t-106-44-106 44-44 106q0 6 1 14t1 12l-260 156q-42-32-92-32-62 0-106 44t-44 106 44 106 106 44q54 0 92-30l260 156q0 4-1 12t-1 12q0 62 44 106t106 44 106-43 44-107q0-62-44-106t-106-44q-52 0-90 32l-262-156q2-8 2-26 0-16-2-24l262-156q36 30 90 30z" horiz-adv-x="800" />
-<glyph glyph-name="shareable" unicode="" d="m340 350q0 68 47 114t113 46 113-46 47-114q0-66-47-113t-113-47-113 47-47 113z m-114 60q-14-60-66-60l-160 0 0 120 118 0q40 124 145 202t237 78q164 0 284-116 16-18 16-43t-16-43q-18-16-43-16t-43 16q-78 82-198 82-100 0-176-62t-98-158z m614-60l160 0 0-120-118 0q-40-124-144-202t-238-78q-164 0-282 118-18 18-18 43t18 41q16 18 41 18t43-18q82-82 198-82 100 0 176 63t98 157q12 60 66 60z" horiz-adv-x="1000" />
-<glyph glyph-name="ccw-1" unicode="" d="m532 736q170 0 289-120t119-290-119-290-289-120q-142 0-252 88l70 74q84-60 182-60 126 0 216 90t90 218-90 218-216 90q-124 0-214-87t-92-211l142 0-184-204-184 204 124 0q2 166 122 283t286 117z" horiz-adv-x="940" />
-<glyph glyph-name="cw-1" unicode="" d="m408 760q168 0 287-116t123-282l122 0-184-206-184 206 144 0q-4 124-94 210t-214 86q-126 0-216-90t-90-218q0-126 90-216t216-90q104 0 182 60l70-76q-110-88-252-88-168 0-288 120t-120 290 120 290 288 120z" horiz-adv-x="940" />
-<glyph glyph-name="arrows-ccw" unicode="" d="m186 140l116 116 0-292-276 16 88 86q-116 122-114 290t120 288q100 100 240 116l4-102q-100-16-172-88-88-88-90-213t84-217z m332 598l276-16-88-86q116-122 114-290t-120-288q-96-98-240-118l-2 104q98 16 170 88 88 88 90 213t-84 217l-114-116z" horiz-adv-x="820" />
-<glyph glyph-name="play-1" unicode="" d="m486 376q14-10 14-26 0-14-14-24l-428-266q-24-16-41-6t-17 40l0 514q0 30 17 40t41-6z" horiz-adv-x="500" />
-<glyph glyph-name="pause" unicode="" d="m440 700q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z m-350 0q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z" horiz-adv-x="530" />
-<glyph glyph-name="record" unicode="" d="m350 700q146 0 248-102t102-248q0-144-102-247t-248-103-248 103-102 247q0 146 102 248t248 102z" horiz-adv-x="700" />
-<glyph glyph-name="stop-1" unicode="" d="m526 650q74 0 74-64l0-470q0-66-74-66l-450 0q-76 0-76 66l0 470q0 36 18 50t58 14l450 0z" horiz-adv-x="600" />
-<glyph glyph-name="switch" unicode="" d="m700 592l0-140-500 0 0-90-200 160 200 170 0-100 500 0z m300-420l-200-160 0 90-500 0 0 140 500 0 0 100z" horiz-adv-x="1000" />
-<glyph glyph-name="loop" unicode="" d="m800 540q42 0 71-29t29-71l0-290q0-40-29-70t-71-30l-700 0q-40 0-70 30t-30 70l0 290q0 42 30 71t70 29l250 0 0 110 200-180-200-180 0 110-210 0 0-210 620 0 0 210-150 0 0 140 190 0z" horiz-adv-x="900" />
-<glyph glyph-name="cloud-1" unicode="" d="m760 494q100 0 170-68t70-166-70-166-170-68l-578 0q-74 0-128 52t-54 124q0 74 53 126t129 52q2 0 10-1t10-1q-2 12-2 38 0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
-<glyph glyph-name="certificate-outline" unicode="" d="m1019 395q22-15 22-44t-22-43l-96-64 51-104q14-26-3-49t-41-26l-115-7-7-117q-3-25-25-40t-50-2l-104 51-65-96q-16-24-43-24-27 0-43 24l-64 96-104-51q-26-14-49 2t-26 40l-7 117-117 7q-25 3-40 25t-2 50l51 104-96 64q-24 16-24 43t24 44l96 64-51 104q-14 27 2 50t40 25l117 7 7 115q3 25 26 41t49 3l104-51 64 96q13 21 43 21t43-21l65-96 104 51q26 14 50-3t25-41l7-115 115-7q25-3 41-25t3-50l-51-104z m-210-156q-9 17-4 36t21 30l70 46-70 47q-36 26-17 66l37 75-83 5q-20 1-34 15t-15 34l-5 83-75-37q-40-19-66 17l-47 70-46-70q-26-36-66-17l-75 37-5-83q-1-20-15-34t-34-15l-84-5 38-75q9-18 3-36t-22-30l-69-47 69-46q16-11 22-30t-3-36l-38-75 84-5q20-1 33-15t15-34l6-84 75 38q10 5 22 5 29 0 44-23l46-70 47 69q11 16 30 22t36-3l75-38 5 84q1 20 15 34t34 15l82 5z" horiz-adv-x="1041" />
-<glyph glyph-name="certificate-1" unicode="" d="m863 449l115-78q12-8 12-21t-12-21l-115-78 61-123q7-14-1-25t-20-13l-139-10-9-138q-1-12-12-20t-25-2l-124 62-78-116q-7-11-21-11t-21 11l-78 116-123-62q-14-6-25 2t-13 20l-10 139-137 9q-13 1-22 13t-1 25l63 123-117 78q-11 7-11 21t11 21l117 78-63 124q-7 12 1 24t22 13l137 9 10 139q1 12 13 20t25 1l123-61 78 116q7 11 21 11t21-11l78-116 124 61q13 7 25-1t12-20l9-139 139-9q12-1 20-12t1-25z" horiz-adv-x="990" />
-<glyph glyph-name="windows-1" unicode="" d="m0-43l105 371q35 20 86 31t83 13l34 1q50 0 104-10 101-20 144-61l-104-370q-36 28-79 45t-69 21l-26 4q-34 3-65 3-16 0-42-1t-84-14-87-33z m126 477l105 371q35 20 86 32t84 12l33 1q51 0 104-10 101-20 144-61l-104-371q-36 28-79 46t-69 20l-26 4q-35 3-64 3-16 0-42-1t-84-13-88-33z m431-513l104 371q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t84 13 86 32l-104-371q-35-20-86-31t-84-12l-33-2q-51 0-104 10-101 20-145 61z m120 475l104 370q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t83 13 87 32l-104-370q-35-20-86-31t-85-13l-33-2q-52 0-103 11-101 19-145 61z" horiz-adv-x="1233" />
-<glyph glyph-name="spin5" unicode="" d="m462 850c-6 0-11-5-11-11l0-183 0 0c0-6 5-11 11-11l69 0c1 0 1 0 1 0 7 0 12 5 12 11l0 183 0 0c0 6-5 11-12 11l-69 0c0 0 0 0-1 0z m250-47c-4 1-8-2-10-5l-91-158 0 0c-4-6-2-13 4-16l60-35c0 0 0 0 0 0 6-3 13-1 16 4l91 158c3 6 2 13-4 16l-61 35c-1 1-3 1-5 1z m-428-2c-2 0-4-1-6-2l-61-35c-5-3-7-10-4-16l91-157c0 0 0 0 0 0 3-6 10-8 16-5l61 35c5 4 7 11 4 16l-91 157c0 1 0 1 0 1-2 4-6 6-10 6z m620-163c-2 0-4 0-6-1l-157-91c0 0 0 0 0 0-6-3-8-10-5-16l35-61c4-5 11-7 16-4l157 91c1 0 1 0 1 0 6 3 7 10 4 16l-35 61c-2 3-6 5-10 5z m-810-4c-5 0-9-2-11-6l-35-61c-3-5-1-12 4-15l158-92 0 0c6-3 13-1 16 5l35 60c0 0 0 0 0 0 3 6 1 13-4 16l-158 91c-2 1-4 2-5 2z m712-235l0 0c-6 0-11-5-11-11l0-69c0-1 0-1 0-1 0-7 5-12 11-12l183 0 0 0c6 0 11 5 11 12l0 69c0 0 0 0 0 1 0 6-5 11-11 11l-183 0z m-794-5l0 0c-7 0-12-5-12-12l0-69c0 0 0 0 0-1 0-6 5-11 12-11l182 0 0 0c6 0 11 5 11 11l0 69c0 1 0 1 0 1 0 7-5 12-11 12l-182 0z m772-153c-4 0-8-2-10-6l-34-60c-1 0-1 0-1 0-3-6-1-13 4-16l158-91c6-3 13-2 16 4l35 61c3 5 1 12-4 15l-158 91 0 0c-2 1-4 2-6 2z m-566-5c-1 0-3 0-5-1l-157-91c0 0-1 0-1 0-5-3-7-11-4-16l35-61c3-5 10-7 16-4l157 91c0 0 0 0 0 0 6 3 8 10 5 16l-35 61c-3 3-7 5-11 5z m468-121c-2 0-4 0-6-1l-61-35c-5-4-7-11-4-16l91-157c0-1 0-1 0-1 3-6 11-7 16-4l61 35c5 3 7 10 4 16l-91 157c0 0 0 0 0 0-2 4-6 6-10 6z m-367-3c-4 1-8-2-10-5l-91-158c-3-6-1-13 4-16l61-35c5-3 12-1 15 4l92 158 0 0c3 6 1 13-5 16l-60 34c0 1 0 1 0 1-2 1-4 1-6 1z m149-57c-7 0-12-5-12-11l0-183 0 0c0-6 5-11 12-11l69 0c0 0 0 0 1 0 6 0 11 5 11 11l0 183 0 0c0 6-5 11-11 11l-69 0c-1 0-1 0-1 0z" horiz-adv-x="1000" />
-<glyph glyph-name="spin2" unicode="" d="m46 144l0 0c0 0-1 0-1 0-8 18-15 37-21 55-6 19-11 38-15 58-19 99-8 203 35 298 3 6 10 8 15 5 1 0 2 0 2-1l0 0 80-59c5-3 6-9 4-14-5-12-9-25-12-38-4-12-7-26-9-39-11-67-3-137 23-201 2-5 0-10-4-13l0 0-80-56c-5-4-12-3-16 3-1 0-1 1-1 2l0 0z m120 574l0 0c0 1 0 1 0 1 15 13 30 25 46 37 16 11 33 22 51 31 89 50 192 72 297 60 6-1 10-6 10-13 0-1-1-1-1-2l0 0-31-94c-2-5-8-8-13-7-13 0-27 0-40 0-14-1-27-2-40-4-68-11-133-40-186-84-4-3-10-3-14 0l0 0-79 58c-5 3-6 11-2 16 0 0 1 1 2 1l0 0z m588 65l0 0c0 0 1 0 1 0 17-10 34-21 50-32 16-12 31-25 46-38 74-69 127-160 148-262 2-6-2-12-9-13-1 0-1 0-2 0l0 0-100 1c-5 0-10 4-11 9-3 13-8 26-12 38-5 12-10 25-17 36-31 61-78 113-137 150-5 3-6 8-5 13l0 0 31 92c2 6 9 9 15 7 1 0 2-1 2-1l0 0z m244-535l0 0c0 0 0 0 0 0-4-20-9-39-15-57-7-19-14-37-22-55-44-92-114-170-205-221-6-3-13-1-16 4 0 1-1 2-1 2l0 0-30 94c-2 6 1 12 6 14 11 7 22 15 32 23 11 9 21 18 30 27 49 48 84 109 101 176 2 5 6 8 11 8l0 0 98-1c6 0 11-5 11-11 0-1 0-2 0-3l0 0z m-438-395l0 0c0 0 0 0 0 0-20-2-40-3-60-3-20 0-40 1-59 4-102 12-198 54-276 125-5 4-5 11 0 16 0 0 1 1 1 1l0 0 81 58c5 3 12 2 16-2 10-8 20-16 32-23 11-7 22-14 34-20 62-31 131-45 200-41 6 0 10-3 12-8l0 0 29-92c2-6-1-12-7-14-1-1-2-1-3-1l0 0z" horiz-adv-x="1000" />
-<glyph glyph-name="picture" unicode="" d="m357 529q0-45-31-76t-76-32-76 32-31 76 31 75 76 32 76-32 31-75z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
-<glyph glyph-name="menu" unicode="" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
-<glyph glyph-name="sliders" unicode="" d="m196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-26t-26-10h-142q-15 0-26 10t-10 26v142q0 15 10 26t26 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
-<glyph glyph-name="list-alt" unicode="" d="m214 189v-35q0-8-5-13t-13-5h-35q-7 0-13 5t-5 13v35q0 8 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-35q-7 0-13 5t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-35q-7 0-13 6t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m643-286v-35q0-8-5-13t-13-5h-535q-8 0-13 5t-5 13v35q0 8 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-535q-8 0-13 5t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-535q-8 0-13 6t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m72-393v464q0 8-6 13t-12 5h-822q-7 0-12-5t-6-13v-464q0-7 6-12t12-6h822q7 0 12 6t6 12z m71 607v-607q0-37-26-63t-63-26h-822q-36 0-63 26t-26 63v607q0 37 26 63t63 27h822q37 0 63-27t26-63z" horiz-adv-x="1000" />
-<glyph glyph-name="ajust" unicode="" d="m429 46v608q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41z m428 304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle" unicode="" d="m857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle-empty" unicode="" d="m429 654q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle-notch" unicode="" d="m1000 350q0-102-40-194t-106-160-160-106-194-40-194 40-160 106-106 160-40 194q0 124 56 231t155 177 218 87v-145q-124-25-205-124t-81-226q0-73 28-139t77-114 113-76 139-28 139 28 114 76 76 114 28 139q0 128-81 226t-205 124v145q120-17 218-87t155-177 56-231z" horiz-adv-x="1000" />
-<glyph glyph-name="fork" unicode="" d="m161 29q0 22-16 38t-38 15-38-15-15-38 15-38 38-16 38 16 16 38z m0 642q0 23-16 38t-38 16-38-16-15-38 15-38 38-15 38 15 16 38z m357-71q0 22-16 38t-38 16-38-16-15-38 15-38 38-16 38 16 16 38z m53 0q0-29-14-54t-39-39q-1-160-126-231-38-21-114-45-71-22-94-39t-23-56v-15q24-14 39-39t14-53q0-45-31-76t-76-32-76 32-31 76q0 29 15 53t39 39v458q-25 14-39 39t-15 53q0 45 31 76t76 32 76-32 31-76q0-29-14-53t-39-39v-278q30 15 86 32 30 10 49 17t39 17 33 22 22 29 16 38 5 51q-25 14-39 39t-15 54q0 45 31 76t76 31 76-31 31-76z" horiz-adv-x="571.4" />
-<glyph glyph-name="sitemap" unicode="" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="stethoscope" unicode="" d="m714 457q0 15-10 25t-25 11-26-11-10-25 10-25 26-11 25 11 10 25z m72 0q0-34-20-62t-52-39v-220q0-89-73-152t-177-63-176 63-74 152v73q-91 12-153 72t-61 140v286q0 15 11 25t25 11q3 0 9-1 9 16 26 27t36 10q30 0 51-21t21-51-21-50-51-21q-18 0-36 10v-225q0-59 53-101t126-41 126 41 53 101v225q-18-10-36-10-30 0-51 21t-21 50 21 51 51 21q19 0 36-10t26-27q6 1 9 1 15 0 25-11t11-25v-286q0-80-61-140t-153-72v-73q0-59 52-101t126-42 126 42 53 101v220q-32 12-52 39t-20 62q0 45 32 76t76 31 75-31 32-76z" horiz-adv-x="785.7" />
-<glyph glyph-name="shield" unicode="" d="m607 314v357h-250v-634q67 35 119 76 131 103 131 201z m107 429v-429q0-48-18-95t-47-84-66-71-70-57-68-43-50-28-23-11q-7-4-15-4t-14 4q-9 4-24 11t-50 28-68 43-70 57-66 71-46 84-19 95v429q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="heart-1" unicode="" d="m790 644q70-64 70-156t-70-158l-360-330-360 330q-70 66-70 158t70 156q62 58 151 58t153-58l56-52 58 52q62 58 150 58t152-58z" horiz-adv-x="860" />
-<glyph glyph-name="search-1" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
-<glyph glyph-name="menu-1" unicode="" d="m650 400q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z m-600 100q-20 0-35 15t-15 35 14 35 36 15l600 0q22 0 36-15t14-35-15-35-35-15l-600 0z m600-300q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z" horiz-adv-x="700" />
-<glyph glyph-name="back" unicode="" d="m750 540q40 0 70-29t30-71l0-290q0-40-30-70t-70-30l-690 0 0 140 650 0 0 210-500 0 0-110-210 180 210 180 0-110 540 0z" horiz-adv-x="850" />
-<glyph glyph-name="home-1" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
-<glyph glyph-name="pencil-1" unicode="" d="m718 680q32-32 47-64t15-48l0-16-252-252-290-288-238-52 50 240 290 288 252 252q54 12 126-60z m-494-640l24 24q-2 44-52 94-22 22-45 35t-35 13l-14 2-22-24-18-80q28-16 46-34 24-24 36-48z" horiz-adv-x="780" />
-<glyph glyph-name="location-1" unicode="" d="m250 750q104 0 177-73t73-177q0-106-62-243t-126-223l-62-84q-10 12-27 35t-60 89-76 130-60 147-27 149q0 104 73 177t177 73z m0-388q56 0 96 40t40 96-40 95-96 39-95-39-39-95 39-96 95-40z" horiz-adv-x="500" />
-<glyph glyph-name="logout-1" unicode="" d="m502 0l0 100 98 0 0-100q0-40-29-70t-71-30l-400 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l400 0q42 0 71-29t29-71l0-150-98 0 0 150-402 0 0-700 402 0z m398 326l-198-196 0 120-450 0 0 150 450 0 0 120z" horiz-adv-x="900" />
-<glyph glyph-name="login-1" unicode="" d="m800 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-450 0q-40 0-69 30t-29 70l0 100 98 0 0-100 450 0 0 700-450 0 0-150-98 0 0 150q0 42 29 71t69 29l450 0z m-350-670l0 120-450 0 0 150 450 0 0 120 200-194z" horiz-adv-x="900" />
-<glyph glyph-name="publish" unicode="" d="m900 800q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-198 0 0 98 200 0 0 462-802 0 0-462 200 0 0-98-200 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-770-168q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m100 0q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m672 6l0 62-602 0 0-62 602 0z m-404-198l242-240-150 0 0-300-184 0 0 300-150 0z" horiz-adv-x="1000" />
-<glyph glyph-name="window" unicode="" d="m900 750q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-670-94q-16 0-27-11t-11-25q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10z m-138-36q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10-27-11-11-25z m810-570l0 460-802 0 0-460 802 0z m0 540l0 60-602 0 0-60 602 0z" horiz-adv-x="1000" />
-<glyph glyph-name="chart-pie" unicode="" d="m368 770l0-368-368 0q18 146 121 249t247 119z m106 0q156-20 261-139t105-279q0-174-123-298t-299-124q-160 0-278 105t-140 263l424 0q20 0 35 14t15 36l0 422z" horiz-adv-x="840" />
-<glyph glyph-name="chart-line" unicode="" d="m34 284q-42 10-32 56 10 42 54 32l98-24-52-80z m890-12q14 12 33 11t31-15q32-32-2-64l-252-226q-12-12-30-12-14 0-28 10l-286 220-54 14 50 80 36-8q12-4 16-8l264-204z m-490 220l-350-550q-12-22-38-22-12 0-24 8-16 10-20 29t6 33l374 588q8 16 28 20 18 6 36-6l246-156 226 326q10 16 28 19t34-9q38-24 12-62l-252-362q-24-36-62-12z" horiz-adv-x="1003" />
-<glyph glyph-name="chart-area" unicode="" d="m964 732q16 22 16-4l0-768-964 0q-12 0-15 7t5 17l230 288q20 22 40 2l74-66q10-8 21-7t17 11l158 238q16 26 38 4l112-104q20-20 38 4z" horiz-adv-x="980" />
-<glyph glyph-name="chart-bar-1" unicode="" d="m750 800q22 0 36-15t14-35l0-850-200 0 0 850q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-550-200 0 0 550q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-250-200 0 0 250q0 50 40 50l110 0z" horiz-adv-x="800" />
-<glyph glyph-name="air" unicode="" d="m85 534q-16-14-36-12t-34 18q-14 14-12 36t18 36q48 40 79 60t89 40 129 4 159-66 155-53 100 16 89 67q38 30 70-6 32-40-6-72-122-110-234-110-100 0-222 70-68 38-119 52t-93 0-65-29-67-51z m736-110q38 32 70-6 32-40-6-72-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 0-65-29-67-51q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z m0-256q38 32 70-6 14-14 12-36t-18-36q-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 1-66-29-66-52q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z" horiz-adv-x="905" />
-<glyph glyph-name="database-1" unicode="" d="m686 208q14 20 14-2l0-100q0-74-104-135t-246-61q-140 0-245 61t-105 135l0 100q0 8 4 10t10-8q32-52 125-86t211-34 211 34 125 86z m2 254q8 16 12 0l0-116q0-68-102-114t-248-46q-144 0-247 46t-103 114l0 116q0 20 14 0 30-46 124-75t212-29 212 29 126 75z m-338 328q144 0 247-39t103-93l0-64q0-58-103-99t-247-41-247 41-103 99l0 64q0 54 103 93t247 39z" horiz-adv-x="700" />
-<glyph glyph-name="flow-cascade" unicode="" d="m520 120q50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-88 0-131 54t-43 118l0 464q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-114q0-78 78-78l164 0q30 72 110 72 50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-42 0-78 16l0-194q0-78 78-78l164 0q30 72 110 72z m0 300q-28 0-49-20t-21-50q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20z m-470 280q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20-49-20-21-50z m470-768q28 0 49 20t21 48q0 30-21 50t-49 20-49-20-21-50q0-28 21-48t49-20z" horiz-adv-x="640" />
-<glyph glyph-name="flow-tree" unicode="" d="m868 112q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 78-76 78l-100 0q-44 0-78 12l0-204q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 204q-30-12-76-12l-100 0q-34 0-53-19t-22-33-3-26l0-114q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 64 43 118t131 54l100 0q76 0 76 52l0 140q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-140q0-52 78-52l100 0q86 0 129-54t43-118l0-114z m-678-112q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m212 700q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m138-700q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m280-68q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="940" />
-<glyph glyph-name="flow-line" unicode="" d="m168 162q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="240" />
-<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110-6-58-28-101t-61-69-68-38-75-26q-42-14-63-22t-47-24-38-40-16-60q70-30 70-110 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-204q40 30 138 60 58 18 84 29t51 41 29 76q-70 32-70 108 0 50 35 85t85 35 85-35 35-85z m-588 0q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="flow-parallel-1" unicode="" d="m240 650q0-76-72-110l0-378q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85z m-50-600q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m-70 532q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m448-420q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="dot" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="220" />
-<glyph glyph-name="dot-3" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33-77 33-33 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="920" />
-<glyph glyph-name="cd" unicode="" d="m460 810q190 0 325-135t135-325-135-325-325-135-325 135-135 325 135 325 325 135z m0-610q62 0 106 44t44 106q0 64-43 107t-107 43q-62 0-106-44t-44-106 44-106 106-44z" horiz-adv-x="920" />
-<glyph glyph-name="back-in-time" unicode="" d="m532 760q170 0 289-120t119-290-119-290-289-120q-138 0-252 88l70 76q82-60 182-60 126 0 216 90t90 216q0 128-90 218t-216 90q-124 0-213-86t-93-210l142 0-184-206-184 206 124 0q4 166 123 282t285 116z m-36-190l70 0 0-204 130-130-50-50-150 150 0 234z" horiz-adv-x="940" />
-<glyph glyph-name="list" unicode="" d="m100 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m200-100q-20 0-35 15t-15 35 15 35 35 15l350 0q22 0 36-15t14-35-15-35-35-15l-350 0z m350-100q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z m0-200q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z" horiz-adv-x="700" />
-<glyph glyph-name="list-add" unicode="" d="m350 400q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m0-200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m620 200q30 0 30-50t-30-50l-170 0 0-170q0-30-50-30t-50 30l0 170-164 0q-30 0-30 50t30 50l164 0 0 170q0 30 50 30t50-30l0-170 170 0z m-620 200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z" horiz-adv-x="1000" />
-<glyph glyph-name="progress-0" unicode="" d="m1000 450l0-250q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 300q0 40 30 70t70 30l800 0q42 0 71-30t29-70l0-50z m-100-250l0 300-800 0 0-300 800 0z" horiz-adv-x="1000" />
-<glyph glyph-name="pencil-2" unicode="" d="m0-143l68 343 274-273z m137 392l422 422 259-260-421-422z m531 494q2 39 31 69t69 31 66-26l131-130q25-26 24-66t-30-69-69-30-66 24l-131 131q-27 27-25 66z" horiz-adv-x="989" />
-<glyph glyph-name="cog-2" unicode="" d="m0 272l0 156 150 16q14 45 38 88l-96 117 109 109 117-95q41 23 88 37l16 150 156 0 16-150q45-14 88-37l117 95 109-109-96-117q24-43 38-88l150-16 0-156-150-16q-14-47-38-88l96-117-109-109-117 96q-43-24-88-38l-16-150-156 0-16 150q-47 14-88 38l-117-96-109 109 96 117q-24 41-38 88z m355 78q0-60 42-102t103-42 103 42 42 102-42 103-103 42-103-42-42-103z" horiz-adv-x="1000" />
-<glyph glyph-name="cog-circled" unicode="" d="m0 350q0 207 147 354t353 146 354-146 146-354-146-354-354-146-353 146-147 354z m195-47l92-10q8-29 22-52l-59-73 68-68 73 59q23-14 52-22l10-92 94 0 10 92q29 8 52 22l73-59 68 68-59 73q14 23 22 52l92 10 0 94-92 10q-8 29-22 52l59 73-68 68-73-59q-23 14-52 22l-10 92-94 0-10-92q-29-8-52-22l-73 59-68-68 59-73q-14-23-22-52l-92-10 0-94z m217 47q0 37 26 63t62 25 63-25 25-63-25-62-63-26-62 26-26 62z" horiz-adv-x="1000" />
-<glyph glyph-name="cogs" unicode="" d="m0 245l0 97 94 8q8 30 23 55l-60 74 68 69 74-61q26 16 55 23l8 94 97 0 10-94q29-7 55-23l74 61 68-69-60-74q16-25 23-55l94-8 0-97-94-10q-7-29-23-55l60-72-68-70-74 60q-26-15-55-23l-10-94-97 0-8 94q-29 8-55 23l-74-60-68 70 60 72q-15 26-23 55z m221 49q0-37 26-64t64-26 63 26 26 64-26 63-63 26-64-26-26-63z m318 238l8 72 70-2q8 22 20 39l-37 57 54 45 49-49q20 10 41 14l14 66 72-8-2-68q22-8 39-22l57 39 45-54-49-49q10-20 12-43l68-14-8-70-68 0q-8-20-22-37l39-59-56-45-47 49q-22-8-43-12l-14-66-70 6 0 70q-20 8-37 20l-59-37-45 54 49 49q-8 20-12 41z m31-446l6 51 49 0q6 16 14 28l-26 43 37 33 36-37q13 7 29 9l10 49 48-6 0-48q16-6 28-16l41 27 31-41-35-35q6-14 10-29l47-12-6-51-49 0q-4-15-14-27l28-43-40-33-35 37q-13-8-29-10l-10-49-49 6 0 51q-13 4-27 14l-41-28-31 41 35 35q-6 14-8 30z m118 14q-4-21 8-36t32-18 34 10 17 33-10 36-31 18l-6 0q-17 0-31-13t-13-30z m17 451q-4-27 14-49t45-24 48 15 23 45-14 47-44 25l-7 0q-26 0-44-17t-21-42z" horiz-adv-x="1000" />
-<glyph glyph-name="calendar-1" unicode="" d="m0-150l0 649 893 0 0-649-893 0z m0 705l0 221 109 0 0-141 200 0 0 141 275 0 0-141 199 0 0 141 110 0 0-221-893 0z m168 139l0 156 82 0 0-156-82 0z m59-619q0-112 123-112 47 0 84 32 39 31 39 80 0 68-78 90 48 15 64 48 12 28-2 73-27 62-107 62-51 0-86-26t-37-77l72 0q0 45 49 46 43 0 45-52 0-49-84-47l0-57q48 0 68-8 23-11 23-46 0-57-54-61-43 0-47 55l-72 0z m281 146q49 14 88 47l0-297 70 0 0 371-64 0q-38-37-94-58l0-63z m135 473l0 156 82 0 0-156-82 0z" horiz-adv-x="893" />
-<glyph glyph-name="doc-new" unicode="" d="m0-150l0 818 188 182 519 0 0-348-86 0 0 260-369 0 0-156-166 0 0-668 418 0 0-88-504 0z m373 207l0 162 209 0 0 207 160 0 0-207 207 0 0-162-207 0 0-207-160 0 0 207-209 0z" horiz-adv-x="949" />
-</font>
-</defs>
-</svg>
\ No newline at end of file
diff --git a/ui/fontello/font/fontello.ttf b/ui/fontello/font/fontello.ttf
deleted file mode 100644
index c1167906ee073765a9d01aead457c4b25c530735..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 42532
zcmdqKe|%KcnLj?~-kE#v+?mYW`E_TQOoqv1G800WB$LTZOhODHh8RMO0ck)Qkp@IS
zq>9KYP%GA=r9fHBT1s7MsrBWrDrog%t?gQLsioF+TkLM#uC?86XkF@dt!pW{eBRHw
zGsy&@+RyjDuaZ0Wo_p@O&w0*sp7Z=V&$Td%#p1HuW)UsRFI!lj>1glsqU3G-E&jxH
zS8v$+@i&Go7S?UC2(_Qsv@wQq{I|aj2X)nkYp&a|XU`H`w^%HW4cA<K;|7##xK7|#
zxn|wpta|wQy~ivT5#^r=tzLQcsI6c6y2Y|%2kz%qqd>XMHXYaB!*ycybsIMy{!g4)
zcKjO8^sc-96IUnSwmxF9?8N)n1J_->c>}x4xyfSr{7+CRw*KntRv!OKID+eU0pE`{
zTz})n<%tzPw^;TZwOH&U8*W&+;osJZpRriJ{vhh#YGGm@+heg=6yX-(Ih5=)f7zRs
zMkb&Ii%mr7dHx$*b;+oubIfwGS{ypN#<EmgWqAnI2zTax^c?*~%rch172S<ktW3dg
zhb3mQTA~)qSZJ(rY{pn-?2@s|#ukp<GPZN<zOjR2hsM4!_RX=U#-17b>Da%Gy*c*V
zvHuzS(@Ei^dNOcw+R2KOl_#suo<%#BG0RwNEHPF;mK&QtHZ=CJu`Oe}#_k{c8lHb>
z?C{vrW5>sSKKAcpzaD#g?7gu+pR}EH^XI3ZOwjWo7Caq%KlnevcY?nQo(%pb_#eSv
z2Y(fOEBI#c7r{4zKMx)Yen0p^@Vmk1gU<!O9sEDRr-Fxr-wZw$e59nW1jhfve@yy+
zc<BFskATk3J|X%<r)9dO#-coxjJpJ3*34?ZR8<*IHfK9*!Aw-hbO=qEs7>@s@ni>!
zGSNFU*9grWvO2xdWNW1@S=Zm!*ASQEEj1CpDm}UF@!PDMpV`zkcVJ*{w52Q85)TWZ
zXbAuGWVW@Vot+rohC0F)i+FY%@4rfPSlpJprQ4!DJ*RD^&moF{p*fqJ$>LH4^XqLa
zlk;WMtST-`)0y6s$#<}f9`H-Div<Jb{cP@H)*%M{E*4J<xE*EeT~%4DsQj?IV_D;l
zdG@kCt7NxDt6OUI@~U>mZ-u-OHR^Z1e#1*+$JR@?JooOi+lGpdsq9mYi_$l{)Vx(r
zmPfsTuv6<y`q8L2?$D%gq-N-*qZ>CK{Vg3p9>UqPXV-`a#WIUxsRTZ!IV2JIWPn|Y
zvJS?8!g?lE5s22P5cJDIUD$rl@qN}^KiSFRb*=vIj@~-BcXg-GzHZl{of}%jOTHUm
zw_meY*!S|i(oSQ4MQz}_mvpSz^VMDJTdiHI_AR(|^t%CK7M8Q$5f=cDilqYY4VK9?
zj=pTt#iBxv`DG@>Q!LG9vurNkl+lAsKV92eC)9K#g)98VDZR~ad@>NNtvFfH8(_Qr
z!f>=!NOmTq2IF6%0pnBvg@N9Rv5H!T%TMB!^iCXF*>SwngLjtMtrmJ`MkhMS<|>OP
z>(iZ`%Q`#R&U9zjQv4q8T-rqi{Aj}dgm@)jPgv%mor`NUE8)x^aAClcDH*L1*dPL3
za)bPuGPykdr)wW*07R0+*e9#vl8pc9GT+>RT6!>_%jn|##IL_}`MvGEj)<<iPP=r$
zzMy6_-*<aT3fi0)XqR6zONTbhHw&+qoh<R2FI~Q$9tts=$o4(kaZ#^>Kdwg{3#x1S
zI@FdjCwm4@Qo#cATCx@@5^AiVg(pA@4sc(mC19CtDeF`lqCU-G6)e_SGlP}Q^gp^d
zn^h8pxR~C-@<i2DIM4)4(cOG=HWzI2WOGfx=ydd74xn!**t>?4y}Lw@8DAE*`(s`~
zkA!-h($<(hKBh<6R`j8BW+E0~HwSa>E8HPgHLFA3ed0t+Ut-+s_6wnK$f|k9WR;-}
z6gs7`x=zL#^jOGsg_hHIchK-o%+G|S5o43CDYs*6s<ZVhpTi*;ce4~7B>!|K(?QQ%
z%z|{t<x8fb@M(4BN>y!Aqxf}1)r`Y|Uq?ob;unQY>d#81-<vMFTj40y!s*oO&zDX*
zD`<a>I3^BR>{#vnmJs1Nr2D;PDkD4xJe6{#r_z)6u;!**P!FV7(9ZHfS-A6%@q%#w
zq4DifsxsBZuHR~WfoYvvJNJoWhsKw)iw}+e4O_cOh@~1I=QjlvH~C!qlek1UiZ^uv
zC+!ixNv|}=FqTBK7_xj54m8j59+O7%sU$cQ3ljNyvdL6cJe$k`g@r<0_@cx3Cr8wO
z+U;kcG=J2=>K#W%<{rjK;y-~Y%HirP%O#$aR6!_~%pGAPE{E}|>USU1T_^DDK_YP!
zJY{U2JEAHMyHqACc#Q49(^f&T7D`5Fe1W?^iED-LTT*6U>Rd97uU~hA9A$K+8H7hO
zEfC~IfLfA0ejUAt3MN}IyKFL+LYLV}!Gw422;f)LBCrMU1xXMj>TE=(`Qti`DTKbJ
z1+UFzx3ZDBY{wMHjm;+HtnU0hB|1HO_Ac=uvB^?y$zn_z5+NEB0M)^CS|Ng!nVfkg
z(*(oZ@?~?G=?uNYgz^xh@PmrMoRbY*X%_MdK5wX@Gs8ArG5%kRHXo?(3SCQ=>qA}j
zq5lod3H>3o=+erxkePm|C&a>9;e631wwXO!Ssz@(hASI{x+>$r^&vd_ztg7uAw)cZ
z<C}Pb8!K+T<zk}M_Uz26h~FWCR#{=<6E<nO6MrLMId*aVq4yuHix_WJ)Yew8C|LEB
zi$6}ensO0*ogSeB+kJvR$B#zK`O6{B@_vk!^y4ziRhH{5pR(+>1Uvno+rH(-wV$|h
zQUBbwrkRO|&tbKLsHiW6$pP}wJ-7xr6()<>x6=F6S7PQgnTP`E`h4{XH`LyR>T}%T
zesQg!Yu;WorXLPQ8IHsNCr;VQiHl&=I52Uc$EMt2t0o^Tsf7khZj>~>e;v4TEU*sE
zM47afeu8W1^~R4%?g$CoiRpAOj{milm@@G&XbloB=JvT`<mq%>xo~n^q>nf*d@%x^
z3pDtFaVgx-7iiX8yi6Kq7r?XdGM1{7d;o-CFgl(u!Sp%zfX0%V|KBh<1xe6~&c2K_
zx)U0abfnzQNbYbmA7o1xtH+8)LU7)fqGL6f#B^rU#e?o2HZW(v`RCJR0Viwtp=&w|
zZF9t&TUjW^PCDH$8YiuaLu2wCcgSAVs<7aTZfC$&V+4anjg9kM^PP4}EqGP6N9HnO
zzMi>RP|gQ^1qiCZjm`^!aLdELTXXH(56}4Le>Mn~pn85-;$N@&=})V^{=4h1XNL=5
zMJ@mo(F@70)_Sa?9!tj325EdT<}~Q#<4YFJo7-_wbIdObpclqxaXyO`faNoJDd2}x
z%Lg3l0xb(2j8^|l)EXpl7m^_6re8|44neok6i%jc&Dj*Bcr1pQ)I^o}OIzp9>SUK#
zYr86w)uOPSl#K2{W_4;YXc<x>-8<MbZH6XSwIpMji;cguXwxG6V|Q^~;>las+>Z48
zi<Zt3tE(%!Ypj>dE8HIuyX)#+)WfVSpbZ#Tb`1=4K`Uv=CiPGxEa+NT6`+^2bVY>S
zZPef*<M&Ip3AcP}vvkKl&rGv!an67iC<}#H;dWu&r1d6KSa0fLA7Q-#RzN@`9oI9+
z1hlr&@SbPA*|b0OzrnfCjQO%Nrva-@`U1<%CiZqEDhL07g(-Ng@nB^`LnRwtA553X
zZW`AK!hVJ1a~5}r7$Y&8#`;~NEIoSZ9m`vU_GLSE-8s_QI&vplSt5}M-)~ud$KE?e
z+O64DTlQ~R-C+EEsR&l0$0?9><Iv-#PjlNP0eT$KKpH*QQ_wA=41+%P#X{TA<{@G6
z#>IOU?i>^r?Re<U#nypc?8=h2vk`M#{y4Pr(9R)#FkYSVe#~Q-JPrx>;_cEAkCo43
zQ|C!$O}v}P7Z16Om{zA5zjeF&@q37^$Fbin=(=Xa+-|1RrKWwIU9aJnnl)u4Utz6N
zo{IQPJXRJYAxIVwl9E9TDOZ{yQV<&yK4~;?d567Poy~3;nQJtVG{j!*S}uG)TU~N<
z$;6!zwwzmT&i<XaORVO4RS>ugc->BpOHUSjO2c2?uUm6k(kca;o0^+E%n7kWHQqCJ
z81LTv64PIL$@uL{kKA+<`}lLrX}pW#_n7+J&ZELH=07GJ{imCLYJ7|L>j`lQ`sIh_
zr94$R%_ouU$4tRqo)ql$4ACpeAtVh_=h!y(F;%_D5pfuQ-URvmB2_)+h_K&`%pE^T
zy%d6TN4BC0zk@0c2h~01VDFEQb)lDYgb@937}f~e0fWPmCSK^bb6yDD-_-mwInFXf
zE{vu`5*M(lc!;714zLpspmD02iht~8-Sztlrb^5$%={%p;o*Emt&lEfD@nY`53>!Y
z$s9n3@3?ek`~h;Yo4Nh&OV+b!Z7bxZmO5s<wcZ>9tewJE@WQyI31iTZD)+lNJttFS
zdEg6!BxC)~v20R~gAGPm4x$Rgdz)XDtg%EYna$_wm^Fwc<BHqjdtcofzwL_oZ!+tf
z#{bbAJ)@egbvIz0_!q~3@xJk|#`^;f#{g4Uk|_fY)_TXB*14<q?p-~%b<Q0(?AXCB
zMb*(uoG!tuHgs#peZEic-~VY}(tq22;l6EtZvQ*`r05nEOAd3uE?^Fj9S3SZv0x}7
z02=3UiIfsjLbAAmI8RC&Zb9<p(Br1)9-cG5#TdAF%j2DF$QIWm<FUGpL#&oPQI$@l
zS;BbE<<oT6e@F?p?LVqIXEnyzCHVz&hV$%j=Qp=pY&>Su;x@K$=AxTs8kf-{Rjk{k
z$KAh{Q2rnB#&jo|$YE~58p(C!A&h?zR5;smg=K|hz2z25pwoNvC)cgIYWVU?FPaex
z2i%IF%$k`ehRG+i?uS^93z81OTTD^W6zpt8Nj{Y~HBr)5p*ibJp43&7=x>2D(5gfN
zjcFMnG13&cVL&K(-5+<`Tu$3=$>mt0Y6??b&TXm!-G(287aE4rpG`mObl!QdJMA8F
zyT7FR9naMp-}ubEU?@YHhHK}y>+6T=@2r2;$*xnCBlIW^(9}5b{t8X2wq0od^Sf=T
zX4_>`T@}Sj>P@JPYJ+prm)AFZ+u>Kg<aS@K)w%b7#_4#jfeoo&((u+g?Mrt$o!@Tw
zOnN9?|7~X%Jp@o$O%YCY*>0P|B~jaCAwK)8c&~UV?7|mWmV(9yI%ZUctYmxRs=W-^
zY&zJtjM)aGRYAE2xdU|tm0!=~Q)vN105c)#!q8MuqO$oEC#fQeVd&zEpIGPKsHHVs
zbTT2PD=wE+_h~n}XK6!jW3&546IUDEX-`m8t<j*}<r0Hl_AbZnjp@e5hR@b-G_iO?
zec|fiAe!{*q9(ZkuvN9{p0s--p@;pwuH9(jWuqG{x?FaM-Bwi$dW>BhlQ-6XwxO{R
zP2Ncu+nC;AUU9zkzWBGoi{Q2y@TID-i}NM0!BkaqRe<=A#}3^d7AMRwJ4|{+P`Nx`
zWq=P-Fe(_}5xvmLcavVu=HUM=ahoj2He;Ky4UgKYtb&bw!Q0^5!A+63*aTK%{L!tm
z6DRx{c#~qh&k{3iOk`cg^Qb$+rdip5+kL}zL_NP+WpfqQC$<VaG|G8sZIw>CFITsU
zVtEr8l1!@vsM-T<NCcUawl$#*t@LZguej-<s*3**%vEl^S9k3uC4INsKRS=!pyLVM
zWnLKH)rFhZ^76H)hB-ZH(<OM?Kvyl9+IU!*u<2s4#B?hdc7e(X6R&uV$=6mQp9pQL
zoGVPY=4R^sX<3~&Y2ckAt_&@K%^^yaaB_qnRdxpF=INVLWCwG7KM1*ZhUH@z>&si6
ze5`?>iS--^lfl%vb<wncnDzv+L+U=6xGXn=$P$@Jz)RC&D%&BqG3X6g5s1Tz-l7Pw
z3kDtc%;`33$Ao;KYA$>5juWa|mh~l1b#_e?%4ECEDaArw$iLo1O=thAwk5hOyBsGR
ztaeX9k{Dr5$t}8l!h}3=v%@C4>?%`FI7EAB?WGI8T_(Z4VQ<a#O)pQk)HWnyx^r#F
zE}|W{s;KX#43OY<lg1f-E(4gxJq%3TW%bMcAl8d~E|rAYy(z%2&J_rR#-k3$QBPgh
z`kvNsNc^~@Sj947T3dKzfS_hgrINwhM<EQn=<x-Y>hWB*Cs(y{tHf-s7w1-lmjE<&
z*Hj?^GzIw%a4v<Pq8e-4G%nwn=H)zb8qhH<yum!VEJ(dh#Z$6QJV*FO-|E%(tYPd2
zO+E8hub$u2^aHkf-zs6vrSouxQWjjZcg>nhW#?!EP8vp?a^GrU-JW#}r!Ewh;wXug
zRe1^)4UOg(On7lQmCL5`z)lB)r9J2m%6vs7bOj+1=x|${BRL5#_cW&CpJnW`@pPtJ
z=w05+*qv4B#vT+`-N|}Z^z1H0)zghVta7ehvCpkURiQg$wa<;AQf#i>if7obr=p6}
zvb6!8l}gK8z?x6`O8hw>OV;Fp^MMpJQx$=!xsuMRCm1(aS92vv1E!=$2Il}V4B=%}
z89!-*917DOO?c%9bl$^u-L;m@vD=nd*-9#L98vt*TH|>tQ57L%<qv>0I22V7t&mhN
z)63NpPUi_V0yZM8lYZs0pC~IkVUOr1<h3>!Z3WRLD57x~%!K!cHGsE~y-azk9Hyiq
zZ!0h_GX3}<A9B->m@JrfCYhE8GCgrHa8tkgh)dtUl{2fYDDev&#zOjavqy`(>yMzb
z{{b&>1A`>@HP%%4o#*<a@XlPymrW5Llchk=ujf%BG98poVlrk5EWN-PnASR3<p-wP
zWce0Zw%MKXH40?ZNBjXb<~#F%H*SXt{ir>jj4xb6ED8tae4R1LDoIx5tW9B(pq)8Y
zRps$AzgATxdOd!~dnTVH`Q3>XJPlZDE2n9ag>){g#zo%gD=<~qJ;`cY3b)VnoUunY
zzH~!T-TDVrhEIe!<+bn(sFF>&Rk2B`Y6r-oqu}U*w`;t264ZZWOJ&h!6J_H8Nr7%e
zb5&>uTna4Y%2T>aA{vC03|SL1BJY<mTtJdY0w<*RM@>C_m-mPEL^3HK_dfXcgY3Ud
zm9K4f${6(Ox|cnkn!V{k@|=@h>j}|Ypow~{Fmo-}ke%YH{?7JX<IE}$iAZ(|%sdk7
ziWY2A(Eif34?Y6O@G!f=PuG-6rmC<&V-esDar*|QPGP+SBgBY9ro@3oRV6{=hQsd3
z(_N};mda|c;ZziXy(%b*ao6c`tL+KN%6_LRxdPkf%h@9-dmSv1bxP_{;QwjkyVN9`
zL&po88>50}{P#}3s``bMb8L*+7UGTLzfX5}r3D{{<l}(|i~2vV0&QI0TLXP>$l|kv
zEmfeG%JP8UEfc-a95*$*R6)ZF!plS=jgLB=YOeH%O`0AJj(fSmj=ihr+<mXv<ZntZ
zjiJO?C~VWRq490}uDAt1x|V!RlfNmSd0c3Z22Y-OfMBp;>`Y(Hbm&#pm|^V}cc-&C
zTVIo?s*D9?8xb!glmal|L=d#NYnPEo6%6E>+^mVoO~E|GFp|bRm7pT#DO`xA8JAlN
zjep``{Mwz<3C3jQyl;HN`0_Wtaoyu501%7nLh|)!a7@?&>*7)l`28^*I%LlMYfX>o
zPX}-Q2HX0L7al)(5>lh_<=uMD7!bCP(ZzoBh3K#ppG}~{g+zya-L2Vl(nK!N;YUC&
zoDpR1hp*d|Ic$^XB%n2&d;KAU0WxHFamu+FwDjfTS!pSF^M{TY`xWsnPQ^<m3A=>G
z`CK<~An~~#bTe*a@{qa}w1F>TPI1eDNmoK!ner>lf+v9J`blbfUdY0`rTkhh^8&l$
zNBCfHDw?1fqFZ`LjitrXOElBno~=tn{7y*4z%d*=9z7^deH;8##QiXLxrhl2lMm=G
zUW-kD?)@?)IR(7f^_YY}<x~VtqS!1KdgU_ehVc)jJuqH{i*}XC3edveC5kxxyDDms
z4yGPlN=r*&d0lV$8_R8^2XDP~)Aj3DeEiCRyh&5ggFgyQ0VgCAL2#`i0X3O|_(~>a
zEL+6B$P-F_^fXQ}wNOuz1Cp%6u;OAqDG2)j?#5@cR5m5z1iXM+uqCTVy7>?SWRG|&
zDq}+)yTX{5DDRKoy8McaBD+LMu;tQ<ja5uf`pXnW@;J+66|9TN(~bX*)>qWLZkHLv
z1o$`Qp8kbQvd@gTV;WoT>Z~nSgpWY8^IaZmd6~w9fbK1;+-sGXAi07qVJxGp{^I_g
z^x}xFIKx=1yHi&h|6Mj8)~){zW~_ce7s;#YRE*C@-8Q9qc0<Q>*`;yQqUmFv<eit3
z-!7Ff$AkQKA7zdQntV+@puD*W^c}=Gw6Z{xjF^V1RGPuKC7S18yG_j>g5b8)vf*AU
zkPFAK(7WWy)Hg6Dh0Dt?z8oD9;3F3EnU8?6ciW8J%<XX5Z7$}w8vo5c+1B<)hs)`N
zKbAEZua+rRr_<&5W1H!}ETvP9huPJC6&~^d^gG`n$W8vJFr5Jf%~dIQ%Lx}QNNH6m
zjsRQ+<qyHagI}p_6*0naYg>i(nO{q;U6(vC<01h=%|uaZtNm(n&2=A+f$eQ=ORbQ|
z1j%X@m$tRtdtX}{q*syIBzXy47S^rF@y}bjhzGT{WD0#J9`q4tfcL$b;+F&niE#He
zdGb}b#$1GY`60bM_;j{^X0W=B)mD|ydL{dXuDKPS>2dEz>fguh&fY7#G_}om`M^Ha
zH!I_T3%9r)Pxh-8D>C|3KeP6)>sNK4vN<2j+e~kd|HFDBY#)Dd?Y!5Gw`O&8EbZv{
z@E)8#ymsxp6Z5F@(hk7QWlZRUDrC&nkTEZhO~{ytqRHgQ_yJ3ltOub5LN@^S0`D?|
zgPI}Q!LElR?6Y8mpf=1t2oX?<@`XZD*@-!FZGx6E`2K>_7?cUph$fsCETYJ(Rfn%e
zvbhJ#WO>1~uwAxlTNI~O9=uG_q#oUBQ)*PVvI@p#)wWu31*^@v%7ReXu85v3WDbbv
zgEqI^>$h6lT=rEEy$ddn&2(3b2Ff#%O9~7!TYH((AJJ6#8oRUICUr(_F3Fj3N6Ot0
z*?HY*;n*zMDf<V_s%}N$Rc&)4sJehxG-a0?;On~-`18Vtb*trR%m0w<^5zR)zw;AK
z(*l}9;=aD3&~BqhGUz$ba;OM?oE!yGl;D__mJi|>_KzZpNs#$a6hk1TVIv&F5Q`z>
z6N9%MPeHlDu%Ste5?aIf-~vrT2oL6iXxyAf7$?LQOg@Wsi=MsUqZr!KXW6?2zu}|g
z4nU9`cMIV6XNqmH<n&FqTFbf|lC3kKOR}|WwWOB$f?d`!Y0zp*C}r{$HU$-B2UT=-
ztCG~|3rVs_6<L{2@3NKIF1Lm}N|}V3Y~?~pjR@V$7N~GI9dexre`AFzFI*_A6=GIn
z)>_5mi3F{}Tp?mdaiMmt!fRVUP}!+ECu<j}=vNhp^qUSRh_D2Qw%XbsT?1fTzF>K^
z<g|LatQm*YUS6h1SAdwT*7<ImO{sH+bci$ZxiwX#J<Mx58qJ!~Kv}uZDJaH|2keU5
zbul7HYs#w`b7WbKAmG}q*az%(t&HwO?O8-K)dX3JZk1_vp$YfQr&4swndNs}ZaW@Q
zCLcnh6Avj|m)RuV&vi^c*L|l?^MYid%j9{?Bj~f*4Cl$_K}*#p7a*GkXoaS6fW{o!
z=LtXb0B>AlYmDuIR=o{@j$8Ca>|SU2?U#}FCDt>|ZvWakp>}?yTdhE7l{e=1pEkDp
z{j>dTI@^+8^ly6g{1LYI)jfh=lf3fC)^=gqEWZj10_g__#f5-YhJV8iy(@^hHXXWG
z6QW()5dCwR<wi?YXKeYx`Q07utu64p)x=}bNSMOcG?!CVB*Y535i5x0k^WL8zYr4m
zb@7+1r!ay*iZjg-#d3NMF@*dc1=EtLf@0E&#!WI(@&K9&JYk*%DZ+5x!GkXzKKx?w
z$i95!$ce*;*&_!Jo;Y&ks8fO<3-co#zs!qH96abX<yjJHU$2XtIYn-_-fVTEI(s6Q
zsDia~UPbL?2M-=h96o$Fad7<T!P9g|9A*s%d1D8`>{KI(dj}7$Eh(xSZ>FY%A6C@n
z5^z9N=L$cySPM+q%*3+~xSdC`SvEC2=#~p{mYz!L|D??sv~kY$N5Y5bJ#*^yNj-=?
z@=<y#w68r#a{koAU+U1L{oD^56xnrVR!<LUWP>V(I1wx5!^U-D3LPbvJ}Zs5q~K@n
z_1VfbxUr$TA1J!lZ!Ow-5a}$$VMgaQjsnW#3-4Ye4DR~sE;!=vURYu!7ZDrsIBW+R
zBEP)cb`T3XRV(+0!i@-xpaYJKWK|q2+F$K=32Bkyn}s(Tj4S(>c5E2TjK9XdK7Scp
z{7iVG`-b};`Raxqp=;xPk0037$(AqeGnQpCgEw5uzMdJ}GkE2d!}s5S+nWwNxqowq
z)VGe?4hROCPi1(2o#hhXWp;gSiu)A^FDcUkK=HENVo{1ABIn>=jKPMXZYvS96M?ft
z)>|>oIKf5lM09p-`+1|Y?=hbO<tpY=TWP$vs?$C+YMX3$#Xh;A+cu(4Gs<-{{+;)U
z%paJOWE=QU_>Jc|<gDwX!pyt);b2bEBY9{E#&k_I<RU-egu8E&8o@;1T)IH0$0w!3
zl2bmS*qv*+=LVL>qZf|)=$EC#HXAI=M4HM`m9<_l{^R^G`Xqu820V}lS^juzZqXxo
zAs9CxD7*+9z;)S<DF1k27_W5{fODI$vhZI8W4v4=znBRipd>Au0|-l3fo4BAwT113
z4Yv&B9I?4oc2sr_UtoH(dtiRXKigrOhCdjh)!7%G<HfxgAz0=z80Y#Kh)bOuXA^%!
zkDT|A+klAjd;oI5UgY%nqUr*qOD+W9h*E%y4CN-I%7q{->~Rv>*?(b|m~=!n<9r}7
za=h_r0+ah`c$ZEiSf9NM+x`z+ILAK(|6{FSwC_l0V?QvTFT_ZsDkohcLYv=hI1wN3
zJdNm;)9S<IABZ|mt7x|Hes&G~D`j}UL!>w(ETxmf##Z`cc3wFW5{3;Y{2m2x%soqN
z4q{3OcE=>_WTEbW_grUl2zJ^~a2g5#0ZyGTVKIGR|0#Y;n1Og5^qpXb-<gMZkR*ec
zcGIULK5VQ2=*9|%V;Ms2Sq-akM4ZbUY`5_Vhl70uWy>56<7X&F1-?h@?DvFw#kss)
zw@mE{W;8T~j+icO-7kE8;t>b6&F;fXmN|rnjGq~=<MiXI%Kjd|D93r!g!g;G#$vlg
zc!|RE_5ztxREn?$%@KeO_`ZKu0Qx?aU29y8mN1rV2KB&!7f?kLkHABZ2`?W*(&q>n
zym3MXIb0v6?gP4?6<WWK+PcrNb{Qa@0hj^32`+E8Fg_!~<z@_7F&30dizb>2s9+<~
z&wnmSq)!=VB#Bw!l#fV4T(-UOb7*N1n~hoViv!M!G}B*fcQQ83oa@j+`S4-*`_Ud6
zjYx&|;p>NSqgAG2TLex1{0;Lqt_$r7!|W%MF>ggL9?(&O31OJS`o_<}1IjtP9Jueu
z60WEx<ppSYvnC$U?r(Uz&PjNQ8VJ<suo%+hN4t1Jvl0@h2|!1PU{9L>b0kdk1=DU~
zF9}5mDo;(H=5vrQkNcV@c9WQ4Ciw~X7475t^F<EF!w(~d4CFQLaE#M9j+6*7y)76>
zREQwTjNdgd!od>p<$Uih@pDhzzcTgRd+3FDZxIA~_YX?nP0*lD5d<ef;V$%UlIN7C
zuy%g%-Gyy4r4pQQx7i!#xEX2p2s-$$C2u}~kUF|&5Ok{g$Rq0B(k_?ux%gf)zHb86
z6Twh=1|r+!wz-$k9YXcPkC-iwJEH6>B`@BJg2Edq1Q0O%uJpyQ&0w&zoZe@mzwt0^
z^cZK->^Zk8auh^6>%sGuVuqbFyNFIt@Ht>kIglIX*&A=zhGaS^nQ)pFvrs;7DYqNp
z5TAf874{Hp=0=ut=OcFK6<Er}h=u&iv-E@waB-M^{&RD#f-PKN>MG}-&?er7g->AK
z5#9>0oqtX@bG-5R@DHEq=biqWIEqT3r5^m47Xqyu)x^P2NW;m;bXeF}fUPj5#eIcS
z`9gDHx8c;%3vi3`vycshB4Sk&;|zcR95KSFh2}c*W07J=qgWSx=i^u8(}Xw`pnX1I
zT;leC@kPBAhd^Kkeh<|~p_m>Dv;}Ih*)r-k?tv9x9n||7fxsblm${MV=0gG81|BFD
zWe4_u{THID@jeI101(}(DnGbVV2~iWi%Sv}hWU6~z_`cnXX{{Ts5RS8u#tJu+C%<!
z|IES-ww7MhsvoK;zN;DUqP~SE`)1NA)B{olgO!uyDK`6g-)eRJYsSqLi9`jv>uWmR
z)~d6$e%4C8^ZRQ9?SZeM*U?&bDA0~e-~u59yl+p4+lBu$-^cq_pfvL1L9ya7>m?)y
zT-E|{hiax5x`DRvqIMhtEF0n7Bsf?y!tUZIY@=H=07O?4YeEIz3z4eiYXU41Nx5=@
zQB8y%BJvPEyeUlbWr%D4xyIq3t%YEQ#HyQAbq$;5(sz~cEY{i!L2eCrHSSU+)TKw(
z_?xEit_gUed=A#c!<;{qggnBTNE^!Xl@r??rvmh&2^fqq1o9z_FSN#d*SNZ~6rvIL
zBoJ;6oeBH6>MjMT1V=@fyywD1s|TE&um-@gbDrIoKXRPGPRlbY_FYERYt7KTYjK)!
zOo8Ysw|d6Gt7cU7T4RjD{#fW*?9+6(rhs%Fn8LJ{7ehnM?TrYOD_LS7IZPS2AMxFv
z6Tn2Ac;^|wbY?0{AJ<d@hJ|?4jxk2is4+YGaz@pr0L9K4g;=%*%#|6Hg?UMeAKx8}
z-3KC>zDU%@o<A}sr?C%$)GP$?iA%5zIOy{%7~0UfroX{jvuH&}*QOa(kJN7yr1r<I
z`q=#&daa$C@4a&9-r2p{EaCgux;RT)upr&PX5*UvbZaw0*cMn_Qr{r!-gw_*_igOP
zmSL~2IHxF1rx9?~nRD1BkdcCONFCll*iXc?0NY(q=b9=hS<?|hMB8b^C9sz)UjA6S
z73nHG))|}TwyqvTSbP7v>ql!AAc~GQjMjO2+xHKB?7od%Yy`*dp-Ux~b%BjZ&8-Ch
zYpNG$v#{4P<n#7k)BzBQr8Cg`pM);>QNn;tmk4J7pkN)ukhLMQg79Ywd@ZUD-PpL<
zX_uGS>_^rHeXb*F+;P|~2mu4}mH}m*#8%GmyzX?q?kTqagwTckrPRK|g7$r6%b<X=
zg4#wt7Q6#2CFf;#L1kPE-Q%z$t{y=gV{q*eMOq@O!uRpoXpN5o#XP#7t(4ZuJk}Jv
z`1{!7)(NXr-ttN4tk(_B2%2&FlAJ;mCZIR1Wf{|0!IfAEE+1PemycTEcSH;l)&vh{
zbNsGLfbYO1U<a&F@_2`khsC(VHt_`87@z4^qT#e|8hkz{yu#JqhG;aLDoclI!iloV
znNBSlt_$tvN-)2@ySy$Ic6z62p@ervFxQndpDwRW_%%;B;!Gscxy~B%0ih?ma)y=+
zI|Xi$7=KYg6HaNZfFL|o)%B!5J31{|>-P(=q(F~mZx<?P@x-+F?CMN+pdPklGtYrH
zmY7yGyCdA$PzQ&)`2dX(?VbI;cv5(RTcDJuW>t9j9&fB^awQ!mwc855oE0&J)ra<`
zH&Fl%UslHuA!vckx@ehz-P_4{r^o3`RYVKN!*?jQjQ(IV;bsYCE!5Nk=;)rJ7NIl!
zeCFKgflSoZTxZH_f5rSEU!ZCIDKQEDm6OUiFvXhsk>^++-*5tR_=_-M0oN3BZ^qkF
z%w8SY`zoh-?A*puoDgKj@DT^4m4>!jW6AqK6zQkbvcryq<4BobXDjt9C^VB}SO_8r
ztu%m?{fp0YTGLK@QpQRl#4R%8wCUd|M5l(1UH~?Q!9G>ZodpFh5d3i1bmPmqzwC&b
zR1cTUxiD<M@~6C~-R{%gLw^~v^W!a~nRp{|<UxLz#e_Es_dzt9PT@Wuz}r=BU?Sx?
z?FJtkKS_4Q4`OV@>p0@{>1>tma~^RRZwVo)H$H}=5Sxm$$?-JzbE{ADm?Uni2NNZ~
zGw1POcON>WFg!U_LWk;r>~dkO2_9oVWErqijKAbJG9Q9Gl2;!RJ)#djDCvk?u)}bS
zaWjc^yu8foEffBuj4d!mWz{X_TnK_0l_z3MDL;z~o~s(rYc)CAOq-x=gFa`rW4n+g
z@QYsKRmE%fCOoXcJMV%<z<_$#W_9@4Du2LnSPfjz0BFjKX3T3C{2=6&c)VFjyeqb^
zrK*!e0T6`pQ({}$pcmkH5`af34Q4g6YOQ+M5%3%P{SGTkD+M`tDf;cEb*pISGowIF
zdprpYXMWG664B$<h5tNrisU8HOOeE|GoJmEmExAm@w|(k$6hR%I3`pPihCuogAQ<1
zW7A6gmZjqduepZ}cCrUI4eyGla&3!(y(2$fvW4wk-FHjWZQu0Z=s?w?w%RJsM!=_1
z`#iTuF^|CH{`<eTOzYGS{O#wq-%5M%7tW_W_&g?71rP<l7fG-rEn;a*l3%QNZ9B&=
zMuPZXx__bi#iTvw-Y>qdc)#d(LqZI5Um;>?k8nn2?tChqGPuMGC93hOk~*a~C=j=}
z(aCsg@`2Lw$r`=6#JHC`6NOXN*~yGQzkm_ijN1M&Rw2Ibs_dzW(;t7-+rOB2<k|6q
z*a2ECTt(YGiaHO)+|=+r7n!=U;+h75l;|S|7d53e!j?kHy#$Xo;={068m2HZHYW*N
zq*ii2+WJ0m>E)qz&8viR?RA5zHjge!itV|OQq>;3e5vte3Sg*huQ8V_h<zVhb+`j{
zgYBLfo99B*O+!9x?cP-DZEaAzv!7(Wlw=6`BUa(a<81!K{p@MJpP-}hgL`8tGXM-c
znD)RB@8#)1z<V*)STQKJ$v0s}AvvLFrk>aj!(Oe5+C{lsk_EBMS+X(KmO$Ku)$wWL
zqOyeR9hYmiE8+TEb}cSC%GmrTCN{yitUj1Hm^iTu=JSfJN)oKhX0*Co@9_F%^k5lU
zD9r6q%*|%Z&6Ja5Ug`jC_$P4(5@WtumJk+1X@!7!O3*T$oaAIfsDSa4f?E;#BDRHH
zt}1uyv@h0H%&Vwl_k>#kpsW0zd%~JK;ch9vhuamt7;e$3+}gBznBr;;&&D%XJj_iB
z4_|@O*?4I2;`7|-n1&me>OA)B3G2;(m*NP@EFRck5ToVux?K*t&B`nkd*-R~@V`K%
z2it*hRZS%;ce9ndgqQz(*F52eINi-gjJMF&==f2geSB-Lxb(~^q!C)k9z8L>RoISq
zk-YVNakrSZ%z+<WdFqm`jLPj}aIaFXD(>n)7-tn)2eFd<3FyK&C*gFZJ-JPYuHw=l
zw0EAaiQHJMlGE#M-L<uPqY7`zdc~HEw@#Z^(Nc>!yUL-J>B=W#*q9-N%C=tZfCJ=e
z_WE+<Ua~4zqty7L@nzb?(~4zpdDl&FkvP`N){qy@5qMZaenr{n^hF(?x_GHS>Su?p
zMmjI`>Z|c0_3A@9%VGx*;gOyF^Vvtm5%{p@V%#$U8h6YyvO>yG2q-*^)DT&s_(M7t
z20z8gAeo0k#&t(N{`nkj^aA0_qGf@nOusfNd9>i_a$8WgdK~ln-JzhZe05Os$Q9S>
zWu67RPK9jNNo)P{wX}I(iqd^Hf&!`hnxN*Dqt^yyR)!~Ra`4)y?A3zTluK!C{$!1c
z)xk0^Dma6yD<<yqcyu%0hZ%2D4hu#b#dPHxYNiJ@GnRz%eIV;p3V+pz3*iKhRf+UX
z$eBDx3gk|HP5Y~h`DcnwXt>T+8T(IwdXBP{ufL8Mde@od<{EfE|GD5*XYYx5ug@DF
z+r_KxBFhNl+j9JF>@0-yL*qYuuOW>U_tU`+#r=FFvzVdr6I++g_0z%8#~o+z^+C`k
zndhhQ69y-JZACk3VPDfZe!~B8!}W$oK|iKl>MT9a-%t6}rg_YLM+IA0p$+Uh2E!`>
zX{zgSsw1)V4aZ7hmAOtZ1|6C5s8MV~Gcq&|T6~>af7k4mZ2ipSbX{{`+b9oiLhzk{
zWO&HbhnbuU=5t6b$CEW7C=W|V68qB3TeRWEtTS<fpf~_bA#@!AEDI+J8Q`u%7C37<
z*YLZGL@gW<TPkykqi(pb%pPWov2+M^EotN4LY?;tzu&w}^`H5JU%hPbj^~a&cgNt5
zqqV#$(+el>{L~eeoZ3&ty2_dTq4dnk&gx>7PZv%uEByZA3tK#%TlcPdX2-z5j%R4D
zDv)m|CmeDD04KCt#l*@yiihu+)85jA(2saU$WL*Kh=+%8l@`Eof?!azRD!y&PSO@E
zIw_R65a*erSg=Au3iB48!Z^Ybgogsi#UW%m8~(f4>xXl_IU&=Z5qc82xRA`$80pp_
zWXTx77NO4J4xwvNH=7krM}>H8d{a0X5+d>FXk`OScc;^zFLw7*tp0u3tntfmB9To9
zHSCQU)I__`(q+cK8taknr!E%zwKpP!YIG@Hh-tbKGJ*?M<~r<)M@&=mtYoDQ$(7>G
zVaGy>8i4{=qs(Vs!Gpsu^XJ^8jB(t*Ls6~({Lwpp({;nKU%$Lw?E1}TE_A-}=qACe
zwDBnWdPDtH$*!bO+fj2>eS@(Gm#MB~vMYtF6I1R9+fh2tyh%S8O9^(lHR5m47tJya
z9x#eA=6tE8xqfDKe0tdLQ7p7iCKDB10#+4dag5V;act*AbS~}h^fT-;hq58-=o=yq
z1id;4F&|qz*}I^ce(R#!zIXI{w=J^v?|5d_nyc2ON7C!AG9v3VZCw+4v{<mFnAL@S
zVqH_yI!zoZ&~D*p9?I~*_}%97KQX>z7Q9}_XL-}QtA0Xlqfazv*I2)cK9$Dyb<v#7
zM@wV(FlTL$CQ|v7%nHA$;x&Ygf(?uukXU+(VaQ;{rmh`jd=I(IR-QPKc<ZfSigWP$
z%U`|~!q0o}y(eDb_nn5waat5a{Fa^e`B}*Shmh}dS+wl5KlBHGh|OO6__B+aUwyUl
z)xyc#WnWx&@wIE#7@JP|<MyqJvXwD9+T;F{frPU9-}Sh<R+84*6M=tUZI1`JU4Y`Q
zO!;FvbilBS!V+N@uvL3(sadRy#8R#eR;L+H5mJrOvq4;am#s9uoM3kvw-~pIi~U|?
z9!$E8n?3$;0J(ERW$dm%xb6Gw6SrUd`CYr1u?P^Iu-i|lNL%<wFrn<W*>)=l;M+D~
zmpA#rOzZ-J4Afkonr`v{l7WizI#|ehnV&3xZI#Tw9pV%dbTRWxPa%QOr4O8XKzQi4
z5A`7Z&8{8GFhP;@=Jpl2OQ)Fa3mX%Q#B>FACBFUOgPSOQPDzrS1ygL(#TZ2shon_v
zK9@P|3dwIYpCPX?>_43N-D+%S_!AErHuh)yRT}p+vpl;G84BBsea59d?33)b#wF|~
zQ)YWs>=gy@N<Y>rELEmXtZPy%spS}GFC_<Mgh=Pvp~v2P&p7nnd(66j@&0><_wOIR
zcmHBhFw2&`XDr*l_}+VQhmOEI)=|8mTeuCetI`pT+lMoL@^@il5E2+tAW)`)3CU>m
zwb9q;!1kEGbn!vhd}UK%qb)F$P9e|~XqtfStz*Ylz5Md35~ynF`sGP@kT+QdJObI1
zS;mhwE!#vejK3d^0)SC2#};wo1Wp`gZc?lV1)Nj{Dkt8@9x@d6e#z_htfFp<XV0A7
zBkmXLfL9%{y6V&Ua_o^Idl=L>FL<<I0q1SbaSd69q0Wc=FNlGJB#AvO2v0Y|(P@(7
z-$W^<HhbxLhNLR*8Fv_`B<6fBngsMh1jopO;Wa~@HQm<rnl|9nG{vc_YQO<w{yM9q
zN77=gfLt;BF_mp$-tlNM5=|!XC$Qdl-9Uf1cD2<Sj)eUFkXLsqZdt)5EPpGu@MwO`
z8>ivqom+;S)3nDKd4K$Nu76^u1cl{r7by-tFj#bk@_SO3{6Qw_Jw3*~#=Si~osW04
zwsbzO)+Upk+3e~y4X{`z>sUs(z4Mt)<6Eo`Kdr6VY^(7?&F#o=wQN~KGI4v-c#B>w
zoHc;lJ)kL)c95&qS4R03e2}nVvLi9Pz!hyd+LVgHB^y)F25U|<W)(u>K+>yduEXEb
zTD{*oEOz_j+L<@CxS!qTZSe|y$hQ%5Dbn&4s=8wNi0U`?XffEkH~7_K+yu*I!w19-
zqK;Tr>4=rnkgw9_tH!@d_RMD1X`CK0-Z9=8F;25iQ8ykxY8-m?RkrM?NzcV+eSqEV
zz@9YFL*eOiCI?e_%(fJ^E^R1nX7lFF`#SbK-jaKKR|k8k*dQA;9zV6^@D0|NU$)+G
z*c_X)uZS_>53mlmqy4tHnU9l5iLgSd77PIxD(ELDz=n)GLY;6%+BdYUpbqlNLTRPi
zq{8HMWG1Kq3Tj*SZ)mxv=boIVCE}T(d&1eiFnhbD<-WfDj*Kf(>&o=r7m0*ABN?s6
z6_00fdpEjV@kC9_hW#z~bbGTJHPSG&H{72I3#(f8x7^p8an(d!4ZQ~<eW9=#&QSGC
zPNFd;U))CV8F4xHdC7$1U>r~(^aDB*6fS7n(5rBXQ{>FRRt}bfKMWU9p-}qns_tIv
zV)oA9NL`OJJZL0qmdBz}9qSKe!^V?!AtyE{uz$_O+H*O>+hrZSvyZ()x3r<1y*=L>
z!GmFEPu+5QP>qE~YuP|J8^VKOMX=I?n>1I(@b=%i!rIABh0^pOt#zQyF<}!pDal>x
z(=~}{0kyEFUi7=fcv{SMh?w^fs)7Ezj^V&M1Kc-dTv+gyJ+xtQP0ivB4?R;nS+?x<
z+n>4p_GL<It+fkjkJBzi6E<b~20J3{Lw%V{-%xv`W3UgfY&*OS|4t}Q)m29uozloY
zL44@+*>8#eh`dftp5In|+Us$ZA(;Z!U)_}Ffw4@`2S%EQUM_w|_507<;Z@5V?0Kb5
z39nzjKBUDpuO_;@-tolf=wqzT_zAZw91xxpW9W5pX9CvLipaE3z>m;MvMczSD+4|X
zoS2x0xhB3&VZRr{-%nU*U2SV?t>LU`hmDC+65nZzu@L^UOP8{@TWiO=>5lMRZR?pg
zh3Ce*g~8!rWApH^8Mkk~zqm63Ya+edgCquA#+~}!Al~NzJk|IUh9}=z!wwnC@HZmH
zN?-RX-V+-hKDu-%a7g;#0WpTYrZDGu97VO6KLoN?Gu#{I00yBvp@8mSKG`tMY&qfX
zj^W`g!-8?9HiNT{ToSttQ83(*O&X`M$x=!jTf7aIl4d;+!;R<xt7h#OMp^8D5?2l&
z6q3tOuYj&jVJ)e!P;6~gR8#qW6~u3tkfh+HYHlK*FQ4CJO^Zvmra%>?!N%m~>j^oq
zb8OMb9V7U6gDZRgrkdC8IJ8;QyczGn=FxkFL6p3D=b=qrua@x+Z5+K<ce0W0Wy|gy
z8QIppdCP%~sHkZ}TMpoSlQ*Mzy+hkZ+KJ8xM~{e)2ybGSN|7(pdWn})h7+WlgKe)#
zP60&0|In#Z5A9mtvuMS(C!ak1q_FFmXSN9M2yeb)Jo3(PU;C5H^5kP%jvs&Ew}p0(
zqTTm-yIyn6Mk)%ll!oaUj+zXTrC<ags@(hFDeEoIJhR7&MxWfadZ1_ht_R<FM|gki
zfmdGH^2n3MlkNS(@32Mh5WHAN&K?zWXqR*(<e6~Wi5DXhqB@`Sf};e<hRSTRPX1hY
zdplT4es-hr_V7mQrqP|&(cWPz`zrI(<?=nk3S2I}VdqBU4Q=r)Y;g0awo2<AKFv<!
z(s+FH3jb=lT(;4aiP*csUhYr9=4J4IPzp1hP(k(^m&;fbipN82GXgq{_cT~>g{Z%n
zOAvs2vGz{Mna(npVR5W-mBkbG%+e=~GfSTop6eWcsjEw9?JWM9?-!oqZIq4^m-R;W
z9zSlpas0UO+;QU<ue`$I#|!m`g}cE&ChFsTSXfC`ZxUR6eMU!rqDHv8)2Qw0VkZ*F
z48+$u&I_M}WeNH0pDI&qW?rPqKq?<#ax-Nw7oIbm$Bv1yW0Z_s7~Hw^{)a}5W%n=L
zIcmOFyaVqg-@nI{9j8obNRL4oTnkCio5dK-Xp>u<K6dOiVck9<0><(S&RF8Lt?QqB
za{X(s?JUTom`jIX2Zc<^<0<%zg`j}$1Sh;J!uz8;caDxf-?wf}zh5}8e(BCogq_-P
zbjRwws|9Cx-My=aAeVDlak14Su7Xy26Z*M!L7MXW@MV?kgF+z_EExrp^-#GB(ST$Z
zgw>!B4NF!*q_=bnrnQjU4(W-)A8l+ljg4e##u`YE(JoWdq(~`K#Xsx%@+Mb2bfYZR
zMOM$za$4u=a9Wganief<S{@4FW-N4*ET+S&JImV3=By4kF!{!5v9hKc?5ft&lkin9
z^hcO&eoeSO9j=*gV-f$Nq}{1qa*5`&Cl~p{f;3-sR=Cskj--d*9%7$!x4O>%8o<!0
z<vg9M%hQ7Sn&p8&34m{Sl8$tJ;XMnheTfnXya{K0y7-bsNn5a|00O`x+9F<az4!}p
z0dOuIsrS$v;^A|D6~Y5NkVm}gMyK<}*|O&R95S-GwhYJ-dEi#;)Kl*&^C}nL<Z#?{
zv8=i7Qdy|%R(^9!S;+o5rzW$17*N8BS@&+ICUtCdI5vWhQ$rJVogv06&!(FbZ$Tfp
zPG|im*Z_Q3RobwZ59?R|?3NkPX{rtDSHMT33T7S@DSsZgxr>!UdTYv0En_~S25>=a
z;1Y>W!0gLm+dH@H+NxDCh-E8hu1+ithvU<=?8d86R$1B9TqvumKpFeO>gwUpG~CbK
zP_epjzki}^!*rCzE3-{2XR;gpy1-Qb3}aU$j-Bs9nEe1{Azt+PNJ2nSX#BVAMt;|-
z2aL}n+CV_I87sSCqHGr$5gdqfa*|Di=iw)xWFxHXi!3WGn=GHTe97{N<vW%iSt>fi
z-+%te#}4iP!j9W+Ucc(&SM+zcWoE>td2ALZ2mopmWhiRQ<(situ^~tT?sV4BNFpup
zXCo`g<aM@@mozle7eRpM#)&%Qp1By$@q$LQ>Tg85Xte?D+Nhv`UW5X)k)mefg+_AZ
z^q~T*xuuPmZ}vAvF`#I*0k1ZJ({sE4?O?H?MjNPE+G@#OLDqZq66U~0*h~H-S+BI&
z+f@n2*@AJoD9%=_S4t`!MPa2Ve#LIBlI>q%c3YKr=EsUyB?#90RH@3U+$RbzQA<zL
z;Y>X>_boaV1|(~o;XZ0nWpVr;1@S8oO@t~*rRHqx74tQs-OAr%+zlwK%51A$SZ1}i
zi+ed}$PP(hibI80;63$BD!dzQBacL(L4r^E8Y_Se;B8i^*cf^y{BEMVXw!yX7n*jk
zFG+>2<JDJUpWu~(%0Z$w{)X|67vPpe^WA3m<BVN22^R4U8)V^YVM`pwir<E8eK#WC
zJY?2SZ@zxTqMmFrtU_kZH&(%r2IT^hc?O>?ph!RDJSF`p6>s)6W*aflNQnwi36ea~
zeKNiwrFC^<6Vwy@(~&9^`U?Gn62)8cH8wP&D%DP9k)#4`&_Ap=NT`Z?(6`LmT*ZkZ
zH#SHJ2KO{`dL@@9CP2*|lttMgDh|IW4<gaYX1$?&?%!RevguZPO~BW5RgElPW@Vxv
z^s{h--qNoLj#Y|ibE(0eI$4-5C^q3;$>*$GjeX_#u#4h}l~p&DiOLF<8GX_AiUm8{
zWO>LgyDPo*E3<a7LPR>XJ&}BL{@?Z5Agi|7?B0~WX;p(_Ymp!>bueF*D>>aRID`=-
z%@CEDl~!vjD2B~(SNXG_S%4%MOz~HH()|&evJ78BVdE#G`SMFXnX)Rvh-!6&%Mwd7
zcvLlR5Uuu$n`L{ORdVX~U_exskrrWo2L-tXC?A*^tpGk*m%#p9RpPd6*ru^?!&DDJ
zARlDa1s^iS?;vXsPpr%%CyFrwE6p?zLi?FhhnK=a8a=a}$2E!c%@g(VZ1tJ#+^;Wg
zt<DObS+LSC?(8&-(`%0`VHF1vShJM;`oaUU(>K19r(hHwFkSOpPXCj*6yNqJ#`DZf
zU~@agyG+Ta3D=ki^KH>pMy@luCNPVxv~%J^5C~inEi(10B(Em?U=#}M=K;a+kQFm-
zqKN39zPo_<F~B#ev(Z;1=E7Tx?=D=@J*TrHpH5EdaQN;*K2X&RWruQ06~o{zCRF=S
zPQM~@TT)*jfm1kN5Job(CO<guiw*UBsCV=zy9<6RGaKlb5#72~Tw<);%43|lKTqQu
z?h5`q7n`$ns}b#-H?JgtC_6E49*g$&jvt*j4<D`3%*W_xyj6UTQuWO<tC@bF4}Qad
zzB2(o(3Tt5;Tsb?z6FDXX+?cCJ4qd(z0u7j*H~KkwdvqTN69md`($9E5K+(@zhAtj
zL8a$uQ0YEh7vsx{F%A@8M)iyFD<`leoQRO8bvo}UZQh&=JiE|&uTwhnvPslAZ07|@
zzig6pt~&djiM&yt#TI4k-KH1PDc_BcbK_q>w8r)9Rhk1v1CIn;IVC`4GA3Ux*pqoq
zuWAq9)H`Kk)}!XeSb>!o$kW1dz6F*wlvuzi&e;6U7wI5K@rmWWWXqAbq@)2hQt}{Z
zei9xh{72C9U>+d({QP^2SplZ=q>&ePU2tzM$)l^qlaNO%0bd!{>0s=k)W%@(fhnOl
z%?QaJE4Yj{yma%HuePkXZQpI9S>dZ&HXpr#jT9YHE4G~2>G{I6mp)bS3|xBK(eM{M
zJ5SI&CfV_Ep$+*=O@GD!$&M{`A-~%x3y>YnBo^f7Eqpi(`B%)WD{yL%i4@Ba7#}v<
zgLi_~^Bycc0F^S6%N{I!Hd>2_sUC!5QHV4|gu*Yorf`yvOk-P<{qxcxe3)!$M>I4o
zLcft|(UxekChT<yW<iC{pSLE2eL?Q$v?Ah}yDRmIjO+e+fsh_gxm}qEG1{3G4Q}>w
z$p!N4d+>#=P`ozk%2dGJY0Caj@b8jb0bF<S*to(p<<qPQ_8m-3grsqP#d%PntjNO(
zWi%%zH~X89APoTKDgQ*4I9B*VOSAE-W-RK(?~BkSePqQ<71&%0FWZ#ctOCJ2DA|96
zYT>}vu8jsSaDl2*Zq`QE!r((O)s&->#&-ZT8+A|p4jhdl`bQiVatAGJnIH)nFgzi}
z4TAGJ@TE4giJ*(<7c@mPCnD~^0EB0_l}dQIki4X?CPw*3uG|9sN0jVwA6(B-uNMhz
zy<R%?#qE-aD2rQ`t-fb9i`Bq&&3<5h15EI{<1LOimTcR$<WlG6K^8?drs+InO#NjW
z(m~ArrAjemeh(Tq-WuHOyc8a=wl|zPd{7L-$@S+agdbvkm$*NnLPLgF%ukpiVXFd%
zbaCINjWPfdj}@*uJvY03ZKAcWt0(H#q>#I(tFJXK=q_P9cz-KfIeur=jB5n9v9MvJ
zuRC3%$ySG4Ti4UOyuO&H74sFgiDkm`Sf{~HxDDVO|HY)YqT_I9OKZpD!X2H@bdhtS
ztKgg{!2W_57k<m53=mIB`2?}nlduRem>Z>H6r+hRVwomi(Hae<6S3#}hHiTvX0Gq0
zjnIzAx8dJFJd%#Zp09nLS-$oBZNq&J4e!`?_|9$I_6H<ACk(@06okh^eL51-oL1AO
zOqNEhAHYmAKLS4}!8Z*i%7wf2NYp?6pg$VX=}#D@>&Y^<Ct4H5zftqY_=)*jw37_M
z{-Oa#?kV<{X4r1XiX)sN^UC;uaJS)n?X{x8W#?;TY#|gg_`r^fJK&EX8%{{!wk}Ld
z3@YOz3=B2X4iRpF7B_3EzDRIs$B(}daV^qSjqO23cQ&Z$#>+03ljV$;vB@o`YizGp
zw1=JjndlVW0d9!5V@oi7e+-<hg2_zIL%c=^0C-td3YoVcXbZ2zqGya>oXW8HnVhjS
zBxLk7Hrab4-jGvxFxIJQXN)(q@37bz=Xgt~E~DeilY^Q!gpY5*?{)SS7^zOdUKqr?
zd~Uvu_<(D{&C*s(sR^_G>D7C;batrm#a+3*t6K&KHw+92r}n;PoLaodnZDz;2f9}8
zHMUUchC$x$0r3vlmV?+ehq*qj%!WQxHX~IwA6#x_!@yRsD&$cu7|z&xD`4H)z^z+*
zYFk$r>&4hhMhAOgbhKzNZ>`<8Z@ioJ9NoNcbAeV%-%}AX*TG5i{A^_B#+U9OuYsOm
zy2t-P)2?Q8)U>W(FBlywT5Cq>Eil;?t!<;D!gKrf)wYhWz<XXW;|&jhKU05V$ca7+
zQL50f8q<^%E`pbmuibnp8LZ*8hK-v0=%5N^-~lylx`h+6)+5Oum_e0z2buU@I(Ft4
z$Bt1Sqe(rc>l^t|czpbUm;SKtnSEjm^!OkU!d@{lK#?$9)Ba#m^XpOFJW3rMFTG>@
zgyAE+Cak7i-3|Jwf*oci!8)U+I#C%xI;Ij>X`1no2u{EUpKX%~F!yNyQWL~8ZxVR7
zYxpKiQr}O9m@d|y`GpuCe?T~8!e>G@VuF>>IB?_7u;WHnh_rKiI?<cygSNt3tULuv
zv6&mS5+Vh11%f!h|DohGvkk@`?<=Pdy!PJX_rI+(Om$H(_UwH{^Pjr^vG-rQFG3+{
z@B_V%96V<bzessd8^A|u%fVY|uL1c^@%_bW3LFOKg2ld?zI_q2(T52NemANCixf0l
z5qfZ~s@AQ@BGNzUjK$A5y|7uomCGcs+h4)=V!rAOJDnO*$8J*mUhjKvsR?XCIulB=
zh?=fdLxWbQ;EKiGa;k5*1{JIIID26HUv))Ix`ciW+TQ`zqe;$C(%6^4ydz)W&%~dA
zhfv-MXpkTucy>u@_5mhtLcvd7JgS{(cS_1{{Qf>wm+sT_4Suiih8`ZbxKu3O{w_sO
zPlff>{t(yGOn;6kKdDb6*(ZGb<eMkbtny@=pw~>C(9}bSz$ra)tmgTNgBXkY&paj$
zWxzE3<Nu2IE;>1VIs;t){_NZ0mxVV#RXKc<M1A_QiyLByy#lT!igWD{5QRrUpcFI;
z{^VjdxH4&162E|@IF;-WX=@))j%pCt&U^0)ttMjC8ag)adi>5VeAg<Lyk*1aE#0dY
zrG+PxoynTaNM`vqx~y~6x?=rxBSW|K@XKV(Wz{BbH`GqOjm6X&t#j4X)Wk-mWJ5Gj
z6I<Vtj6|Y)V*{~xGRe;q)IwLRPKedetv6yxSDnke8IGNEljslh`~dugI@XgIxPtn0
zs<K??@etKHlFVYJnnbw)eK``}cmYt5$zf0?YY30IUNwI6nj*!Xef!zCVkJ+7EBf5q
z&l#`mdF2)3%~xJ|)vu5C-EvFcsA5&K-Q6ssX&d3g>fY%0r(0Xurh!~%>(EeZXKny+
zku1GKxJ}IR$g*~1hJq|TXLf6@ex_!HEX^H#7#Gf?O!poZ^nkyOCk~`ph+B}kaP1@3
zK<hlxq?yY-U^f|>pk#V_GK0}W!;5=+Mtgb(4n+qGCAA5<h}71$)Ycj<I=0lZ6Xx}1
z)a_f>$zF~3Q|<ov4FmLepZ3B)FRQC*t-(JQiqKEZnYYYq^a)0C>@j}?eVS|O2mOs8
z!#VicC$3sHyzsKVp1c)2xSE80@U$$HU1&q8z~nUv&ZHnrmT+}=HrEv}EzIuYgsT<Q
zSEPbBdrFa|90|5!&&5&R;r`LOI6sM|N8?F}pDrFA?dK;0ql*`hFRg8<scEVG3I1?)
zw|Rxm(N)cc_y8eb00?j%FP<NFCL_)pidQ#uuFLK$;%R4gUFTa-ju+u)CVs|~<~1*D
z#qM~MCZDyugV-k@A||Rqla&==&_3pAexmc9i9t_I^s?Bw2RZosu+fCO+l2S4MX1;<
zMUd7P!04G6CQf_Lg7$=o_*Br|+>2XtP4!`oeAvi4DAK?4023fCk~d*PrtAXxi-1iM
z-fewS-9T%)wl*8G_7LfDXlquqW;6VH{K+YRvq#Jh2zL)gTNh_TE|(T-NSMSr5TESL
z@o3bmx2I#AE~oYkYc3~DGf$}5KNG(fA@A*c3u4OW&FyT@))KPu4LdMJzw9};i#$;%
z^-G-S)45eZh#wr1cgzk_FEb_$^_V?kZ(L}wguDCW#+~Pk*!ZRb`81flF_xWE0kiSk
zA?137<qiH#>w>S8<U=0cQT&WGeZIPDX(#bR5a7Lq?_Y;OdlPHW#50ik%!emVimlMc
zu!p<&N3r?Gu?wx5Z5Q5P%B*|wji%aj{l%OIYZQNG&R2H)dFC?yfXJ{vFxT@u`e0bB
zEfyeB%r$=B@V3PWPvG)u(H~EKbL_I1h!+GS<i37twBYLxHU)xm%Jlf(eM8UCD0%!3
zTgl^ZJ#~A}?U{YT``qo{-wyx$BU@g1<$<y1kE58-!-IiJbRYU!!#tuNP)|cm!c>Gn
zKY79vStlX5Ug$hnq96sRenD}vm7I_Iqfvi`)Fd1}aE5OxBffv6s6QEBoxC>BkD0pD
z)SrT4Rro2~L*K}EOtC_yUN;l_&oTEK>T05-+|k@GfvXh8>hlCpnroD)2$}#IKcQZ*
zIs(=_7w?Tm9~wOrjUIvoKUrMV|B675K19{%FbOJ+c>z}XLbmdh*W)<%8%Ly?2SiBo
z;#g~~DFKu2FnZ=q_5wZ?PhZC)shA{h1P@VjSff4(A8tQdm%xA3rxDQtgFkq0z{f<p
z*n#ZcQ0n1Q>t@~`u?LuFTnPtx>tJ~MG=41K%|2%Qo^`PYj5Eek;SZ^Hq5SsnV5=}~
zd$~#brav(SX&2uf$6g`mRi0*qc0js?=Z!os_>MRHeF0d+K&6NrgkvU!aO-3$Z?aSu
z+vf@`zwV|P_1Xb#*36r(TOM-lGmB=<LQ(w;Ui70yw=BXxR;YAUkSYbQy6&dZN`>cU
z)Q_|;TC{nwz~jZZKWZW7X9K>XhHqUpCB4|k1~{{z5F{YAkRXoWTR_=FK`HqZAg3JE
z2+M`Lu?mnQIv0=!=~L7$A&Kw*9bh$9<4t3k@z!^jDXzBeOM?~ah*}Z6w7bovEIUup
zzhrxJ*7RT<8~HIy3dS#t5#tvEOWyyNo|$N-9&VC`fwa_W^80T=_miMWHCTo%w^=@C
z*+=vBZ+Gvw<K|CX)>e-}z<iwz#rz`<LI)xyq-u;;p+3f|FlaJ-Z|0z-;4<ZdCg$Nk
zH3v5s_zU&&*zAH&E<tdUe3Pdmio3nLFI=HqtyYBly4y8*WJK0@k$Sbli`>emve?d%
z>uq73N{`~K&Ncc2u3ka+Tr{gu6}pvf#g%HQ*8{E|zo%_hqhhU=8YLxMohZ}P2F*ER
zdX;3Yml~~Vq^1f*jb$z>5-zcZY9dnDD|sSbYa&-`jYZ^e;*VD=(P@2`%r*g;eM#T6
zD2J`Lr`@fL5V$?P;fl6u>@gW=u(tfL2#2+c!vWZW6L54%MR1M5Ce1msvRW1zr3OhY
zpHby<JDc28q@bt?u%Sqs7KlpWni#zLhs*1%@s=d^m4F|^N57TtTcD^r+G*6q`SHbV
z7gYv48pWeye4(CspxYyi8MavbR^w0fBTx$w&WNPKr@$!Da8nj$OMfbWcm}NGSUO;b
z#`mQp*+<p4p4oogG3NWn_2V;#g16RJrv`vOSNUL5kI>sVQ&`mC59VfC|EV$6)0u4f
z?9e{puJN0NfB3i0<G+9V+<^n*U)&Iz-q@|XD`8pAHqBz$#{b*d)d#n69rs&&6X2Ic
zOO^y#J_@2fh&z&?DT$&fnFdJFwq%ErWf_na8^^<efC%Cc;2=uwWa>Chs<4XFI!@}k
zuB*C9>ol%=pg$_RZtJ>f>bh=i>kqfnN&H8qlgUhHJe`c&>10}^zkPRrNPRRjq4aL|
z?c29+ci+Cf4;=73dqa`fUf-T4J9{tvGu8Um(lgIKE6!&py|2QicH9^9=K~%-pW(-z
zdT}3!ry(fYcd-?CPJw45Z+e2qE`99}>G>~yc>ewO&wtZ9{Mw~&k?-06&86Re{(b)M
zJUhd+K+glCFFf2e{-09B`x8!iAG~&ocYXmpbP{)n$ME(?9#ygD5!3m-7VnXtpOlXK
z`3nArz7L(ZphTN<xX6;c_;D0(2Iag1Jy?1x>w>4*{vDT(`*GnuD84~JZeu<!O}S4v
zb<blfXl@_wM~2JKv}RvGmM7X+4(c9k_t4VQrLE+@7A|yJF;<JGNn0^qa||Ab$8C=7
zc^6}&usuyW+am0_PXAW>N}E>V*XbvGc0JpgbL94I*~WF(9^WY!XBy<NEzKfi&x7u^
zaYP7Ov;Upoodj(K^gfOH36#fCDsGVhzl*|pzKuR_I>pO$roHHv5%}v<w5@S@(r!D;
z0-ulV`55p+m(DbfA=by$v4y*J5d%C1`iePW-S8V|tOM4YqbJ_`;c<n|?pQ*vJ3;$*
z6kIF_UBBY$^(gAlS^5vufpd|502<rQ1#Ln;kIUtUE^O96kNT_V!+#Uf3(~*gX>pQX
z@^pJ<J<oV0Z_azcx5@X3|55)Nfk5Edz$f^GG#7j__-^o0Xd-kj^y9XPwoBo2;U7i%
zBagL9?MK_6Z2w8eOvl-dkMR)Yc;|n0jdnfPEo0Nx@7?g!n)Pd*>XCX*^!(4-6Kh{u
zH@og#Z1Q*PrnlCwS)W_~+J?Y}^oG+Lp5E}<hL1LSHV$k&zVXW&mp6VK4M%rJt>|*}
zlTH1bPH+1D%{SgWd-F3lf3P{Ud1CX~%@=RkbW8r0Wm%Gk<ZQ2}cc%BkmcW*yTh4F!
zX{<Yzj-89W82iE2H~PB!9_hQdEwt^_wjXalw7s<b-1fJ39NO{T&f%TU_OIzb+W$)b
zkK*0&p?Er8ia!zmnKGt4qCBm<qbllI^`d%dVE=$M@XBCdaCq>c!Dj|94F2ojPlq~(
z28NCgJ(d_xJU6`U*7V5m$k~y9*)_8}ynAH#k=>8)esj;*o)<^AjGh>MbaZ+2lfB)0
zC-$D&`~2RI#=>LSv6sd^x^4Kj6StikUpGEG{@%XqzVrLL_n+PW-2M;t|Lpdm+n>Ar
z(}~R!_fDL@BXq}qCufuAFh_h(by4~hpVaW52c;YD?MTu{1Q9O&)<_?>^5ia1oVzeW
zUft#59(><tpNo4zpLB5_@Ix-{$7cvfT|5B#!!91iGvPTGkKmm5B(7Y^hc_vtlhU_c
zoFweF>f#;=FMqkX7j)IdeZcp*xL;aF_qccfblt_n(lM&JctqMpf1ffdXR5`yf+g=r
z?UaXy5+m~L8QBD>Sk_9iR<{afwI)x<d9!R8rII<In+r|+h%r|$Y1L-636B}oTG1@a
ziGiUeY1$|oRn0PTEWLJWZrHN&a=vOV$Ol}xa;0jXG<0jAU|E&1!NF!v9uE(hOsRtH
zrm9jAt|~~DB;&^^Qh4|;OT)MjOyDB`85=X7!O?WNirAn^lS-gycx~1~FK(%!K7o=)
ztqiIGjuP+zNyl;FD*6#{%%Oh?QmR+AUMb}mxOt4CkS;^70cdw6*EG1wf>RS3<e-nE
zdkwE6&cPxJ|MEi1s?bW74hV^t^_AfdZaWD%I=BafS1eG+q(S_<a?GZEh$@b7{tG+c
zsw2J@hwZJrgrBD%?9GY|zuWMpTm(B~cHl8`7j@GOw1#@<Mp}!nB;Q2qX#;J<o1>e=
zC;qpPOue*)Vzia|aI3H#zwf*gJ9EcLAr&vN;q639&@lGM8=+nJrr91E#Y=Q!*gbC?
zA1U)2sS|Vu@@0x9X^IZeG~G#e(cN^A4$(byFMWn)=rA3j`{*d$Psiv1N>hf8(}Q$^
zK1&bL!;~eBW=W?U8I-3vDo~M5(ma)Dfy!i31z%09QjILC(<xfS&h%&K5&9K8gZMnQ
zjsI18l)gZZ(HH4)`VxJaevQu3S7?cTozBr$=?VH8{RaIeJxO1ur|28>P5Lc*ntq#}
zq2Iwx(eKi8^m}xkejl&x{{elAzKwgzKcW}tJM_o&U3!uJgkGXQC7T+wOfS<b^eVkZ
ze?}MRb$WyToZh6rpueQQqPOU;>23NO`X2o)eV_i0-oab1@6tced-RX=PxL;0Kp)aY
zU%h5j+Y3giqUyz}UNUllnxR$og4fdK{5jK7hugGj)m*Hp`l7#5EtaiLT`TKGsmUKQ
zaz#tkN|wK5VzCEsH0xF<XD*gYrj`p?1r=+1&hS`;AmhcF<*Qj*HOvRqSg2TM{H#PR
zP_J-@h@*#U6^i8uE8yzoG3Pt<f}zhlebhuyFPW$fhs}Al_PM%NHFDlcvFtU@7y-?)
zG`$e0mrKR+yiXho=7QlXmh)yiADU7F#_5V#wZaY%X4DE0)gg{exxuPoEgFW^0l7xm
zLQ-PRwpQ(i7S@y-f^Hf!`mL%~D|mCJ?n9};FS=?Or>!6(#qz24CV?xVe6eJxm0Z3}
zAd6--7Z#Xt8XoU*TFphHS}`#ZPE&C~n=`z+ITu7>wE~M(qpTM~x>hpEIjxHMauC<q
z!fpOpc3$ui(_Fy7AptRM9XxGK8-^qGR#Xgkl#G09E`~cru5U4l*;aGKD&~+uNH7Cw
zbNCn&lFf=yZWE1+g`HMLgXkzoT6qpGV3vr33Z9UI*DGNMVPR_=)C~{OrDrusbnRYE
zt5>e*$D(d%O0CbjgS$*QQ&5DUu2oF+%IZ!m#&N@Jan7+Hh-*JE_6$J#N;h^m_PZ8@
zFMAt7ad{d%`l46Y7a{W$Rvld6Aj}f173%qX$p|4n3Q*4o7O=d`>KP7et(*(#W~roA
zYDT+LSH*xGO{(yjuTs*^bnu}yo$V`YSgdBnkD#gN{FVm)c+Gs?FIHkmt64_1SetLd
z=v7Od)vDgv`dmaes#Y;y!~!tTr8Zv+*09E)dYgc(xsNgboK}a<HLO~k)<ZcB^0k@~
zDi!m_Y~4KL*Xy%J&Bw>kY`s*fVQB{!i)9F?b+67sY9df6)oW^^Q-EerB!UaYGLyR;
z*rIo?OnGXeqkyDmH8V?KK`WLZQDmq@`{hIh8s`!`E^!i!n(#v<H4(YI{uANWf=+a{
zP^@hvEGMTV+5}`*`Z2F+!pDbjGt26WumqEl@K-eC#X!~2kp`fPSz(nHi<VySl}xk3
z`LCW+6Fn>3tzr#BL!)CQEz#!s3^Li*yToxgSSjjOy=wRtjB-6#D;0A{!ti~~$>!S0
zdd&(r4r_OS<DX`wY_cYKvpOHF6)j^yt3(hExX!ETSjmA}p=gwHLC3L)kaJdn1w0yT
zp4IgE0Ow>l6YF1RhliU<6Ex>E0;h?y3Sb2*u~;hv99!Ios}zl}6MJm6iz0n%kyb>i
z39nYHhMU2qCff5Qb5Yf`ny%%HHc_#vhKsS7h@j0@ahfZ13B00JwNeSIFM&jEiPPe(
z9zEC2Mj(BvRuShG_MGd!TrP~u(7CEntEodx^M?JLpob%TbmPzmycTZd=Y%*Zl#NAk
zEk)wjft<Su_u|Ty6xo*UPfulJ`QQbq^YB4CaNqH?JrcEdWU_gA>Hf6s>C;{h;kH26
zW3$oTUR%o8QYtpNj5~u=HmTaA*m5?n+8#yD$@W__wr|_<<sB4GP3cod9!&SfdZSBe
z*`Aq6_u3PgsBDiiHk!%E4Tnj~**idTYqCAW?L*A@)=XN45=)wFhiB4RP-JckGq#(t
z-Pve1lgUJFif1x0TbfB5nT%?C6?saweSI1f@~39fwm+7%1F<C3&)AezZJ!c@UUIJC
zpH0f#;tbA5Tgp!9wzt0*^pw0LFF|%=$lnLE4yUs-QSC@39m}9~;=VMRqHL5qvTFMk
zJD7?u<5E_*CV*-z8H0;sNzL}m=55k3zU}W<?I3=)21-U!`URgf3l^w3k<Bnmc2X!A
zQkH`eDK(Ys?`=7|O<C>yup@=yP$312v+~qZOyh|Vo|2;MO<Rsa$)=XJw=bqmIzvRR
z)7{>RUg+F1ZDpr+j+t0;ITH3xrF)~X-b{b5YIi6Nk7vrxX_KnmslWhPw%b#8vt2-9
z$&B5>wIir?pr+bg5YsJOBEthZ)V4cQS$Qcd+nsQlYIiFKkER>G++=2}-C@K|tM(1b
z!Nci;_c_F9FX%mjzD8+CU8(!ijjpbgO<L0KigS=6bd!yCK6Kz<(>lzAw{Irh;K+ru
zl1rFg9=5+XhHgzf>a=qg#6GuXV97M}pUz?uS54J*Ca{4=pfR`@(X@XVd#Z|P=uxDG
z<e55}w!30UdCHC;D8rbyY*Nl*_*c8JWp1aGOfF>`YXWh*8jo&)n{I?{J#p1ut2Bt=
zI{2C4O-jSdaJ|y-G2Eau{0uiLjR3=_(g-r#q%=YdZ&n&@3^yy1-4XvK6uAY8Y=!_C
ziZJYjA`G`c5r#1+!f-1TVb}*n7;b|i47WoOhC84L!<~veF5<jjf&JZCIfY5c@}y~i
z_D&9}xMKIm?S3p51(7<9kh<o2iD{!T&Q<>}2jWGw)z%!)I$P<t@yk`h%L6ODvbt$d
zk#`9_hrmNqS1(s&forP8bZOlyBGpdrkBv6)Gl{Sy0lT5-HM?XHwc4m^4=V#VjjQ&p
zzlaqPrh|P1Qz5PElLzE!UYT&=T}w;Tv1w$2G;%g_9+vB^yfG-o--Q&i4$+VQg2ir2
z#f_zbm@JPkLDufe&GLXF!}dWYxMVxai+SR3`el#om7_0vws|*ZlAPc|NR=25BgPJ3
zX<-&uuM;e4iaVLylgj2|wl}5akYhY4EebrF!NR<<j|P>Hbz=v#(P#`K9DrQ_Vid@`
z#vo9HGocTw8@~4=kdU{p&;$}SbnX*M;E2-*r?AUoAxieJ4`ht)-{$%tHV)T}3bGx-
z>XqdKv1uNRXKSx;85`hwR63d-kjHW2V~t%Rgk5%dpbxdX(9}A$IumtuaAjle%s@xg
z9&<HFHK!)a=iVz#Y)<8EN=zPLuN^?v9nTCj@LCNP-gt|Q*}P2N*CGq<X4h3b`xSdv
zyxFo!=<SNVJHCV%;$T_Aa=dC_Ov`{B$M_S%T^xW-?{aX(uqp<yNE{vSK(auBZbfR-
z-d`Mw)7J`&Unct4Z=6@gW24dD74zMjadk|xGn!6KvHiX5c~;T2qh<0WOkV3OPMpfI
z4toad1lHozb?66>Yw5-wdl)>^iai2wCwpxQew7d4oYnNxT?&VzeJ9*{w}KzSxdX^S
zAjHTaWtjx!9w35pFY_eP^cm)1WQKVdIm|qa9ATdQK<;B6MvgKMBlj~8BgdF$0>}f*
z!$_KW7|AdXBgdI11>`~IVdMn!F!EXEVdNp^xgE&E%)>~Qc^J`{hml#u-qUik&K3JM
zkaGeX2WE(P0(l=QdBq-WanEr@a2Eu|+(m&g>q*7l+hU#PieN1Xj9C{1#;j$<9&53h
zToJ4lfidgn1jejY1z)T1G_Q=3aXVz#-mNpI`BbAyxX6Cz2rfYA2_$9bvbxfc{7GCe
z^gA%L3cilBN1LFym{*!?Y^Ae@aj|$d-SFln8{4?{M(9yIo1ZwV<BAC^xF*gtr1t&`
P^z$#-zOUl!Fe&{XToHil
diff --git a/ui/fontello/font/fontello.woff b/ui/fontello/font/fontello.woff
deleted file mode 100644
index e0007cf3c54b81e62aeaeec8976b8feb2e5a21c0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 24196
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
G0002s37CTb
diff --git a/ui/libs/jquery-1.10.0.min.js b/ui/libs/jquery-1.10.0.min.js
deleted file mode 100644
index 01c6881..0000000
--- a/ui/libs/jquery-1.10.0.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v1.10.0 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery-1.10.0.min.map
-*/
-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.0",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=lt(),k=lt(),E=lt(),S=!1,A=function(){return 0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=bt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+xt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return At(e.replace(z,"$1"),t,n,i)}function st(e){return K.test(e+"")}function lt(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function ut(e){return e[b]=!0,e}function ct(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pt(e,t,n){e=e.split("|");var r,i=e.length,a=n?null:t;while(i--)(r=o.attrHandle[e[i]])&&r!==t||(o.attrHandle[e[i]]=a)}function ft(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:e[t]===!0?t.toLowerCase():null}function dt(e,t){return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function ht(e){return"input"===e.nodeName.toLowerCase()?e.defaultValue:t}function gt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function mt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function yt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function vt(e){return ut(function(t){return t=+t,ut(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),r.attributes=ct(function(e){return e.innerHTML="<a href='#'></a>",pt("type|href|height|width",dt,"#"===e.firstChild.getAttribute("href")),pt(B,ft,null==e.getAttribute("disabled")),e.className="i",!e.getAttribute("className")}),r.input=ct(function(e){return e.innerHTML="<input>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}),pt("value",ht,r.attributes&&r.input),r.getElementsByTagName=ct(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ct(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ct(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=st(n.querySelectorAll))&&(ct(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ct(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=st(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=st(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},r.sortDetached=ct(function(e){return 1&e.compareDocumentPosition(n.createElement("div"))}),A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return gt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?gt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:ut,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=bt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?ut(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ut(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?ut(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ut(function(e){return function(t){return at(e,t).length>0}}),contains:ut(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:ut(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:vt(function(){return[0]}),last:vt(function(e,t){return[t-1]}),eq:vt(function(e,t,n){return[0>n?n+t:n]}),even:vt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:vt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:vt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:vt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=mt(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=yt(n);function bt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function xt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function wt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function Tt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ct(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function Nt(e,t,n,r,i,o){return r&&!r[b]&&(r=Nt(r)),i&&!i[b]&&(i=Nt(i,o)),ut(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||St(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:Ct(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=Ct(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=Ct(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function kt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=wt(function(e){return e===t},s,!0),p=wt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[wt(Tt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return Nt(l>1&&Tt(f),l>1&&xt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&kt(e.slice(l,r)),i>r&&kt(e=e.slice(r)),i>r&&xt(e))}f.push(n)}return Tt(f)}function Et(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=Ct(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?ut(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=bt(e)),n=t.length;while(n--)o=kt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Et(i,r))}return o};function St(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function At(e,t,n,i){var a,s,u,c,p,f=bt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&xt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}o.pseudos.nth=o.pseudos.eq;function jt(){}jt.prototype=o.filters=o.pseudos,o.setFilters=new jt,r.sortStable=b.split("").sort(A).join("")===b,p(),[0,0].sort(A),r.detectDuplicates=S,x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!u||(n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;
-if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=x(this),l=t,u=e.match(T)||[];while(o=u[a++])l=r?l:!s.hasClass(o),s[l?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})
-}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(n.unit=o,n.start=+a||+r||0,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);a.finish=function(){t.stop(!0)},(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/ui/libs/jquery-ui.min.js b/ui/libs/jquery-ui.min.js
deleted file mode 100644
index 17eab79..0000000
--- a/ui/libs/jquery-ui.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! jQuery UI - v1.11.2 - 2014-10-16
-* http://jqueryui.com
-* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=h&&l.down||l,d=function(){o._toggleComplete(i)};return"number"==typeof u&&(a=u),"string"==typeof u&&(n=u),n=n||u.easing||l.easing,a=a||u.duration||l.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:d,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?r+=i.now:"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,d):e.animate(this.showProps,a,n,d)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.2",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)
-}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.2",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.2",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.2",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.2"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0
-},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,z,H,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),z=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;z>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],j=H.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>H||$&&H>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(H.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===H.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"'")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(j&&!v?" ":W?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.2",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
-},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=u-t.height,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.2",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;
-if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.2",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.2",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
-f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.2",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.2",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(" ")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=(this.options.max-this._valueMin())%this.options.step;this.max=this.options.max-e},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
-return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td> </td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.2",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>▲</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>▼</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.2",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]
-}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.2",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){u.of=e,o.is(":hidden")||o.position(u)}var a,o,r,h,l,u=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(l=s.clone(),l.removeAttr("id").find("[id]").removeAttr("id")):l=s,e("<div>").html(l).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(u.of),clearInterval(h))},e.fx.interval)),this._trigger("open",t,{tooltip:o}),r={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(r.remove=function(){this._removeTooltip(o)}),t&&"mouseover"!==t.type||(r.mouseleave="close"),t&&"focusin"!==t.type||(r.focusout="close"),this._on(!0,i,r)}},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);a&&(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)))},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
\ No newline at end of file
--
1.9.3
5
11
Hi team,
As I'm working in the new-ui I'm constantly checking different locales to see if the elements are fitting the design specs or if they're breaking the layout. For now I'm only facing issues with Spanish language as you can see in the attached image.
[cid:image004.jpg@01D0EA36.CE9DDC50]
[cid:image003.jpg@01D0EA36.957CEBF0]
In the design specs some strings in this page are different. For instance, "write rate" and "read rate" becomes "write" and "read", the memory is read in % values, "Max" is replaced by "Maximum" and instead of "KiB/s" we see "KB/s". The headings are also different.
Should we keep it as it is or change it according to the new-ui spec? What about Spanish language? Should I increase the height and break the line or trim "velocidad de" from these strings?
And in case we all agree in changing the strings, where can I do that? I noticed some files in "po" folder but I'm not sure which one is the correct file to edit.
Thanks,
Samuel
2
1
10 Sep '15
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
po/de_DE.po | 137 +++++++++++++++++++++++++----------------
po/en_US.po | 104 ++++++++++++++++++-------------
po/es_ES.po | 137 +++++++++++++++++++++++++----------------
po/fr_FR.po | 139 +++++++++++++++++++++++++-----------------
po/it_IT.po | 135 ++++++++++++++++++++++++----------------
po/ja_JP.po | 131 +++++++++++++++++++++++----------------
po/kimchi.pot | 104 ++++++++++++++++++-------------
po/ko_KR.po | 133 ++++++++++++++++++++++++----------------
po/pt_BR.po | 135 ++++++++++++++++++++++++----------------
po/ru_RU.po | 135 ++++++++++++++++++++++++----------------
po/zh_CN.po | 129 +++++++++++++++++++++++----------------
po/zh_TW.po | 129 +++++++++++++++++++++++----------------
ui/pages/guest-edit.html.tmpl | 8 +--
13 files changed, 937 insertions(+), 619 deletions(-)
diff --git a/po/de_DE.po b/po/de_DE.po
index 439dce4..6f4c5d4 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -310,13 +310,6 @@ msgstr ""
"Virtuelle Maschine %(name)s konnte nicht heruntergefahren werden. Details: "
"%(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Zugriff auf die Metadaten der virtuellen Maschine %(name)s nicht m��glich. "
-"Details: %(err)s"
-
msgid "The guest console password must be a string."
msgstr "Das Konsolenkennwort des Gastes muss eine Zeichenfolge sein."
@@ -407,6 +400,24 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Fehler beim Anschlie��en der Speichereinheit. Details: %(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+"Die virtuelle Maschine '%(name)s' kann nicht ausgesetzt werden, weil sie "
+"momentan nicht aktiv ist."
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1520,6 +1531,13 @@ msgstr "MAC-Adresse"
msgid "Available system users and groups"
msgstr "Verf��gbare Systembenutzer und -gruppen"
+#, fuzzy
+msgid "Users"
+msgstr "Benutzer"
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Ausgew��hlte Systembenutzer und -gruppen"
@@ -1562,37 +1580,6 @@ msgstr "Abbrechen"
msgid "revert"
msgstr "zur��cksetzen"
-msgid "Add a Storage Device to VM"
-msgstr "Speichereinheit zur virtuellen Maschine hinzuf��gen"
-
-msgid "Device Type"
-msgstr "Einheitentyp"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"Der Einheitentyp. Derzeit werden nur \"cdrom\" und \"disk\" unterst��tzt."
-
-msgid "Storage Pool"
-msgstr "Speicherpool"
-
-msgid "Storage pool which volume located in"
-msgstr "Speicherpool, in dem sich der Datentr��ger befindet"
-
-msgid "Storage Volume"
-msgstr "Speicherdatentr��ger"
-
-msgid "Storage volume to be attached"
-msgstr "Anzuh��ngender Speicherdatentr��ger"
-
-msgid "File Path"
-msgstr "Dateipfad"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "Der ISO-Dateipfad auf dem Server f��r die CD-ROM."
-
-msgid "Attach"
-msgstr "Anh��ngen"
-
msgid "Start"
msgstr "Starten"
@@ -1626,6 +1613,37 @@ msgstr "Herunterfahren"
msgid "Delete"
msgstr "L��schen"
+msgid "Add a Storage Device to VM"
+msgstr "Speichereinheit zur virtuellen Maschine hinzuf��gen"
+
+msgid "Device Type"
+msgstr "Einheitentyp"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"Der Einheitentyp. Derzeit werden nur \"cdrom\" und \"disk\" unterst��tzt."
+
+msgid "Storage Pool"
+msgstr "Speicherpool"
+
+msgid "Storage pool which volume located in"
+msgstr "Speicherpool, in dem sich der Datentr��ger befindet"
+
+msgid "Storage Volume"
+msgstr "Speicherdatentr��ger"
+
+msgid "Storage volume to be attached"
+msgstr "Anzuh��ngender Speicherdatentr��ger"
+
+msgid "File Path"
+msgstr "Dateipfad"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Der ISO-Dateipfad auf dem Server f��r die CD-ROM."
+
+msgid "Attach"
+msgstr "Anh��ngen"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"Der Benutzername oder das Kennwort, den bzw. das Sie eingegeben haben, ist "
@@ -1649,6 +1667,10 @@ msgstr "G��ste"
msgid "Templates"
msgstr "Vorlagen"
+#, fuzzy
+msgid "Administration"
+msgstr "Verteilung"
+
msgid "Failed to get application configuration"
msgstr "Anwendungskonfiguration konnte nicht abgerufen werden"
@@ -2182,21 +2204,6 @@ msgstr "Ja"
msgid "No"
msgstr "Nein"
-msgid "Add a Volume to Storage Pool"
-msgstr "Datentr��ger zu Speicherpool hinzuf��gen"
-
-msgid "Fetch from remote URL"
-msgstr "��ber Remote URL abrufen"
-
-msgid "Enter the remote URL here."
-msgstr "Remote URL hier eingeben."
-
-msgid "Upload a file"
-msgstr "Datei hochladen"
-
-msgid "Choose the file you want to upload."
-msgstr "W��hlen Sie die hochzuladende Datei aus."
-
msgid "Define a New Storage Pool"
msgstr "Neuen Speicherpool definieren"
@@ -2275,6 +2282,21 @@ msgstr "SCSI-Adapter"
msgid "Please, wait..."
msgstr "Bitte warten..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Datentr��ger zu Speicherpool hinzuf��gen"
+
+msgid "Fetch from remote URL"
+msgstr "��ber Remote URL abrufen"
+
+msgid "Enter the remote URL here."
+msgstr "Remote URL hier eingeben."
+
+msgid "Upload a file"
+msgstr "Datei hochladen"
+
+msgid "Choose the file you want to upload."
+msgstr "W��hlen Sie die hochzuladende Datei aus."
+
msgid "Add Template"
msgstr "Vorlage hinzuf��gen"
@@ -2476,3 +2498,10 @@ msgstr "Zuordnung"
msgid "No templates found."
msgstr "Keine Vorlagen gefunden."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "Zugriff auf die Metadaten der virtuellen Maschine %(name)s nicht m��glich. "
+#~ "Details: %(err)s"
diff --git a/po/en_US.po b/po/en_US.po
index 26dbaac..3539989 100644
--- a/po/en_US.po
+++ b/po/en_US.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -267,11 +267,6 @@ msgstr ""
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr ""
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-
msgid "The guest console password must be a string."
msgstr ""
@@ -340,6 +335,22 @@ msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
#, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
+#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
@@ -1271,6 +1282,12 @@ msgstr ""
msgid "Available system users and groups"
msgstr ""
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr ""
@@ -1313,67 +1330,67 @@ msgstr ""
msgid "revert"
msgstr ""
-msgid "Add a Storage Device to VM"
+msgid "Start"
msgstr ""
-msgid "Device Type"
+msgid "Reset"
msgstr ""
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgid "Pause"
msgstr ""
-msgid "Storage Pool"
+msgid "Resume"
msgstr ""
-msgid "Storage pool which volume located in"
+msgid "Power Off"
msgstr ""
-msgid "Storage Volume"
+msgid "Actions"
msgstr ""
-msgid "Storage volume to be attached"
+msgid "Connect"
msgstr ""
-msgid "File Path"
+msgid "Clone"
msgstr ""
-msgid "The ISO file path in the server for CDROM."
+msgid "Edit"
msgstr ""
-msgid "Attach"
+msgid "Shut Down"
msgstr ""
-msgid "Start"
+msgid "Delete"
msgstr ""
-msgid "Reset"
+msgid "Add a Storage Device to VM"
msgstr ""
-msgid "Pause"
+msgid "Device Type"
msgstr ""
-msgid "Resume"
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
-msgid "Power Off"
+msgid "Storage Pool"
msgstr ""
-msgid "Actions"
+msgid "Storage pool which volume located in"
msgstr ""
-msgid "Connect"
+msgid "Storage Volume"
msgstr ""
-msgid "Clone"
+msgid "Storage volume to be attached"
msgstr ""
-msgid "Edit"
+msgid "File Path"
msgstr ""
-msgid "Shut Down"
+msgid "The ISO file path in the server for CDROM."
msgstr ""
-msgid "Delete"
+msgid "Attach"
msgstr ""
msgid "The username or password you entered is incorrect. Please try again."
@@ -1397,6 +1414,9 @@ msgstr ""
msgid "Templates"
msgstr ""
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr ""
@@ -1878,21 +1898,6 @@ msgstr ""
msgid "No"
msgstr ""
-msgid "Add a Volume to Storage Pool"
-msgstr ""
-
-msgid "Fetch from remote URL"
-msgstr ""
-
-msgid "Enter the remote URL here."
-msgstr ""
-
-msgid "Upload a file"
-msgstr ""
-
-msgid "Choose the file you want to upload."
-msgstr ""
-
msgid "Define a New Storage Pool"
msgstr ""
@@ -1963,6 +1968,21 @@ msgstr ""
msgid "Please, wait..."
msgstr ""
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
msgid "Add Template"
msgstr ""
diff --git a/po/es_ES.po b/po/es_ES.po
index 173af93..de1fe58 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -304,13 +304,6 @@ msgstr "No existe el grupo (o grupos) '%(groups)s'"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "No se puede apagar la m��quina virtual %(name)s. Detalles: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede obtener acceso a los metadatos de la m��quina virtual %(name)s. "
-"Detalles: %(err)s"
-
msgid "The guest console password must be a string."
msgstr "La contrase��a de la consola del invitado debe ser una serie. "
@@ -393,6 +386,24 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Error al conectar el dispositivo de memoria. Detalles: %(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+"No se puede suspender la m��quina virtual '%(name)s' porque no se est�� "
+"ejecutando."
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1518,6 +1529,13 @@ msgstr "Direcci��n MAC"
msgid "Available system users and groups"
msgstr "Usuarios y grupos del sistema disponibles"
+#, fuzzy
+msgid "Users"
+msgstr "Usuario"
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Usuarios y grupos del sistema seleccionados"
@@ -1560,37 +1578,6 @@ msgstr "Cancelar"
msgid "revert"
msgstr "revertir"
-msgid "Add a Storage Device to VM"
-msgstr "A��adir un dispositivo de almacenamiento a VM"
-
-msgid "Device Type"
-msgstr "Tipo de dispositivo"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"El tipo de dispositivo. Actualmente se da soporte a \"cdrom\" y \"disk\"."
-
-msgid "Storage Pool"
-msgstr "Agrupaci��n de almacenamiento"
-
-msgid "Storage pool which volume located in"
-msgstr "Agrupaci��n de almacenamiento con volumen ubicado en"
-
-msgid "Storage Volume"
-msgstr "Volumen de almacenamiento"
-
-msgid "Storage volume to be attached"
-msgstr "Volumen de almacenamiento que se va a adjuntar"
-
-msgid "File Path"
-msgstr "V��a de acceso de archivo"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "La v��a de acceso del archivo ISO en el servidor para el CDROM."
-
-msgid "Attach"
-msgstr "Conectar"
-
msgid "Start"
msgstr "Iniciar"
@@ -1624,6 +1611,37 @@ msgstr "Concluir"
msgid "Delete"
msgstr "Suprimir"
+msgid "Add a Storage Device to VM"
+msgstr "A��adir un dispositivo de almacenamiento a VM"
+
+msgid "Device Type"
+msgstr "Tipo de dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"El tipo de dispositivo. Actualmente se da soporte a \"cdrom\" y \"disk\"."
+
+msgid "Storage Pool"
+msgstr "Agrupaci��n de almacenamiento"
+
+msgid "Storage pool which volume located in"
+msgstr "Agrupaci��n de almacenamiento con volumen ubicado en"
+
+msgid "Storage Volume"
+msgstr "Volumen de almacenamiento"
+
+msgid "Storage volume to be attached"
+msgstr "Volumen de almacenamiento que se va a adjuntar"
+
+msgid "File Path"
+msgstr "V��a de acceso de archivo"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "La v��a de acceso del archivo ISO en el servidor para el CDROM."
+
+msgid "Attach"
+msgstr "Conectar"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"El nombre de usuario o contrase��a que ha especificado es incorrecto. Por "
@@ -1647,6 +1665,10 @@ msgstr "Invitados"
msgid "Templates"
msgstr "Plantillas"
+#, fuzzy
+msgid "Administration"
+msgstr "Distribuci��n"
+
msgid "Failed to get application configuration"
msgstr "No se ha podido obtener la configuraci��n de la aplicaci��n"
@@ -2182,21 +2204,6 @@ msgstr "S��"
msgid "No"
msgstr "No"
-msgid "Add a Volume to Storage Pool"
-msgstr "A��adir un volumen a la agrupaci��n de almacenamiento"
-
-msgid "Fetch from remote URL"
-msgstr "Captar de URL remoto"
-
-msgid "Enter the remote URL here."
-msgstr "Escriba el URL remoto aqu��. "
-
-msgid "Upload a file"
-msgstr "Cargar un archivo"
-
-msgid "Choose the file you want to upload."
-msgstr "Elija el archivo que desee cargar. "
-
msgid "Define a New Storage Pool"
msgstr "Definir una agrupaci��n de almacenamiento nueva"
@@ -2273,6 +2280,21 @@ msgstr "Adaptador SCSI"
msgid "Please, wait..."
msgstr "Por favor, espere..."
+msgid "Add a Volume to Storage Pool"
+msgstr "A��adir un volumen a la agrupaci��n de almacenamiento"
+
+msgid "Fetch from remote URL"
+msgstr "Captar de URL remoto"
+
+msgid "Enter the remote URL here."
+msgstr "Escriba el URL remoto aqu��. "
+
+msgid "Upload a file"
+msgstr "Cargar un archivo"
+
+msgid "Choose the file you want to upload."
+msgstr "Elija el archivo que desee cargar. "
+
msgid "Add Template"
msgstr "A��adir plantilla"
@@ -2475,3 +2497,10 @@ msgstr "Asignaci��n"
msgid "No templates found."
msgstr "No se han encontrado plantillas."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "No se puede obtener acceso a los metadatos de la m��quina virtual "
+#~ "%(name)s. Detalles: %(err)s"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 42bb004..2e8fdce 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -314,13 +314,6 @@ msgstr "Le ou les groupes '%(groups)s' n'existent pas"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "Impossible d'arr��ter la machine virtuelle %(name)s. D��tails : %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossible d'obtenir l'acc��s aux m��tadonn��es de la machine virtuelle "
-"%(name)s. D��tails : %(err)s"
-
msgid "The guest console password must be a string."
msgstr "Le mot de passe de la console invit�� doit ��tre une cha��ne."
@@ -409,6 +402,24 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Erreur d'attachement de l'unit�� de m��moire. D��tails : %(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+"Impossible d'interrompre la machine virtuelle '%(name)s' car elle n'est pas "
+"en cours d'ex��cution."
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1522,6 +1533,13 @@ msgstr "Adresse MAC"
msgid "Available system users and groups"
msgstr "Groupes et utilisateurs syst��me disponibles"
+#, fuzzy
+msgid "Users"
+msgstr "Utilisateur"
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Groupes et utilisateurs syst��me s��lectionn��s"
@@ -1564,38 +1582,6 @@ msgstr "Annuler"
msgid "revert"
msgstr "r��tablir"
-msgid "Add a Storage Device to VM"
-msgstr "Ajouter une unit�� de stockage �� la machine virtuelle"
-
-msgid "Device Type"
-msgstr "Type d'unit��"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"Type d'unit��. Actuellement, \"cdrom\" et \"disk\" seulement sont pris en "
-"charge."
-
-msgid "Storage Pool"
-msgstr "Pool de stockage"
-
-msgid "Storage pool which volume located in"
-msgstr "Pool de stockage dans lequel le volume est situ��"
-
-msgid "Storage Volume"
-msgstr "Volume de stockage"
-
-msgid "Storage volume to be attached"
-msgstr "Volume de stockage �� attacher"
-
-msgid "File Path"
-msgstr "Chemin d'acc��s au fichier"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "Chemin d'acc��s au fichier ISO sur le serveur pour le CD-ROM."
-
-msgid "Attach"
-msgstr "Attacher"
-
msgid "Start"
msgstr "D��marrer"
@@ -1629,6 +1615,38 @@ msgstr "Arr��ter"
msgid "Delete"
msgstr "Supprimer"
+msgid "Add a Storage Device to VM"
+msgstr "Ajouter une unit�� de stockage �� la machine virtuelle"
+
+msgid "Device Type"
+msgstr "Type d'unit��"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"Type d'unit��. Actuellement, \"cdrom\" et \"disk\" seulement sont pris en "
+"charge."
+
+msgid "Storage Pool"
+msgstr "Pool de stockage"
+
+msgid "Storage pool which volume located in"
+msgstr "Pool de stockage dans lequel le volume est situ��"
+
+msgid "Storage Volume"
+msgstr "Volume de stockage"
+
+msgid "Storage volume to be attached"
+msgstr "Volume de stockage �� attacher"
+
+msgid "File Path"
+msgstr "Chemin d'acc��s au fichier"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Chemin d'acc��s au fichier ISO sur le serveur pour le CD-ROM."
+
+msgid "Attach"
+msgstr "Attacher"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"Le nom d'utilisateur ou le mot de passe entr�� est incorrect. Veuillez "
@@ -1652,6 +1670,10 @@ msgstr "Invit��s"
msgid "Templates"
msgstr "Mod��les"
+#, fuzzy
+msgid "Administration"
+msgstr "Distribution"
+
msgid "Failed to get application configuration"
msgstr "Echec d'obtention de la configuration d'application"
@@ -2188,21 +2210,6 @@ msgstr "Oui"
msgid "No"
msgstr "Non"
-msgid "Add a Volume to Storage Pool"
-msgstr "Ajouter un volume au pool de stockage"
-
-msgid "Fetch from remote URL"
-msgstr "Extraire de l'URL distante"
-
-msgid "Enter the remote URL here."
-msgstr "Indiquez ici l'URL distante."
-
-msgid "Upload a file"
-msgstr "T��l��charger un fichier"
-
-msgid "Choose the file you want to upload."
-msgstr "S��lectionnez le fichier �� t��l��charger."
-
msgid "Define a New Storage Pool"
msgstr "D��finir un nouveau pool de stockage"
@@ -2280,6 +2287,21 @@ msgstr "Adaptateur SCSI"
msgid "Please, wait..."
msgstr "Veuillez patienter..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Ajouter un volume au pool de stockage"
+
+msgid "Fetch from remote URL"
+msgstr "Extraire de l'URL distante"
+
+msgid "Enter the remote URL here."
+msgstr "Indiquez ici l'URL distante."
+
+msgid "Upload a file"
+msgstr "T��l��charger un fichier"
+
+msgid "Choose the file you want to upload."
+msgstr "S��lectionnez le fichier �� t��l��charger."
+
msgid "Add Template"
msgstr "Ajouter un mod��le"
@@ -2480,3 +2502,10 @@ msgstr "Allocation"
msgid "No templates found."
msgstr "Aucun mod��le trouv��."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "Impossible d'obtenir l'acc��s aux m��tadonn��es de la machine virtuelle "
+#~ "%(name)s. D��tails : %(err)s"
diff --git a/po/it_IT.po b/po/it_IT.po
index 5d0b407..e89dfef 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -298,13 +298,6 @@ msgstr "Il gruppo o i gruppi '%(groups)s' non esistono"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile ottenere i metadati di accesso della macchina virtuale %(name)s. "
-"Dettagli: %(err)s"
-
msgid "The guest console password must be a string."
msgstr ""
"La password della console della macchina guest deve essere una stringa. "
@@ -388,6 +381,22 @@ msgstr ""
"Errore durante il collegamento del dispositivo di memoria. Dettagli: "
"%(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr "Impossibile sospendere la VM '%(name)s' perch�� non �� in esecuzione. "
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1481,6 +1490,13 @@ msgstr "Indirizzo MAC"
msgid "Available system users and groups"
msgstr "Utenti e gruppi di sistema disponibili"
+#, fuzzy
+msgid "Users"
+msgstr "Utente "
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "Utenti e gruppi di sistema selezionati"
@@ -1523,37 +1539,6 @@ msgstr "Annulla"
msgid "revert"
msgstr "Inverti"
-msgid "Add a Storage Device to VM"
-msgstr "Aggiungi un dispositivo di memoria alla VM"
-
-msgid "Device Type"
-msgstr "Tipo dispositivo"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"Il tipo di dispositivo. Attualmente, sono supportati \"cdrom\" e \"disk\"."
-
-msgid "Storage Pool"
-msgstr "Pool di memoria"
-
-msgid "Storage pool which volume located in"
-msgstr "Pool di memoria in cui si trova il volume"
-
-msgid "Storage Volume"
-msgstr "Volume di memoria"
-
-msgid "Storage volume to be attached"
-msgstr "Volume di memoria oggetto del collegamento"
-
-msgid "File Path"
-msgstr "Percorso file"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "Il percorso file ISO nel server per CDROM."
-
-msgid "Attach"
-msgstr "Allega"
-
msgid "Start"
msgstr "Avvia"
@@ -1587,6 +1572,37 @@ msgstr "Arresta"
msgid "Delete"
msgstr "Elimina"
+msgid "Add a Storage Device to VM"
+msgstr "Aggiungi un dispositivo di memoria alla VM"
+
+msgid "Device Type"
+msgstr "Tipo dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"Il tipo di dispositivo. Attualmente, sono supportati \"cdrom\" e \"disk\"."
+
+msgid "Storage Pool"
+msgstr "Pool di memoria"
+
+msgid "Storage pool which volume located in"
+msgstr "Pool di memoria in cui si trova il volume"
+
+msgid "Storage Volume"
+msgstr "Volume di memoria"
+
+msgid "Storage volume to be attached"
+msgstr "Volume di memoria oggetto del collegamento"
+
+msgid "File Path"
+msgstr "Percorso file"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "Il percorso file ISO nel server per CDROM."
+
+msgid "Attach"
+msgstr "Allega"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"Il nome utente o la password immessi non sono corretti. Ripetere "
@@ -1610,6 +1626,10 @@ msgstr "Guest"
msgid "Templates"
msgstr "Modelli"
+#, fuzzy
+msgid "Administration"
+msgstr "Distribuzione"
+
msgid "Failed to get application configuration"
msgstr "Richiamo della configurazione dell'applicazione non riuscito"
@@ -2143,21 +2163,6 @@ msgstr "S��"
msgid "No"
msgstr "No"
-msgid "Add a Volume to Storage Pool"
-msgstr "Aggiungi un volume al pool di memoria"
-
-msgid "Fetch from remote URL"
-msgstr "Richiama da URL remoto"
-
-msgid "Enter the remote URL here."
-msgstr "Immettere qui l'URL remoto. "
-
-msgid "Upload a file"
-msgstr "Carica un file"
-
-msgid "Choose the file you want to upload."
-msgstr "Selezionare il file da caricare. "
-
msgid "Define a New Storage Pool"
msgstr "Definisci un nuovo pool di memoria"
@@ -2237,6 +2242,21 @@ msgstr "Adattatore SCSI"
msgid "Please, wait..."
msgstr "Attendere..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Aggiungi un volume al pool di memoria"
+
+msgid "Fetch from remote URL"
+msgstr "Richiama da URL remoto"
+
+msgid "Enter the remote URL here."
+msgstr "Immettere qui l'URL remoto. "
+
+msgid "Upload a file"
+msgstr "Carica un file"
+
+msgid "Choose the file you want to upload."
+msgstr "Selezionare il file da caricare. "
+
msgid "Add Template"
msgstr "Aggiungi modello"
@@ -2438,3 +2458,10 @@ msgstr "Assegnazione"
msgid "No templates found."
msgstr "Nessun modello trovato."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "Impossibile ottenere i metadati di accesso della macchina virtuale "
+#~ "%(name)s. Dettagli: %(err)s"
diff --git a/po/ja_JP.po b/po/ja_JP.po
index a95a210..5b8911d 100644
--- a/po/ja_JP.po
+++ b/po/ja_JP.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -286,12 +286,6 @@ msgstr "���������������%(groups)s������������������������"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "��������������� %(name)s ������������������������������������������������: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"��������������� %(name)s ������������������������������������������������������������������: %(err)s"
-
msgid "The guest console password must be a string."
msgstr "������������������������������������������������������������������������������������������������"
@@ -367,6 +361,22 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "������������������������������������������������������������: %(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr "VM���%(name)s���������������������������������������������������������������"
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1472,6 +1482,13 @@ msgstr "MAC ������������"
msgid "Available system users and groups"
msgstr "���������������������������������������������������������������"
+#, fuzzy
+msgid "Users"
+msgstr "������������"
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "���������������������������������������������������������������"
@@ -1514,36 +1531,6 @@ msgstr "������"
msgid "revert"
msgstr "������"
-msgid "Add a Storage Device to VM"
-msgstr "VM ������������������������������������������"
-
-msgid "Device Type"
-msgstr "������������������������"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "���������������������������������������cdrom���������disk���������������������������������������"
-
-msgid "Storage Pool"
-msgstr "���������������������������"
-
-msgid "Storage pool which volume located in"
-msgstr "���������������������������������������������������������������"
-
-msgid "Storage Volume"
-msgstr "���������������������������������"
-
-msgid "Storage volume to be attached"
-msgstr "������������������������������������������������"
-
-msgid "File Path"
-msgstr "���������������������"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "��������������������� CDROM ��� ISO ������������������������"
-
-msgid "Attach"
-msgstr "������"
-
msgid "Start"
msgstr "������"
@@ -1577,6 +1564,36 @@ msgstr "���������������������"
msgid "Delete"
msgstr "������"
+msgid "Add a Storage Device to VM"
+msgstr "VM ������������������������������������������"
+
+msgid "Device Type"
+msgstr "������������������������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "���������������������������������������cdrom���������disk���������������������������������������"
+
+msgid "Storage Pool"
+msgstr "���������������������������"
+
+msgid "Storage pool which volume located in"
+msgstr "���������������������������������������������������������������"
+
+msgid "Storage Volume"
+msgstr "���������������������������������"
+
+msgid "Storage volume to be attached"
+msgstr "������������������������������������������������"
+
+msgid "File Path"
+msgstr "���������������������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "��������������������� CDROM ��� ISO ������������������������"
+
+msgid "Attach"
+msgstr "������"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "���������������������������������������������������������������������������������������������������������"
@@ -1598,6 +1615,10 @@ msgstr "���������"
msgid "Templates"
msgstr "������������������"
+#, fuzzy
+msgid "Administration"
+msgstr "���������������������������������"
+
msgid "Failed to get application configuration"
msgstr "���������������������������������������������������������������"
@@ -2123,21 +2144,6 @@ msgstr " ������"
msgid "No"
msgstr " ���������"
-msgid "Add a Volume to Storage Pool"
-msgstr "������������������������������������������������������"
-
-msgid "Fetch from remote URL"
-msgstr "������������ URL ������������������"
-
-msgid "Enter the remote URL here."
-msgstr "��������������������� URL ���������������������"
-
-msgid "Upload a file"
-msgstr "���������������������������������"
-
-msgid "Choose the file you want to upload."
-msgstr "���������������������������������������������������������������������"
-
msgid "Define a New Storage Pool"
msgstr "������������������������������������������"
@@ -2213,6 +2219,21 @@ msgstr "SCSI ���������������"
msgid "Please, wait..."
msgstr "���������������������..."
+msgid "Add a Volume to Storage Pool"
+msgstr "������������������������������������������������������"
+
+msgid "Fetch from remote URL"
+msgstr "������������ URL ������������������"
+
+msgid "Enter the remote URL here."
+msgstr "��������������������� URL ���������������������"
+
+msgid "Upload a file"
+msgstr "���������������������������������"
+
+msgid "Choose the file you want to upload."
+msgstr "���������������������������������������������������������������������"
+
msgid "Add Template"
msgstr "���������������������������"
@@ -2413,3 +2434,9 @@ msgstr "������������"
msgid "No templates found."
msgstr "���������������������������������������������"
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "��������������� %(name)s ������������������������������������������������������������������: %(err)s"
diff --git a/po/kimchi.pot b/po/kimchi.pot
index 1179357..a4b8781 100755
--- a/po/kimchi.pot
+++ b/po/kimchi.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
@@ -267,11 +267,6 @@ msgstr ""
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr ""
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-
msgid "The guest console password must be a string."
msgstr ""
@@ -340,6 +335,22 @@ msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
#, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
+#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
@@ -1271,6 +1282,12 @@ msgstr ""
msgid "Available system users and groups"
msgstr ""
+msgid "Users"
+msgstr ""
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr ""
@@ -1313,67 +1330,67 @@ msgstr ""
msgid "revert"
msgstr ""
-msgid "Add a Storage Device to VM"
+msgid "Start"
msgstr ""
-msgid "Device Type"
+msgid "Reset"
msgstr ""
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgid "Pause"
msgstr ""
-msgid "Storage Pool"
+msgid "Resume"
msgstr ""
-msgid "Storage pool which volume located in"
+msgid "Power Off"
msgstr ""
-msgid "Storage Volume"
+msgid "Actions"
msgstr ""
-msgid "Storage volume to be attached"
+msgid "Connect"
msgstr ""
-msgid "File Path"
+msgid "Clone"
msgstr ""
-msgid "The ISO file path in the server for CDROM."
+msgid "Edit"
msgstr ""
-msgid "Attach"
+msgid "Shut Down"
msgstr ""
-msgid "Start"
+msgid "Delete"
msgstr ""
-msgid "Reset"
+msgid "Add a Storage Device to VM"
msgstr ""
-msgid "Pause"
+msgid "Device Type"
msgstr ""
-msgid "Resume"
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
-msgid "Power Off"
+msgid "Storage Pool"
msgstr ""
-msgid "Actions"
+msgid "Storage pool which volume located in"
msgstr ""
-msgid "Connect"
+msgid "Storage Volume"
msgstr ""
-msgid "Clone"
+msgid "Storage volume to be attached"
msgstr ""
-msgid "Edit"
+msgid "File Path"
msgstr ""
-msgid "Shut Down"
+msgid "The ISO file path in the server for CDROM."
msgstr ""
-msgid "Delete"
+msgid "Attach"
msgstr ""
msgid "The username or password you entered is incorrect. Please try again."
@@ -1397,6 +1414,9 @@ msgstr ""
msgid "Templates"
msgstr ""
+msgid "Administration"
+msgstr ""
+
msgid "Failed to get application configuration"
msgstr ""
@@ -1878,21 +1898,6 @@ msgstr ""
msgid "No"
msgstr ""
-msgid "Add a Volume to Storage Pool"
-msgstr ""
-
-msgid "Fetch from remote URL"
-msgstr ""
-
-msgid "Enter the remote URL here."
-msgstr ""
-
-msgid "Upload a file"
-msgstr ""
-
-msgid "Choose the file you want to upload."
-msgstr ""
-
msgid "Define a New Storage Pool"
msgstr ""
@@ -1963,6 +1968,21 @@ msgstr ""
msgid "Please, wait..."
msgstr ""
+msgid "Add a Volume to Storage Pool"
+msgstr ""
+
+msgid "Fetch from remote URL"
+msgstr ""
+
+msgid "Enter the remote URL here."
+msgstr ""
+
+msgid "Upload a file"
+msgstr ""
+
+msgid "Choose the file you want to upload."
+msgstr ""
+
msgid "Add Template"
msgstr ""
diff --git a/po/ko_KR.po b/po/ko_KR.po
index 4504a4b..d8a4d2c 100644
--- a/po/ko_KR.po
+++ b/po/ko_KR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -281,13 +281,6 @@ msgstr "������ '%(groups)s'���(���) ������������."
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "������ ������ %(name)s���(���) ��������� ��� ������������. ������������: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"������ ������ %(name)s��� ��������� ������ ������������������ ��������� ��� ������������. ������������: "
-"%(err)s"
-
msgid "The guest console password must be a string."
msgstr "��������� ������ ��������������� ������������������ ���������."
@@ -362,6 +355,22 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "��������� ��������� ������������ ��� ��������� ������������������. ������������: %(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr "VM '%(name)s'���(���) ������ ������ ������������ ��������������� ��� ������������."
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1376,6 +1385,13 @@ msgstr "MAC ������"
msgid "Available system users and groups"
msgstr "������ ��������� ��������� ��������� ��� ������"
+#, fuzzy
+msgid "Users"
+msgstr "���������"
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "��������� ��������� ��������� ��� ������"
@@ -1418,36 +1434,6 @@ msgstr "������"
msgid "revert"
msgstr "������������"
-msgid "Add a Storage Device to VM"
-msgstr "������������ ��������� VM��� ������"
-
-msgid "Device Type"
-msgstr "������ ������"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "������ ������. ������ \"cdrom\" ��� \"disk\"��� ���������������."
-
-msgid "Storage Pool"
-msgstr "������������ ���"
-
-msgid "Storage pool which volume located in"
-msgstr "��������� ��������� ������������ ���"
-
-msgid "Storage Volume"
-msgstr "������������ ������"
-
-msgid "Storage volume to be attached"
-msgstr "��������� ������������ ������"
-
-msgid "File Path"
-msgstr "������ ������"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "CDROM��� ������ ��������� ISO ������ ���������������."
-
-msgid "Attach"
-msgstr "������"
-
msgid "Start"
msgstr "������"
@@ -1481,6 +1467,36 @@ msgstr "������"
msgid "Delete"
msgstr "������"
+msgid "Add a Storage Device to VM"
+msgstr "������������ ��������� VM��� ������"
+
+msgid "Device Type"
+msgstr "������ ������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "������ ������. ������ \"cdrom\" ��� \"disk\"��� ���������������."
+
+msgid "Storage Pool"
+msgstr "������������ ���"
+
+msgid "Storage pool which volume located in"
+msgstr "��������� ��������� ������������ ���"
+
+msgid "Storage Volume"
+msgstr "������������ ������"
+
+msgid "Storage volume to be attached"
+msgstr "��������� ������������ ������"
+
+msgid "File Path"
+msgstr "������ ������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "CDROM��� ������ ��������� ISO ������ ���������������."
+
+msgid "Attach"
+msgstr "������"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"��������� ��������� ������ ������ ��������������� ������������ ������������. ������ ������������������."
@@ -1503,6 +1519,10 @@ msgstr "���������"
msgid "Templates"
msgstr "������������"
+#, fuzzy
+msgid "Administration"
+msgstr "������"
+
msgid "Failed to get application configuration"
msgstr "������������������ ��������� ������������ ���������������."
@@ -2017,21 +2037,6 @@ msgstr "���"
msgid "No"
msgstr "���������"
-msgid "Add a Volume to Storage Pool"
-msgstr "������������ ������ ������ ������"
-
-msgid "Fetch from remote URL"
-msgstr "������ URL������ ������"
-
-msgid "Enter the remote URL here."
-msgstr "��������� ������ URL��� ������������������."
-
-msgid "Upload a file"
-msgstr "������ ���������"
-
-msgid "Choose the file you want to upload."
-msgstr "������������ ��������� ������������������."
-
msgid "Define a New Storage Pool"
msgstr "��� ������������ ��� ������"
@@ -2105,6 +2110,21 @@ msgstr "SCSI ���������"
msgid "Please, wait..."
msgstr "������ ��������� ������������."
+msgid "Add a Volume to Storage Pool"
+msgstr "������������ ������ ������ ������"
+
+msgid "Fetch from remote URL"
+msgstr "������ URL������ ������"
+
+msgid "Enter the remote URL here."
+msgstr "��������� ������ URL��� ������������������."
+
+msgid "Upload a file"
+msgstr "������ ���������"
+
+msgid "Choose the file you want to upload."
+msgstr "������������ ��������� ������������������."
+
msgid "Add Template"
msgstr "������������ ������"
@@ -2305,3 +2325,10 @@ msgstr "������"
msgid "No templates found."
msgstr "��������������� ������������."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "������ ������ %(name)s��� ��������� ������ ������������������ ��������� ��� ������������. ���������"
+#~ "���: %(err)s"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 61ffe9e..20f1021 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -295,13 +295,6 @@ msgstr "O(s) grupo(s) '%(groups)s' n��o existem"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "N��o �� poss��vel encerrar a m��quina virtual %(name)s. Detalhes: %(err)s "
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"N��o �� poss��vel obter metadados de acesso da m��quina virtual %(name)s. "
-"Detalhes: %(err)s "
-
msgid "The guest console password must be a string."
msgstr "A senha do console do convidado deve ser uma sequ��ncia."
@@ -378,6 +371,23 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "Erro ao anexar dispositivo de mem��ria. Detalhes: %(error)s "
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+"N��o �� poss��vel suspender a VM '%(name)s' porque ela n��o est�� em execu����o."
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1487,6 +1497,12 @@ msgstr "Endere��o MAC"
msgid "Available system users and groups"
msgstr "Usu��rios e grupos do sistema dispon��vel"
+msgid "Users"
+msgstr "Usu��rios"
+
+msgid "Groups"
+msgstr "Grupos"
+
msgid "Selected system users and groups"
msgstr "Usu��rios e grupos do sistema selecionado"
@@ -1529,37 +1545,6 @@ msgstr "Cancelar"
msgid "revert"
msgstr "reverter"
-msgid "Add a Storage Device to VM"
-msgstr "Incluir um Dispositivo de Armazenamento na VM"
-
-msgid "Device Type"
-msgstr "Tipo de Dispositivo"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"O tipo de dispositivo. Atualmente, \"cdrom\" e \"disk\" s��o suportados."
-
-msgid "Storage Pool"
-msgstr "storage pool"
-
-msgid "Storage pool which volume located in"
-msgstr "Conjunto de armazenamentos no qual o volume est�� localizado"
-
-msgid "Storage Volume"
-msgstr "Volume de Armazenamento"
-
-msgid "Storage volume to be attached"
-msgstr "Volume de armazenamento a ser conectado"
-
-msgid "File Path"
-msgstr "Caminho do arquivo"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "O caminho do arquivo ISO no servidor para o CDROM."
-
-msgid "Attach"
-msgstr "Anexar"
-
msgid "Start"
msgstr "Iniciar"
@@ -1593,6 +1578,37 @@ msgstr "Encerrar"
msgid "Delete"
msgstr "Excluir"
+msgid "Add a Storage Device to VM"
+msgstr "Incluir um Dispositivo de Armazenamento na VM"
+
+msgid "Device Type"
+msgstr "Tipo de Dispositivo"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr ""
+"O tipo de dispositivo. Atualmente, \"cdrom\" e \"disk\" s��o suportados."
+
+msgid "Storage Pool"
+msgstr "storage pool"
+
+msgid "Storage pool which volume located in"
+msgstr "Conjunto de armazenamentos no qual o volume est�� localizado"
+
+msgid "Storage Volume"
+msgstr "Volume de Armazenamento"
+
+msgid "Storage volume to be attached"
+msgstr "Volume de armazenamento a ser conectado"
+
+msgid "File Path"
+msgstr "Caminho do arquivo"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "O caminho do arquivo ISO no servidor para o CDROM."
+
+msgid "Attach"
+msgstr "Anexar"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "O nome de usu��rio ou senha inserido est�� incorreto. Tente novamente."
@@ -1614,6 +1630,10 @@ msgstr "M��quinas Virtuais"
msgid "Templates"
msgstr "Modelos"
+#, fuzzy
+msgid "Administration"
+msgstr "Distribui����o"
+
msgid "Failed to get application configuration"
msgstr "Falha ao obter a configura����o do aplicativo"
@@ -2144,21 +2164,6 @@ msgstr "Sim"
msgid "No"
msgstr "N��o"
-msgid "Add a Volume to Storage Pool"
-msgstr "Incluir um volume no conjunto de armazenamentos"
-
-msgid "Fetch from remote URL"
-msgstr "Buscar a partir da URL remota"
-
-msgid "Enter the remote URL here."
-msgstr "Inserir a URL remota aqui."
-
-msgid "Upload a file"
-msgstr "Fazer upload de um arquivo"
-
-msgid "Choose the file you want to upload."
-msgstr "Escolher o arquivo do qual voc�� deseja fazer upload."
-
msgid "Define a New Storage Pool"
msgstr "Definir um novo storage pool"
@@ -2235,6 +2240,21 @@ msgstr "Adaptador SCSI"
msgid "Please, wait..."
msgstr "Aguarde..."
+msgid "Add a Volume to Storage Pool"
+msgstr "Incluir um volume no conjunto de armazenamentos"
+
+msgid "Fetch from remote URL"
+msgstr "Buscar a partir da URL remota"
+
+msgid "Enter the remote URL here."
+msgstr "Inserir a URL remota aqui."
+
+msgid "Upload a file"
+msgstr "Fazer upload de um arquivo"
+
+msgid "Choose the file you want to upload."
+msgstr "Escolher o arquivo do qual voc�� deseja fazer upload."
+
msgid "Add Template"
msgstr "Incluir modelo"
@@ -2435,3 +2455,10 @@ msgstr "Aloca����o"
msgid "No templates found."
msgstr "Nenhum modelo localizado."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "N��o �� poss��vel obter metadados de acesso da m��quina virtual %(name)s. "
+#~ "Detalhes: %(err)s "
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 804ff61..71a9460 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -286,13 +286,6 @@ msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr ""
"���� �������������� ������������������ ������������ ���������������������� ������������ %(name)s. ����������������: %(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"���� �������������� ���������������� ������������ �� �������������������� ���������������������� ������������ %(name)s. "
-"����������������: %(err)s"
-
msgid "The guest console password must be a string."
msgstr "������������ �������������� ���������������� �������������� ������������ �������� ��������������."
@@ -378,6 +371,24 @@ msgstr ""
msgid "Error attaching memory device. Details: %(error)s"
msgstr "������������ ���������������������� �������������������� ������������. ����������������: %(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr ""
+"�������������������� �������������������������� ���������������������� ������������ '%(name)s', ������������������ ������ ���� "
+"����������������."
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1421,6 +1432,13 @@ msgstr "MAC-����������"
msgid "Available system users and groups"
msgstr "������������������ ������������������ ������������������������ �� ������������"
+#, fuzzy
+msgid "Users"
+msgstr "������������������������"
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "������������������ ������������������ ������������������������ �� ������������"
@@ -1463,36 +1481,6 @@ msgstr "������������"
msgid "revert"
msgstr "������������������������"
-msgid "Add a Storage Device to VM"
-msgstr "���������������� �������������������� ���������������� �� VM"
-
-msgid "Device Type"
-msgstr "������ ��������������������"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "������ ��������������������. �� ������������ ������������ ���������������������������� \"cdrom\" �� \"disk\"."
-
-msgid "Storage Pool"
-msgstr "������ ������������"
-
-msgid "Storage pool which volume located in"
-msgstr "������ �������� ������������ ������������������ ��"
-
-msgid "Storage Volume"
-msgstr "������ ������������"
-
-msgid "Storage volume to be attached"
-msgstr "������ ������������������"
-
-msgid "File Path"
-msgstr "�������� �� ����������"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "�������� �� ���������� ISO ������ CDROM ���� ��������������."
-
-msgid "Attach"
-msgstr "��������������������"
-
msgid "Start"
msgstr "������������������"
@@ -1526,6 +1514,36 @@ msgstr "������������������ ������������"
msgid "Delete"
msgstr "��������������"
+msgid "Add a Storage Device to VM"
+msgstr "���������������� �������������������� ���������������� �� VM"
+
+msgid "Device Type"
+msgstr "������ ��������������������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "������ ��������������������. �� ������������ ������������ ���������������������������� \"cdrom\" �� \"disk\"."
+
+msgid "Storage Pool"
+msgstr "������ ������������"
+
+msgid "Storage pool which volume located in"
+msgstr "������ �������� ������������ ������������������ ��"
+
+msgid "Storage Volume"
+msgstr "������ ������������"
+
+msgid "Storage volume to be attached"
+msgstr "������ ������������������"
+
+msgid "File Path"
+msgstr "�������� �� ����������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "�������� �� ���������� ISO ������ CDROM ���� ��������������."
+
+msgid "Attach"
+msgstr "��������������������"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "�������������� ���������������� ������ ������������������������ ������ ������������. �������������� ������ ������."
@@ -1547,6 +1565,10 @@ msgstr "���������������� ��������������"
msgid "Templates"
msgstr "��������������"
+#, fuzzy
+msgid "Administration"
+msgstr "��������������"
+
msgid "Failed to get application configuration"
msgstr "���� �������������� ���������������� ������������������������ ��������������������"
@@ -2069,21 +2091,6 @@ msgstr "����"
msgid "No"
msgstr "������"
-msgid "Add a Volume to Storage Pool"
-msgstr "���������������� ������ �� ������ ������������"
-
-msgid "Fetch from remote URL"
-msgstr "������������������ �� �������������������� URL"
-
-msgid "Enter the remote URL here."
-msgstr "�������������� �������� ������������������ URL."
-
-msgid "Upload a file"
-msgstr "���������������� ��������"
-
-msgid "Choose the file you want to upload."
-msgstr "���������������� �������� ������ ����������������."
-
msgid "Define a New Storage Pool"
msgstr "�������������� ������ ������������"
@@ -2156,6 +2163,21 @@ msgstr "�������������� SCSI"
msgid "Please, wait..."
msgstr "������������������..."
+msgid "Add a Volume to Storage Pool"
+msgstr "���������������� ������ �� ������ ������������"
+
+msgid "Fetch from remote URL"
+msgstr "������������������ �� �������������������� URL"
+
+msgid "Enter the remote URL here."
+msgstr "�������������� �������� ������������������ URL."
+
+msgid "Upload a file"
+msgstr "���������������� ��������"
+
+msgid "Choose the file you want to upload."
+msgstr "���������������� �������� ������ ����������������."
+
msgid "Add Template"
msgstr "���������������� ������������"
@@ -2356,3 +2378,10 @@ msgstr "������������������"
msgid "No templates found."
msgstr "���� �������������� ��������������."
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr ""
+#~ "���� �������������� ���������������� ������������ �� �������������������� ���������������������� ������������ %(name)s. "
+#~ "����������������: %(err)s"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 7d3723b..e04d832 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -273,11 +273,6 @@ msgstr "������%(groups)s������������"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "��������������������� %(name)s������������������%(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "��������������������� %(name)s ������������������������������%(err)s"
-
msgid "The guest console password must be a string."
msgstr "������������������������������������������"
@@ -346,6 +341,22 @@ msgstr "��������� Libvirt ������������������������������Libvirt ������ >= 1.2.14
msgid "Error attaching memory device. Details: %(error)s"
msgstr "���������������������������������������������%(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr "������������ VM���%(name)s������������������������������"
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1292,6 +1303,13 @@ msgstr "MAC ������"
msgid "Available system users and groups"
msgstr "������������������������"
+#, fuzzy
+msgid "Users"
+msgstr "������"
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "������������������������"
@@ -1334,36 +1352,6 @@ msgstr "������"
msgid "revert"
msgstr "������"
-msgid "Add a Storage Device to VM"
-msgstr "������������������������ VM"
-
-msgid "Device Type"
-msgstr "������������"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "������������������������������cdrom���������disk������"
-
-msgid "Storage Pool"
-msgstr "���������"
-
-msgid "Storage pool which volume located in"
-msgstr "���������������������������������"
-
-msgid "Storage Volume"
-msgstr "���������"
-
-msgid "Storage volume to be attached"
-msgstr "���������������������"
-
-msgid "File Path"
-msgstr "������������"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "CDROM ��������������� ISO ���������"
-
-msgid "Attach"
-msgstr "������"
-
msgid "Start"
msgstr "������"
@@ -1397,6 +1385,36 @@ msgstr "������"
msgid "Delete"
msgstr "������"
+msgid "Add a Storage Device to VM"
+msgstr "������������������������ VM"
+
+msgid "Device Type"
+msgstr "������������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "������������������������������cdrom���������disk������"
+
+msgid "Storage Pool"
+msgstr "���������"
+
+msgid "Storage pool which volume located in"
+msgstr "���������������������������������"
+
+msgid "Storage Volume"
+msgstr "���������"
+
+msgid "Storage volume to be attached"
+msgstr "���������������������"
+
+msgid "File Path"
+msgstr "������������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "CDROM ��������������� ISO ���������"
+
+msgid "Attach"
+msgstr "������"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "���������������������������������������������������������"
@@ -1418,6 +1436,10 @@ msgstr "������"
msgid "Templates"
msgstr "������"
+#, fuzzy
+msgid "Administration"
+msgstr "������"
+
msgid "Failed to get application configuration"
msgstr "������������������������������"
@@ -1909,21 +1931,6 @@ msgstr "���"
msgid "No"
msgstr "���"
-msgid "Add a Volume to Storage Pool"
-msgstr "������������������������"
-
-msgid "Fetch from remote URL"
-msgstr "��������� URL ���������"
-
-msgid "Enter the remote URL here."
-msgstr "��������������������� URL���"
-
-msgid "Upload a file"
-msgstr "������������"
-
-msgid "Choose the file you want to upload."
-msgstr "���������������������������"
-
msgid "Define a New Storage Pool"
msgstr "������������������"
@@ -1994,6 +2001,21 @@ msgstr "SCSI ���������"
msgid "Please, wait..."
msgstr "���������..."
+msgid "Add a Volume to Storage Pool"
+msgstr "������������������������"
+
+msgid "Fetch from remote URL"
+msgstr "��������� URL ���������"
+
+msgid "Enter the remote URL here."
+msgstr "��������������������� URL���"
+
+msgid "Upload a file"
+msgstr "������������"
+
+msgid "Choose the file you want to upload."
+msgstr "���������������������������"
+
msgid "Add Template"
msgstr "������������"
@@ -2194,3 +2216,8 @@ msgstr "������"
msgid "No templates found."
msgstr "������������������������"
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr "��������������������� %(name)s ������������������������������%(err)s"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index c772f99..83b23f3 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"POT-Creation-Date: 2015-09-10 10:00-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Cr��stian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -274,11 +274,6 @@ msgstr "������ '%(groups)s' ���������"
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr "������������������������ %(name)s������������������%(err)s"
-#, python-format
-msgid ""
-"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "������������������������ %(name)s ��������� meta ������������������������%(err)s"
-
msgid "The guest console password must be a string."
msgstr "���������������������������������������"
@@ -348,6 +343,22 @@ msgstr "��������� libvirt ���������������������������������Libvirt ������������
msgid "Error attaching memory device. Details: %(error)s"
msgstr "������������������������������������������������������%(error)s"
+#, fuzzy, python-format
+msgid "Cannot start %(name)s. Virtual machine is already running."
+msgstr "������������ VM '%(name)s'������������ VM ���������������������������"
+
+#, python-format
+msgid "Cannot power off %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot shutdown %(name)s. Virtual machine is shut off."
+msgstr ""
+
+#, python-format
+msgid "Cannot reset %(name)s. Virtual machine is already shut off."
+msgstr ""
+
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
@@ -1293,6 +1304,13 @@ msgstr "MAC ������"
msgid "Available system users and groups"
msgstr "���������������������������������"
+#, fuzzy
+msgid "Users"
+msgstr "���������"
+
+msgid "Groups"
+msgstr ""
+
msgid "Selected system users and groups"
msgstr "���������������������������������"
@@ -1335,36 +1353,6 @@ msgstr "������ "
msgid "revert"
msgstr "������"
-msgid "Add a Storage Device to VM"
-msgstr "������������������������ VM"
-
-msgid "Device Type"
-msgstr "������������"
-
-msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "��������������������������� \"cdrom\" ��� \"disk\"���"
-
-msgid "Storage Pool"
-msgstr "���������"
-
-msgid "Storage pool which volume located in"
-msgstr "������������������������"
-
-msgid "Storage Volume"
-msgstr "������������"
-
-msgid "Storage volume to be attached"
-msgstr "������������������������"
-
-msgid "File Path"
-msgstr "������������"
-
-msgid "The ISO file path in the server for CDROM."
-msgstr "CDROM ��� ISO ������������������������������"
-
-msgid "Attach"
-msgstr "������"
-
msgid "Start"
msgstr "������"
@@ -1398,6 +1386,36 @@ msgstr "������"
msgid "Delete"
msgstr "������"
+msgid "Add a Storage Device to VM"
+msgstr "������������������������ VM"
+
+msgid "Device Type"
+msgstr "������������"
+
+msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
+msgstr "��������������������������� \"cdrom\" ��� \"disk\"���"
+
+msgid "Storage Pool"
+msgstr "���������"
+
+msgid "Storage pool which volume located in"
+msgstr "������������������������"
+
+msgid "Storage Volume"
+msgstr "������������"
+
+msgid "Storage volume to be attached"
+msgstr "������������������������"
+
+msgid "File Path"
+msgstr "������������"
+
+msgid "The ISO file path in the server for CDROM."
+msgstr "CDROM ��� ISO ������������������������������"
+
+msgid "Attach"
+msgstr "������"
+
msgid "The username or password you entered is incorrect. Please try again."
msgstr "������������������������������������������������������������"
@@ -1419,6 +1437,10 @@ msgstr "������"
msgid "Templates"
msgstr "������"
+#, fuzzy
+msgid "Administration"
+msgstr "������������"
+
msgid "Failed to get application configuration"
msgstr "������������������������������"
@@ -1911,21 +1933,6 @@ msgstr "���"
msgid "No"
msgstr "���"
-msgid "Add a Volume to Storage Pool"
-msgstr "���������������������������"
-
-msgid "Fetch from remote URL"
-msgstr "��������� URL ������"
-
-msgid "Enter the remote URL here."
-msgstr "��������������������� URL���"
-
-msgid "Upload a file"
-msgstr "������������"
-
-msgid "Choose the file you want to upload."
-msgstr "���������������������������"
-
msgid "Define a New Storage Pool"
msgstr "���������������������"
@@ -1996,6 +2003,21 @@ msgstr "SCSI ���������"
msgid "Please, wait..."
msgstr "���������..."
+msgid "Add a Volume to Storage Pool"
+msgstr "���������������������������"
+
+msgid "Fetch from remote URL"
+msgstr "��������� URL ������"
+
+msgid "Enter the remote URL here."
+msgstr "��������������������� URL���"
+
+msgid "Upload a file"
+msgstr "������������"
+
+msgid "Choose the file you want to upload."
+msgstr "���������������������������"
+
msgid "Add Template"
msgstr "������������"
@@ -2196,3 +2218,8 @@ msgstr "������"
msgid "No templates found."
msgstr "������������������"
+
+#~ msgid ""
+#~ "Unable to get access metadata of virtual machine %(name)s. Details: "
+#~ "%(err)s"
+#~ msgstr "������������������������ %(name)s ��������� meta ������������������������%(err)s"
diff --git a/ui/pages/guest-edit.html.tmpl b/ui/pages/guest-edit.html.tmpl
index 389f3c5..a56d96c 100644
--- a/ui/pages/guest-edit.html.tmpl
+++ b/ui/pages/guest-edit.html.tmpl
@@ -122,8 +122,8 @@
<input type="text" id="permission-avail-searchBox">
<div class="body">
<div class="head">
- <div class="column column-user"><div class="item">Users</div></div>
- <div class="column column-group"><div class="item">Groups</div></div>
+ <div class="column column-user"><div class="item">$_("Users")</div></div>
+ <div class="column column-group"><div class="item">$_("Groups")</div></div>
</div>
<div id="permission-avail-users" class="column column-user"></div>
<div id="permission-avail-groups" class="column column-group"></div>
@@ -138,8 +138,8 @@
<input type="text" id="permission-sel-searchBox">
<div class="body">
<div class="head">
- <div class="column column-user"><div class="item">Users</div></div>
- <div class="column column-group"><div class="item">Groups</div></div>
+ <div class="column column-user"><div class="item">$_("Users")</div></div>
+ <div class="column column-group"><div class="item">$_("Groups")</div></div>
</div>
<div id="permission-sel-users" class="column column-user"></div>
<div id="permission-sel-groups" class="column column-group"></div>
--
2.1.0
2
1
10 Sep '15
V3:
- add the new field in docs/API.md.
V2:
- get releasever from rpm api instead of command line.
This patch expands the repo name of all YUM repos to values if any known
variable is found in it.
For example:
Fedora $releasever - $basearch
will (based on the running system) be displayed:
Fedora 21 - x86_64
Note: this is only an user experience improvement for the host tab. If
user decides to edit the repo, the original variables will be displayed.
Jose Ricardo Ziviani (3):
Implement a method to display the repo name expanding variables
Display the expanded repo name instead of variables
Adds the new display_repo_name field in the JSON API
docs/API.md | 2 ++
src/kimchi/repositories.py | 4 ++++
src/kimchi/yumparser.py | 60 +++++++++++++++++++++++++++++++++++++++++++++-
ui/js/src/kimchi.host.js | 2 +-
4 files changed, 66 insertions(+), 2 deletions(-)
--
1.9.1
2
4
10 Sep '15
This is the only window that has colons in fields labels. For better
consistence and avoid problems with translation, like chinese, this
patch is removing them.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
ui/pages/template-edit.html.tmpl | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/ui/pages/template-edit.html.tmpl b/ui/pages/template-edit.html.tmpl
index 5191f54..0ba24bc 100644
--- a/ui/pages/template-edit.html.tmpl
+++ b/ui/pages/template-edit.html.tmpl
@@ -120,7 +120,7 @@
</form>
<form id="form-template-processor">
<div>
- <label for="cpus">$_("CPU Number"):</label>
+ <label for="cpus">$_("CPU Number")</label>
<input type="text" value="1" id="cpus" />
</div>
<div class="manual">
@@ -129,11 +129,11 @@
</div>
<div class="topology hide">
<div>
- <label for="cores">$_("Cores"):</label>
+ <label for="cores">$_("Cores")</label>
<input type="text" value="1" id="cores" />
</div>
<div>
- <label for="threads">$_("Threads"):</label>
+ <label for="threads">$_("Threads")</label>
<select id="threads"></select>
</div>
</div>
--
2.1.0
3
2
10 Sep '15
Hi,
I am interested in understanding the rpm naming conventions we could
follow for WOK branch code release.
Question's I have are:
1. rpm naming convention.
2. Is WOK base frame work will be a new rpm ?
3. Do we ship any plugin as default (may be gingerbase)?
4. Do we ship plugins as separate rpm's ? (I hope so)
Thanks in advance,
Regards
Chandra
2
1
10 Sep '15
V2:
- get releasever from rpm api instead of command line.
This patch expands the repo name of all YUM repos to values if any known
variable is found in it.
For example:
Fedora $releasever - $basearch
will (based on the running system) be displayed:
Fedora 21 - x86_64
Note: this is only an user experience improvement for the host tab. If
user decides to edit the repo, the original variables will be displayed.
Jose Ricardo Ziviani (2):
Implement a method to display the repo name expanding variables
Display the expanded repo name instead of variables
src/kimchi/repositories.py | 4 ++++
src/kimchi/yumparser.py | 60 +++++++++++++++++++++++++++++++++++++++++++++-
ui/js/src/kimchi.host.js | 2 +-
3 files changed, 64 insertions(+), 2 deletions(-)
--
1.9.1
2
3
10 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Patch set that fixes wrong URL for Fedora Live 20 remote ISO and
adds a new options to Fedora 21 and 22.
Paulo Vital (3):
Update Fedora Live 20 URL as remote ISO
Add Fedora 21 as remote ISO option.
Add Fedora 22 as remote ISO option.
src/distros.d/fedora.json | 14 ++++++++++++++
1 file changed, 14 insertions(+)
--
2.4.3
2
4
09 Sep '15
This patch expands the repo name of all YUM repos to values if any known
variable is found in it.
For example:
Fedora $releasever - $basearch
will (based on the running system) be displayed:
Fedora 21 - x86_64
Note: this is only an user experience improvement for the host tab. If
user decides to edit the repo, the original variables will be displayed.
Jose Ricardo Ziviani (2):
Implement a method to display the repo name expanding variables
Display the expanded repo name instead of variables
src/kimchi/repositories.py | 4 ++++
src/kimchi/yumparser.py | 47 +++++++++++++++++++++++++++++++++++++++++++++-
ui/js/src/kimchi.host.js | 2 +-
3 files changed, 51 insertions(+), 2 deletions(-)
--
1.9.1
2
4
09 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Patch set that fixes worng information about Fedora 21 remote ISO and
adds a new option to Fedora 22.
Paulo Vital (2):
Change the version number of remote Fedora image.
Add Fedora 22 information as remote ISO option
src/distros.d/fedora.json | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
--
2.4.3
3
5
For some reason, commits 01 and 02 from "[wok V3 0/6] Make wok branch
identical to wok V3" were not entirely merged. This patchset fixes that.
Lucio Correia (2):
Fix merge of patch 01
Fix merge of patch 02
plugins/kimchi/ui/images/theme-default/alert.png | Bin 3537 -> 0 bytes
.../kimchi/ui/images/theme-default/check-green.png | Bin 3501 -> 0 bytes
.../kimchi/ui/images/theme-default/check-grey.png | Bin 3535 -> 0 bytes
.../ui/images/theme-default/folder-arrow-right.png | Bin 2958 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-alert.png | Bin 3545 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-event.png | Bin 3791 -> 0 bytes
.../ui/images/theme-default/icon-setting.png | Bin 3664 -> 0 bytes
.../kimchi/ui/images/theme-default/icon-tool.png | Bin 4466 -> 0 bytes
.../ui/images/theme-default/kimchi-loading.gif | Bin 6181 -> 0 bytes
.../kimchi/ui/images/theme-default/thumb-guest.png | Bin 3896 -> 0 bytes
.../kimchi/ui/images/theme-default/thumb-host.png | Bin 5069 -> 0 bytes
.../base/images/ui-bg_glass_65_ffffff_1x400.png | Bin 246 -> 0 bytes
.../themes/base/images/ui-icons_222222_256x240.png | Bin 7006 -> 0 bytes
ui/images/theme-default/alert.png | Bin 0 -> 3537 bytes
ui/images/theme-default/check-green.png | Bin 0 -> 3501 bytes
ui/images/theme-default/check-grey.png | Bin 0 -> 3535 bytes
ui/images/theme-default/folder-arrow-right.png | Bin 0 -> 2958 bytes
ui/images/theme-default/icon-alert.png | Bin 0 -> 3545 bytes
ui/images/theme-default/icon-event.png | Bin 0 -> 3791 bytes
ui/images/theme-default/icon-setting.png | Bin 0 -> 3664 bytes
ui/images/theme-default/icon-tool.png | Bin 0 -> 4466 bytes
ui/images/theme-default/thumb-guest.png | Bin 0 -> 3896 bytes
ui/images/theme-default/thumb-host.png | Bin 0 -> 5069 bytes
ui/images/theme-default/wok-loading.gif | Bin 0 -> 6181 bytes
.../base/images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 246 bytes
.../themes/base/images/ui-icons_222222_256x240.png | Bin 0 -> 7006 bytes
26 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 plugins/kimchi/ui/images/theme-default/alert.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/check-green.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/check-grey.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/folder-arrow-right.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-alert.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-event.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-setting.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/icon-tool.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/kimchi-loading.gif
delete mode 100644 plugins/kimchi/ui/images/theme-default/thumb-guest.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/thumb-host.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-icons_222222_256x240.png
create mode 100644 ui/images/theme-default/alert.png
create mode 100644 ui/images/theme-default/check-green.png
create mode 100644 ui/images/theme-default/check-grey.png
create mode 100644 ui/images/theme-default/folder-arrow-right.png
create mode 100644 ui/images/theme-default/icon-alert.png
create mode 100644 ui/images/theme-default/icon-event.png
create mode 100644 ui/images/theme-default/icon-setting.png
create mode 100644 ui/images/theme-default/icon-tool.png
create mode 100644 ui/images/theme-default/thumb-guest.png
create mode 100644 ui/images/theme-default/thumb-host.png
create mode 100644 ui/images/theme-default/wok-loading.gif
create mode 100644 ui/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
create mode 100644 ui/libs/themes/base/images/ui-icons_222222_256x240.png
2
6
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Fixed formattation of Run section to a better understand of firewall and SELinux
commands input.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
docs/README.md | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/docs/README.md b/docs/README.md
index 1b31ccf..b128510 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -25,32 +25,34 @@ Run
If you cannot access Wok, take a look at these 2 points:
-1. Firewall
+1. Firewall:
Wok uses by default the ports 8000, 8001 and 64667. To allow incoming connections:
For system using firewalld, do:
- sudo firewall-cmd --add-port=8000/tcp --permanent
- sudo firewall-cmd --add-port=8001/tcp --permanent
- sudo firewall-cmd --add-port=64667/tcp --permanent
- sudo firewall-cmd --reload
+
+ $ sudo firewall-cmd --add-port=8000/tcp --permanent
+ $ sudo firewall-cmd --add-port=8001/tcp --permanent
+ $ sudo firewall-cmd --add-port=64667/tcp --permanent
+ $ sudo firewall-cmd --reload
For openSUSE systems, do:
- sudo /sbin/SuSEfirewall2 open EXT TCP 8000
- sudo /sbin/SuSEfirewall2 open EXT TCP 8001
- sudo /sbin/SuSEfirewall2 open EXT TCP 64667
+
+ $ sudo /sbin/SuSEfirewall2 open EXT TCP 8000
+ $ sudo /sbin/SuSEfirewall2 open EXT TCP 8001
+ $ sudo /sbin/SuSEfirewall2 open EXT TCP 64667
For system using iptables, do:
- sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
- sudo iptables -A INPUT -p tcp --dport 8001 -j ACCEPT
- sudo iptables -A INPUT -p tcp --dport 64667 -j ACCEPT
- Don't forget to correctly save the rules.
+ $ sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
+ $ sudo iptables -A INPUT -p tcp --dport 8001 -j ACCEPT
+ $ sudo iptables -A INPUT -p tcp --dport 64667 -j ACCEPT
+ Don't forget to correctly save the rules.
-2. SELinux
+2. SELinux:
Allow httpd_t context for Wok web server:
- semanage permissive -a httpd_t
+ $ sudo semanage permissive -a httpd_t
Participating
--
2.4.3
2
1