#!/usr/bin/env perl
#------------------------------------------------------------------------------
#
# PgCluu - PostgreSQL monitoring tool with statistics collector and grapher
#
# This program is open source, licensed under the PostgreSQL license.
# For license terms, see the LICENSE file.
#
# Author: Gilles Darold
# Copyright: (C) 2012-2015 Gilles Darold - All rights reserved.
#------------------------------------------------------------------------------
use vars qw($VERSION $PROGRAM);

use strict qw(vars);
use warnings;


use IO::File;
use Getopt::Long qw(:config bundling no_ignore_case_always);
use File::Basename;
use Time::Local 'timegm_nocheck';
use POSIX qw(locale_h sys_wait_h ceil);
setlocale(LC_ALL, 'C');
use Storable qw(store_fd fd_retrieve);

$VERSION = '2.5';
$PROGRAM = 'pgCluu';

my $OUTPUT_DIR      = '';
my $SADF_PROG       = '/usr/bin/sadf';
my $DISABLE_SAR     = 0;
my $HTML            = '';
my $NO_TB_STAT      = 0;
my @INCLUDE_DB      = ();
my @INCLUDE_TB      = ();
my @INCLUDE_DEV     = ();
my @INCLUDE_IFACE   = ();
my $IMG_FORMAT      = 'png';
my $FH              = undef;
my %DEVFH           = ();
my $IDX             = 1;
my $HELP            = 0;
my $SHOW_VER        = 0;
my $DEBUG           = 0;
my $BEGIN           = '';
my $END             = '';
my $NUMBER_CPU      = 0;
my $TIMEZONE        = '00';
my $STATS_TIMEZONE  = '00';
my $REVERT_DATE     = 0;
my $FROM_SA_FILE    = 0;
my $SADC_INPUT_FILE = '';
my $SAR_INPUT_FILE  = '';
our @DEVICE_LIST    = ();
our @IFACE_LIST     = ();
my $ZCAT_PROG       = '/bin/zcat';
my $INTERVAL        = 1;
my $CAPTURE         = 0;
my $CACHE           = 0;
my $CLEAN           = 0;
my $MAX_INDEXES     = 5;

my %RELKIND = (
	'r' => 'tables',
	'i' => 'indexes',
	'S' => 'sequences',
	'v' => 'views',
	'c' => 'composite types',
	't' => 'toast tables'
);
my $TOP_STAT       = 10;

# Global variables that need to be saved in incremental mode
our %OVERALL_STATS   = ();
our %global_infos = ();
our @global_databases = ();
our @global_tbspnames = ();
our %all_stat_database = ();
our %all_stat_database_conflicts = ();
our %all_database_size = ();
our %all_tablespace_size = ();
our %all_vacuum_stat = ();
our %all_stat_user_tables = ();
our %all_stat_user_indexes = ();
our %all_stat_invalid_indexes = ();
our %all_stat_hash_indexes = ();
our %all_statio_user_tables = ();
our %all_relation_buffercache = ();
our %all_statio_all_indexes = ();
our %all_xlog_stat = ();
our %all_stat_bgwriter = ();
our %all_stat_connections = ();
our %all_stat_user_functions = ();
our %all_stat_replication = ();
our %all_pgbouncer_stats = ();
our %all_pgbouncer_ini = ();
our %all_pgbouncer_req_stats = ();
our %all_class_size = ();
our %all_stat_locks = ();
our %all_stat_unused_indexes = ();
our %all_stat_redundant_indexes = ();
our %all_stat_count_indexes = ();
our %all_stat_missing_fkindexes = ();
our %all_postgresql_conf = ();
our %all_recovery_conf = ();
our %all_postgresql_auto_conf = ();
our %pg_hba_conf = ();
our %pg_ident_conf = ();
our %all_settings = ();
our %all_nondefault_settings = ();
our %all_db_role_setting = ();
our %all_database_buffercache = ();
our %all_database_usagecount = ();
our %all_database_isdirty = ();
our %all_stat_archiver = ();
our %all_stat_statements = ();
our %pg_settings_diff = ();
our %db_role_setting_diff = ();

# Names of the variables that need to be saved as binary file
our @pg_to_be_stored = (
	'global_infos',
	'global_databases',
	'global_tbspnames',
	'all_stat_database',
	'all_stat_database_conflicts',
	'all_database_size',
	'all_tablespace_size',
	'all_vacuum_stat',
	'all_stat_user_tables',
	'all_stat_user_indexes',
	'all_stat_invalid_indexes',
	'all_stat_hash_indexes',
	'all_statio_user_tables',
	'all_relation_buffercache',
	'all_statio_all_indexes',
	'all_xlog_stat',
	'all_stat_bgwriter',
	'all_stat_connections',
	'all_stat_user_functions',
	'all_stat_replication',
	'all_pgbouncer_stats',
	'all_pgbouncer_ini',
	'all_pgbouncer_req_stats',
	'all_class_size',
	'all_stat_locks',
	'all_stat_unused_indexes',
	'all_stat_redundant_indexes',
	'all_stat_count_indexes',
	'all_stat_missing_fkindexes',
	'all_postgresql_conf',
	'all_recovery_conf',
	'all_postgresql_auto_conf',
	'pg_hba_conf',
	'pg_ident_conf',
	'all_settings',
	'all_nondefault_settings',
	'all_db_role_setting',
	'all_database_buffercache',
	'all_database_usagecount',
	'all_database_isdirty',
	'all_stat_archiver',
	'all_stat_statements',
);

# Names of sar variables that need to be saved as binary file
our %sar_cpu_stat = ();
our %sar_load_stat = ();
our %sar_process_stat = ();
our %sar_context_stat = ();
our %sar_memory_stat = ();
our %sar_swap_stat = ();
our %sar_pageswap_stat = ();
our %sar_block_stat = ();
our %sar_srvtime_stat = ();
our %sar_rw_devices_stat = ();
our %sar_util_devices_stat = ();
our %sar_networks_stat = ();
our %sar_neterror_stat = ();

our @sar_to_be_stored = (
	'global_infos',
	'sar_cpu_stat',
	'sar_load_stat',
	'sar_process_stat',
	'sar_context_stat',
	'sar_memory_stat',
	'sar_swap_stat',
	'sar_pageswap_stat',
	'sar_block_stat',
	'sar_srvtime_stat',
	'sar_rw_devices_stat',
	'sar_util_devices_stat',
	'sar_networks_stat',
	'sar_neterror_stat'
);

our %sysinfo   = (); # Hash used to store system information

# Store default timestamp
my ($o_sec, $o_min, $o_hour, $o_day, $o_month, $o_year) = localtime(time);
$o_year += 1900;
$o_month++;

# Variable use to construct the date part of the sar output
# it is set with de date found in sar file kernel header.
my $sar_year  = '';
my $sar_month = '';
my $sar_day   = '';


# Charset used in the html output
my $charset = 'utf-8';

# Statistics files to use with report
my %DB_GRAPH_INFOS = (
	'pg_stat_database.csv' => {
		'1' => {
			'name' =>  'database-backends',
			'title' => 'Connections on %s database',
			'all_title' => 'Global connections',
			'description' => 'Number of clients connected to a database.',
			'all_description' => 'Global number of clients connected.',
			'ylabel' => 'Connections',
			'legends' => ['backends'],
		},
		'2' => {
			'name' =>  'database-read_write_query',
			'title' => 'Affected tuples per operation on %s database',
			'all_title' => 'Global affected tuples per operation',
			'ylabel' => 'Tuples',
			'description' => 'Affected rows on databases grouped by statement family.',
			'all_description' => 'Global affected rows grouped by statement family.',
		},
		'3' => {
			'name' =>  'database-cache_ratio',
			'title' => 'Cache hit/miss ratio on %s database',
			'all_title' => 'Global cache hit/miss ratio',
			'description' => 'Per database cache hit/miss ratio.',
			'all_description' => 'Global cache hit/miss ratio.',
			'ylabel' => 'Blocks per second',
			'legends' => ['Cache hit','Cache miss','hit/miss ratio'],
			'y2label' => 'Percentage',
		},
		'4' => {
			'name' =>  'database-commits_rollbacks',
			'title' => 'Commits/Rollbacks per second on %s database',
			'all_title' => 'Global Commits/Rollbacks per second',
			'description' => 'Number of commits / rollbacks per second and number of backends per database.',
			'all_description' => 'Global number of commits / rollbacks per second and number of backends.',
			'ylabel' => 'Transaction/sec',
			'legends' => ['commit','rollback','backends'],
			'y2label' => 'Number of backend',
		},
		'5' => {
			'name' =>  'database-write_ratio',
			'title' => 'Write ratio on %s database',
			'all_title' => 'Global Write ratio',
			'description' => 'Write ratio on databases excluding templates and postgres.',
			'all_description' => 'Global write ratio, excluding templates and postgres databases.',
			'ylabel' => 'Write queries per second',
			'legends' => ['Insert','Update','Delete'],
		},
		'6' => {
			'name' =>  'database-read_ratio',
			'title' => 'Read tuples on %s database',
			'all_title' => 'Global read tuples',
			'description' => 'Show entries returned from the index and live rows fetched from the tables. The latter will be less if any dead or not-yet-committed rows are fetched using the index.',
			'all_description' => 'Show entries returned from the index and live rows fetched from the tables. The latter will be less if any dead or not-yet-committed rows are fetched using the index.',
			'ylabel' => 'Tuples per second',
			'legends' => ['Table (returned)','Index (fetched)'],
		},
		'7' => {
			'name' =>  'database-deadlocks',
			'title' => 'Number of deadlocks on %s database',
			'all_title' => 'Global number of deadlocks',
			'description' => 'Number of deadlocks detected in this database.',
			'all_description' => 'Global number of deadlocks detected.',
			'ylabel' => 'Number of deadlocks',
			'legends' => ['deadlocks'],
		},
		'8' => {
			'name' =>  'database-canceled_queries',
			'title' => 'Number of canceled queries on %s database',
			'all_title' => 'Global number of canceled queries',
			'description' => 'Number of queries canceled due to conflicts with recovery in this database. [Conflicts occur only on standby servers]',
			'all_description' => 'Global number of queries canceled due to conflicts with recovery. [Conflicts occur only on standby servers]',
			'ylabel' => 'Number of queries canceled',
			'legends' => ['conflicts'],
		},
		'9' => {
			'name' =>  'database-temporary_files',
			'title' => 'Number of temporary files on %s database',
			'all_title' => 'Global number of temporary files',
			'description' => 'Number of temporary files created by queries per database.',
			'all_description' => 'Global number of temporary files created by queries.',
			'ylabel' => 'Number of files',
			'legends' => ['temporary files'],
		},
		'10' => {
			'name' =>  'database-temporary_bytes',
			'title' => 'Size of temporary data on %s database',
			'all_title' => 'Global size of temporary data',
			'description' => 'Amount of data written to temporary files created by queries per database.',
			'all_description' => 'Global amount of data written to temporary files created by queries.',
			'ylabel' => 'Size per seconde',
			'legends' => ['temporary data'],
		},
	},
	'pg_stat_database_conflicts.csv' =>  {
		'1' => {
			'name' =>  'database-conflicts',
			'title' => 'Conflicts per type on %s database',
			'description' => 'Per database statistics about query cancels occurring due to conflicts with recovery on standby servers.',
		},
	},
	'pg_database_size.csv' => {
		'1' => {
			'name' =>  'database-size',
			'title' => 'Size of %s database',
			'description' => 'Database sizes.',
			'ylabel' => 'Size',
			'legends' => ['size'],
			'active' => 1,
		},
	},
	'pg_tablespace_size.csv' => {
		'1' => {
			'name' =>  'tablespace-size',
			'title' => 'Size of %s tablespace',
			'description' => 'Tablespace size and location.',
			'ylabel' => 'Size',
			'legends' => ['size'],
		},
	},
	'pg_stat_bgwriter.csv' => {
		'1' => {
			'name' => 'database-checkpoints',
			'title' => 'checkpoints counter stats',
			'description' => 'Background writer statistics on checkpoints. Checkpoints timed is checkpoints issued because of checkpoint_timeout and checkpoints request is checkpoint issued by request.',
			'ylabel' => 'Number of checkpoints',
			'legends' => ['checkpoints timed','checkpoints requests'],
		},
		'2' => {
			'name' =>  'database-bgwriter',
			'title' => 'background writer clean stats',
			'description' => 'Background writer cache cleaning statistics by checkpoints, lru and backends.',
			'ylabel' => 'Buffers per second',
			'legends' => ['checkpoint buffers','clean buffers','backend buffers'],
		},
		'3' => {
			'name' =>  'database-bgwriter_count',
			'title' => 'background writer count stats',
			'description' => 'Background writer counter stats. Max written clean reports the number of times the background writer stopped a cleaning scan because it had written too many buffers. Buffers backend fsync reports the number of times a backend had to execute its own fsync call (normally the background writer handles those even when the backend does its own write).',
			'ylabel' => 'Times per second',
			'legends' => ['maxwritten clean','buffers backend fsync'],
		},
		'4' => {
			'name' => 'database-checkpoints_time',
			'title' => 'checkpoints write stats',
			'description' => 'Background writer statistics on checkpoints. Checkpoint write time reports the total amount of time that has been spent in the portion of checkpoint processing where files are written to disk. Checkpoint sync time reports the total amount of time that has been spent in the portion of checkpoint processing where files are synchronized to disk.',
			'ylabel' => 'Duration',
			'legends' => ['checkpoint write time','checkpoint sync time'],
		},
	},
	'pg_stat_connections.csv' => {
		'1' => {
			'name' =>  'database-connections',
			'title' => 'Connections by type on %s database',
			'all_title' => 'Global connections by type',
			'description' => 'Connections by type including idle ones.',
			'all_description' => 'Global connections by type including idle ones.',
			'ylabel' => 'Number of connections',
			'legends' => ['Active','Idle','Idle in xact', 'Waiting for a lock'],
		},
	},
	'pg_stat_user_functions.csv' => {
		'1' => {
			'name' =>  'database-functions',
			'title' => 'Functions statistics on database %s',
			'description' => 'Statistics about executions times and duration of user functions.',
			'ylabel' => 'Duration',
			'active' => 1,
			'legends' => ['total time','self time'],
			'menu' => 'Functions statistics',
		},
	},
	'pg_stat_all_tables.csv' => {
		'1' => {
			'name' =>  'table-indexes',
			'title' => 'Sequencial vs Index scan on %s',
			'description' => 'Number of sequential scan versus index scan per table during the audit period.',
			'ylabel' => 'Number per second',
			'legends' => ['sequential scan','index scan','% index scan ratio'],
			'y2label' => 'Percent',
			'active' => 1,
			'menu' => 'Index scan ratio',
		},
		'2' => {
			'name' =>  'table-vacuums-analyzes',
			'title' => 'Analyze/vacuums count on %s',
			'description' => 'Number of analyze, autoanalyze, vacuum and autovacuum count per table during the audit period.',
			'ylabel' => 'Number',
			'legends' => ['Analyze','Autoanalyze','Vacuum','Autovacuum'],
			'active' => 1,
			'menu' => 'Vacuums/analyzes',
		},
		'3' => {
			'name' =>  'table-query-tuples',
			'title' => 'Insert/update/delete and hot update tuples on %s',
			'description' => 'Number of insert/update/delete and hot update tuples count per table during the audit period.',
			'ylabel' => 'Number per second',
			'legends' => ['Insert','Update','Delete','Hot Update'],
			'active' => 1,
			'menu' => 'insert/update/delete',
		},
		'4' => {
			'name' =>  'table-kind-tuples',
			'title' => 'Live vs dead tuples on %s',
			'description' => 'Number of live and dead tuples per table at end of the audit period.',
			'ylabel' => 'Number',
			'legends' => ['Live','Dead','% Bloat ratio'],
			'y2label' => 'Percent',
			'active' => 1,
			'menu' => 'Live vs dead tuples',
		},
	},
	'pg_statio_all_tables.csv' => {
		'1' => {
			'name' =>  'statio-table',
			'title' => 'Statistics about I/O on %s',
			'description' => 'Number of disk blocks read from this table or all indexes on this table versus number of buffer hits in a table or all indexes of this table.',
			'ylabel' => 'Number per second',
			'legends' => ['heap_blks_read','heap_blks_hit','idx_blks_read','idx_blks_hit'],
			'active' => 1,
			'menu' => 'Tables I/O stats',
		},
	},
	'pg_stat_all_indexes.csv' => {
		'1' => {
			'name' =>  'index-scan',
			'title' => 'Statistics about accesses to index %s',
			'description' => 'Number of index entries returned by index scans, and number of live table rows fetched by simple index scans using that index during the audit period.',
			'ylabel' => 'Number per second',
			'legends' => ['index scans initiated','index entries read','live table rows fetched'],
			'y2label' => 'Percent',
			'active' => 1,
			'menu' => 'Index read/fetch',
		},
	},
	'pg_statio_all_indexes.csv' => {
		'1' => {
			'name' =>  'statio-index',
			'title' => 'Statistics about I/O on %s',
			'description' => 'Number of disk blocks read from this index versus number of buffer hits in this index.',
			'ylabel' => 'Number per second',
			'legends' => ['idx_blks_read','idx_blks_hit'],
			'active' => 1,
			'menu' => 'Indexes I/O stats',
		},
	},
	'pg_stat_invalid_indexes.csv' => {
		'1' => {
			'name' =>  'index-invalid',
			'title' => 'Invalid indexes on %s',
			'description' => 'List of invalid indexes during concurrency build.',
			'ylabel' => 'Number',
			'legends' => ['Invalid index'],
			'active' => 1,
			'menu' => 'Invalid Indexes',
		},
	},'pg_stat_hash_indexes.csv' => {
		'1' => {
			'name' =>  'index-hash',
			'title' => 'Hash indexes on %s',
			'description' => 'List of hash indexes during concurrency build.',
			'ylabel' => 'Number',
			'legends' => ['Hash index'],
			'active' => 1,
			'menu' => 'Hash Indexes',
		},
	},
	'pg_stat_unused_indexes.csv' => {
		'1' => {
			'name' =>  'unused-index',
			'title' => 'Unused indexes on %s',
			'description' => 'List of indexes never used (idx_scan = 0).',
			'ylabel' => 'Number',
			'legends' => ['Unused index'],
			'active' => 1,
			'menu' => 'Unused Indexes',
		},
	},
	'pg_stat_redundant_indexes.csv' => {
		'1' => {
			'name' =>  'redundant-index',
			'title' => 'Redundant indexes on %s',
			'description' => 'List of useless indexes because they are redundant.',
			'ylabel' => 'Number',
			'legends' => ['Redundant index'],
			'active' => 1,
			'menu' => 'Redundant indexes',
		},
	},
	'pg_stat_count_indexes.csv' => {
		'1' => {
			'name' =>  'zero-index',
			'title' => 'Tables without indexes on %s',
			'description' => 'List of tables without indexes.',
			'ylabel' => 'Number',
			'legends' => ['No indexes'],
			'active' => 1,
			'menu' => 'Tables without index',
		},
		'2' => {
			'name' =>  'count-index',
			'title' => 'Tables with lot of indexes on %s',
			'description' => 'List of tables with lot of indexes.',
			'ylabel' => 'Number',
			'legends' => ['Indexes count'],
			'active' => 1,
			'menu' => "Table with more than $MAX_INDEXES Indexes",
		},
	},
	'pg_stat_missing_fkindexes.csv' => {
		'1' => {
			'name' =>  'missing-index',
			'title' => 'Missing FK indexes on %s',
			'description' => 'List of DDL to create missing indexes on foreign keys.',
			'ylabel' => 'Number',
			'legends' => ['Missing index'],
			'active' => 1,
			'menu' => 'Missing indexes',
		},
	},
	'pg_xlog_stat.csv' => {
		'1' => {
			'name' =>  'database-xlog_files',
			'title' => 'WAL files',
			'description' => 'Number of WAL file in the xlog directory.',
			'ylabel' => 'Number of files',
			'legends' => ['total xlog'],
		},
	},
	'pg_stat_replication.csv' => {
		'1' => {
			'name' =>  'database-xlog',
			'title' => 'Xlog written',
			'description' => 'Number of xlog data written per second.',
			'ylabel' => 'Size per second',
			'legends' => ['written'],
		},
		'2' => {
			'name' =>  'database-replication',
			'title' => 'Replication lag with %s',
			'description' => 'Lag of replication between primary and secondary servers.',
			'ylabel' => 'Lag sizes',
			'legends' => ['Sent','Write','Replay'],
		},
	},
	'pgbouncer_stats.csv' => {
		'1' => {
			'name' =>  'pgbouncer-connections',
			'title' => 'pgbouncer connections statistics on pool %s',
			'description' => 'Number of active/waiting clients, active/idle/used server connections and maximum wait duration for client connections in each pgbouncer pool.',
			'ylabel' => 'Number of connexions',
			'legends' => ['Client active','Client waiting','Server active','Server idle','Server used','Clients wait time'],
			'y2label' => 'Duration',
		},
	},
	'pgbouncer_req_stats.csv' => {
		'1' => {
			'name' =>  'pgbouncer-duration',
			'title' => 'pgbouncer average queries duration on %s',
			'description' => 'Average queries duration in each pgbouncer pool.',
			'ylabel' => 'mDuration',
			'legends' => ['avg_query'],
		},
		'2' => {
			'name' =>  'pgbouncer-number',
			'title' => 'pgbouncer queries per second on %s',
			'description' => 'Number of queries per second in each pgbouncer pool.',
			'ylabel' => 'Number',
			'legends' => ['avg_req'],
		},
	},
	'pg_class_size.csv' => {
		'1' => {
			'name' =>  'table-size',
			'title' => 'Size of table %s',
			'description' => 'Disk space used by the table with number of rows at end of the audit.',
			'ylabel' => 'Size',
			'legends' => ['Object size', 'Number of tuples' ],
			'y2label' => 'Number',
			'active' => 1,
			'menu' => 'Size and tuples',
		},
		'2' => {
			'name' =>  'index-size',
			'title' => 'Size of index %s',
			'description' => 'Disk space used by the index with number of rows at end of the audit.',
			'ylabel' => 'Size',
			'legends' => ['Object size', 'Number of tuples' ],
			'y2label' => 'Number',
			'active' => 1,
			'menu' => 'Size and tuples',
		},
	},
	'pg_stat_locks.csv' => {
		'1' => {
			'name' =>  'database-lock-types',
			'title' => 'Types of locks on %s database',
			'description' => 'Number of locks per type in a database. Type of the lockable object: relation, extend, page, tuple, transactionid, virtualxid, object, userlock, or advisory.',
			'ylabel' => 'Number',
			'legends' => [],
			'active' => 1,
		},
		'2' => {
			'name' =>  'database-lock-modes',
			'title' => 'Modes of locks on %s database',
			'description' => 'Number of locks per lock mode held or desired by all process.',
			'ylabel' => 'Number',
			'legends' => [],
			'active' => 1,
		},
		'3' => {
			'name' =>  'database-lock-granted',
			'title' => 'Granted locks on %s database',
			'description' => 'Number of locks held (granted) or awaited (waiting).',
			'ylabel' => 'Number',
			'legends' => [],
			'active' => 1,
		},
	},
	'postgresql.conf' => {
		'1' => {
			'name' =>  'cluster-pgconf',
			'title' => 'PostgreSQL configuration',
			'description' => 'Configuration directives and values defined in file postgresql.conf.',
			'ylabel' => 'Number',
			'legends' => ['Settings'],
			'active' => 1,
			'menu' => 'PostgreSQL configuration',
		},
	},
	'postgresql.auto.conf' => {
		'1' => {
			'name' =>  'cluster-alterconf',
			'title' => 'PostgreSQL system altered configuration',
			'description' => 'Configuration directives and values defined using ALTER SYSTEM.',
			'ylabel' => 'Number',
			'legends' => ['Settings'],
			'active' => 1,
			'menu' => 'PostgreSQL system altered configuration',
		},
	},
	'recovery.conf' => {
		'1' => {
			'name' =>  'cluster-recoveryconf',
			'title' => 'PostgreSQL recovery configuration',
			'description' => 'Configuration directives and values defined in file recovery.conf.',
			'ylabel' => 'Number',
			'legends' => ['Settings'],
			'active' => 1,
			'menu' => 'PostgreSQL recovery configuration',
		},
	},
	'pg_hba.conf' => {
		'1' => {
			'name' =>  'cluster-pghba',
			'title' => 'PostgreSQL authorization',
			'description' => 'Client authentication controlled by pg_hba.conf configuration file.',
			'ylabel' => 'Number',
			'legends' => ['Setting','Value'],
			'active' => 1,
			'menu' => 'PostgreSQL authorization',
		},
	},
	'pg_ident.conf' => {
		'1' => {
			'name' =>  'cluster-pgident',
			'title' => 'PostgreSQL User Name Maps',
			'description' => 'Different operating system user / database user mappings might be needed for different connections. They are defined in file pg_ident.conf.',
			'ylabel' => 'Number',
			'legends' => ['Setting','Value'],
			'active' => 1,
			'menu' => 'User Name Maps',
		},
	},
	'pg_settings.csv' => {
		'1' => {
			'name' =>  'cluster-settings',
			'title' => 'PostgreSQL Settings',
			'description' => 'All configuration directives and values defined in pg_settings.',
			'ylabel' => 'Number',
			'legends' => ['Settings'],
			'active' => 1,
			'menu' => 'PostgreSQL settings',
		},
	},
	'pg_nondefault_settings.csv' => {
		'1' => {
			'name' =>  'cluster-nondefault-settings',
			'title' => 'PostgreSQL Non Default Settings',
			'description' => 'Non default configuration directives and values defined in pg_settings.',
			'ylabel' => 'Number',
			'legends' => ['Settings'],
			'active' => 1,
			'menu' => 'PostgreSQL non default settings',
		},
	},
	'pg_db_role_setting.csv' => {
		'1' => {
			'name' =>  'cluster-dbrolesetting',
			'title' => 'PostgreSQL Database/Roles Settings',
			'description' => 'Configuration directives and values defined with ALTER DATABASE and ALTER ROLE.',
			'ylabel' => 'Number',
			'legends' => ['Settings'],
			'active' => 1,
			'menu' => 'Database/Roles settings',
		},
	},
	'pgbouncer.ini' => {
		'1' => {
			'name' =>  'cluster-pgbouncer',
			'title' => 'Pgbouncer configuration',
			'description' => 'Configuration directives and values defined in file pgbouncer.ini.',
			'ylabel' => 'Number',
			'legends' => ['Setting','Value'],
			'active' => 1,
			'menu' => 'Pgbouncer settings',
		},
	},
	'pg_database_buffercache.csv' => {
		'1' => {
			'name' =>  'cluster-buffersused',
			'title' => 'Shared buffers utilization per database',
			'description' => 'Show statistics about percentage of shared buffers used per database.',
			'ylabel' => 'Percent',
			'legends' => [],
			'active' => 1,
			'menu' => 'Shared buffers utilization',
		},
		'2' => {
			'name' =>  'cluster-databaseloaded',
			'title' => 'Percentage of each databases loaded in shared buffers',
			'description' => 'Show statistics about percentage of each database loaded in shared buffers.',
			'ylabel' => 'Percent',
			'legends' => [],
			'menu' => 'Databases in shared buffers',
		},
	},
	'pg_database_usagecount.csv' => {
		'1' => {
			'name' =>  'cluster-usagecount',
			'title' => 'Shared buffers usagecount distribution',
			'description' => 'Show statistics about usagecount distribution in shared buffers.',
			'ylabel' => 'Percent',
			'legends' => [],
			'menu' => 'Usagecount utilization',
			'active' => 1,
		},
	},
	'pg_database_isdirty.csv' => {
		'1' => {
			'name' =>  'cluster-isdirty',
			'title' => 'Dirty shared buffers usagecount distribution',
			'description' => 'Show statistics about usagecount distribution in dirty shared buffers.',
			'ylabel' => 'Percent',
			'legends' => [],
			'menu' => 'Dirty Usagecount',
			'active' => 1,
		},
	},
	'pg_relation_buffercache.csv' => {
		'1' => {
			'name' =>  'buffercache-relation',
			'title' => 'Statistics about cache utilization for %s database',
			'description' => 'Number of shared buffers/pages used by a relation.',
			'ylabel' => 'Number',
			'legends' => ['buffers'],
			'active' => 1,
			'menu' => 'Buffercache per relation',
		},
		'2' => {
			'name' =>  'statio-buffercache',
			'title' => 'Statistics about cache utilization %s relation',
			'description' => 'Number of buffers loaded in cache for a relation and the percentage of the relation loaded.',
			'ylabel' => 'Number',
			'y2label' => 'percent',
			'legends' => ['buffered','relation %'],
			'menu' => 'Buffer I/O per relation',
		},
	},
	'pg_stat_archiver.csv' => {
		'1' => {
			'name' =>  'cluster-archive',
			'title' => 'Statistics about archiver',
			'description' => 'Number of WAL files archived with number of failure.',
			'ylabel' => 'Number',
			'legends' => ['archived count', 'failed count'],
			'active' => 1,
			'menu' => 'Archiving',
		}
	},
	'pg_stat_statements.csv' => {
		'1' => {
			'name' =>  'database-queries',
			'title' => 'Statistics about statements',
			'description' => 'Top N statistics about slowest or most used queries.',
			'ylabel' => 'Number',
			'legends' => ['queries'],
			'active' => 1,
			'menu' => 'Statements statistics',
		}
	},
);

my %SAR_GRAPH_INFOS = (
	'1' => {
		'name' =>  'system-cpu',
		'title' => 'CPU %s utilization',
		'all_title' => 'Global CPU utilization',
		'description' => 'Percentage of CPU utilization that occurred while executing at the system level (kernel), the user level (application) and the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.',
		'all_description' => 'Percentage of CPU utilization that occurred while executing at the system level (kernel), the user level (application) and the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.',
		'ylabel' => 'Percentage',
		'legends' => ['Total','System','User','Iowait'],
		'active' => 1,
	},
	'2' => {
		'name' =>  'system-load',
		'title' => 'System load',
		'description' => 'System  load average for the last minute, the past 5 and 15 minutes. The load average is calculated as the average number of runnable or running tasks (R state), and the number of tasks in uninterruptible sleep (D state) over the specified interval.',
		'ylabel' => 'Process load',
		'legends' => ['ldavg-1','ldavg-5','ldavg-15'],
	},
	'3' => {
		'name' =>  'system-process',
		'title' => 'Number of process',
		'description' => 'Number of tasks in the task list.',
		'ylabel' => 'Number of process',
		'legends' => ['plist-sz'],
	},
	'4' => {
		'name' =>  'system-memory',
		'title' => 'System memory utilization',
		'description' => 'Amount of memory used to cache data or as buffers by the kernel and free memory available.',
		'ylabel' => 'Memory size',
		'legends' => ['cached','buffers','memfree'],
	},
	'5' => {
		'name' =>  'system-swap',
		'title' => 'Swap In/Out (pages/seconds)',
		'description' => 'Total number of swap pages the system brought in/out per second. The page size usually is 4096 bytes.',
		'ylabel' => 'Pages/second',
		'legends' => ['pswpin/s','pswpout/s'],
	},
	'6' => {
		'name' =>  'system-block',
		'title' => 'Block In/Out (blocks/seconds)',
		'description' => 'Total amount of data read/write from the devices in blocks per second. Blocks are equivalent to sectors and therefore have a size of 512 bytes.',
		'ylabel' => 'Block per second',
		'legends' => ['bread/s','bwrtn/s'],
	},
	'7' => {
		'name' =>  'system-device',
		'title' => 'Data read/write on device %s',
		'description' => 'Number of bytes read/write from/to the device..',
		'ylabel' => 'Size Read/Written per second',
		'legends' => ['Read', 'Write'],
	},
	'8' => {
		'name' =>  'system-cpudevice',
		'title' => 'CPU utilization on device %s',
		'description' => 'Percentage of CPU time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.',
		'ylabel' => 'Percentage of CPU',
		'legends' => ['cpu used'],
	},
	'9' => {
		'name' =>  'system-srvtime',
		'title' => 'Average service/wait time for I/O requests on device %s',
		'description' => 'The average service time (in milliseconds) for I/O requests that were issued to the device.',
		'ylabel' => 'Milliseconds',
		'legends' => ['svctm','await'],
	},
	'10' => {
		'name' =>  'system-runqueue',
		'title' => 'Run queue length',
		'description' => 'Number of tasks waiting for run time.',
		'ylabel' => 'Run queue length',
		'legends' => ['runq-sz'],
	},
	'11' => {
		'name' => 'system-page',
		'title' => 'System cache statistics',
		'description' => 'Total number of kilobytes the system paged in/out from/to disk per second, and number of major faults the system has made per second, those which have required loading a memory page from disk.',
		'ylabel' => 'Size paged',
		'y2label' => 'Number of faults',
		'legends' => [ 'pgpgin/s', 'pgpgout/s', 'page faults/s' ],
	},
	'12' => {
		'name' => 'network-utilization',
		'title' => 'Network utilization on interface %s',
		'description' => 'Report statistics from the network devices utilization.',
		'ylabel' => 'Size per second',
		'legends' => ['received (rx)', 'transmitted (tx)' ],
	},
	'13' => {
		'name' => 'network-error',
		'title' => 'Network errors on interface %s',
		'description' => 'Report statistics on failures from the network device. Number of bad packets received,  number of errors that happened while transmitting packets, and number of collisions that happened per second while transmitting packets.',
		'ylabel' => 'Number per second',
		'legends' => ['rx errors', 'tx errors', 'collisions' ],
	},
	'14' => {
		'name' =>  'system-cswch',
		'title' => 'Context switches',
		'description' => 'Total number of context switches per second.',
		'ylabel' => 'Context switches',
		'legends' => ['cswch/s'],
	},
	'15' => {
		'name' =>  'system-pcrea',
		'title' => 'Tasks created',
		'description' => 'Total number of tasks created per second.',
		'ylabel' => 'Tasks',
		'legends' => ['proc/s'],
	},
	'16' => {
		'name' =>  'system-tps',
		'title' => 'Total number of transfers per second',
		'description' => 'Total number of transfers per second that were issued to physical devices. A transfer is an I/O request to a physical device. Multiple logical requests can be combined into a single I/O request to the device. A transfer is of indeterminate size.',
		'ylabel' => 'Transfers per second',
		'legends' => ['tps','rtps','wtps'],
	},
	'17' => {
		'name' =>  'system-tpsdevice',
		'title' => 'Transfert per second on device %s',
		'description' => 'Number of transfers per second that were issued to the device, multiple logical requests can be combined into a single I/O request to the device (a transfer is of indeterminate size).',
		'ylabel' => 'Number of transfers per second',
		'legends' => ['Tps'],
	},

);

# Process command line options and look for an action keyword. There
# are no mandatory options.
my @dbs_opts = ();
my @dev_opts = ();
my @tbs_opts = ();
my @net_opts = ();
GetOptions(
	"b|begin=s"          => \$BEGIN,
	"d|db-only=s"        => \@dbs_opts,
	"c|clean!"           => \$CLEAN,
	"C|cache!"           => \$CACHE,
	"D|device-only=s"    => \@dev_opts,
	"e|end=s"            => \$END,
	"h|help!"            => \$HELP,
	"i|sar-file=s"       => \$SAR_INPUT_FILE,
	"I|sadc-file=s"      => \$SADC_INPUT_FILE,
	"n|top-number=i"     => \$TOP_STAT,
	"N|network-only=s"   => \@net_opts,
	"o|output=s"         => \$OUTPUT_DIR,
	"s|sadf=s"           => \$SADF_PROG,
	"r|reverse-date"     => \$REVERT_DATE,
	"S|disable-sar!"     => \$DISABLE_SAR,
	"t|with-table=s"     => \@tbs_opts,
	"T|no-table!"        => \$NO_TB_STAT,
	"v|verbose!"         => \$DEBUG,
	"V|version!"         => \$SHOW_VER,
	"z|timezone=s"       => \$TIMEZONE,
	"Z|stats-timezone=s" => \$STATS_TIMEZONE,
	"from-sa-file!"      => \$FROM_SA_FILE,
	"charset=s"          => \$charset,
) or die usage();
&usage if ($HELP);

# Print version number to stdout
if ($SHOW_VER) {
	print "Version: $VERSION\n";
	exit 0;
}

my $INPUT_DIR   = $ARGV[0] || '';
$INPUT_DIR =~ s/\/$//;
$OUTPUT_DIR =~ s/\/$//;

# Set list of objects to monitor from command line options
# options. It can be used multiple time but also as a comma
# separated list of object name.
foreach (@dbs_opts) {
	push(@INCLUDE_DB, split(/[,]+/, $_));
}
foreach (@dev_opts) {
	push(@INCLUDE_DEV, split(/[,]+/, $_));
}
foreach (@tbs_opts) {
	push(@INCLUDE_TB, split(/[,]+/, $_));
}
foreach (@net_opts) {
	push(@INCLUDE_IFACE, split(/[,]+/, $_));
}

# Check start/end date time
if ($BEGIN) {
	if ($BEGIN =~ /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/) {
		$BEGIN = &timegm_nocheck($6, $5, $4, $3, $2 - 1, $1 - 1900) * 1000;
		$o_day = $3;
		$o_month = $2;
		$o_year = $1;
	} elsif ($BEGIN =~ /^(\d{4})-(\d{2})-(\d{2})$/) {
		$BEGIN = &timegm_nocheck(0, 0, 0, $3, $2 - 1, $1 - 1900) * 1000;
		$o_day = $3;
		$o_month = $2;
		$o_year = $1;
	} else {
		die "FATAL: bad format for begin datetime, should be yyyy-mm-dd hh:mm:ss\n";
	}
}
if ($END) {
	if ($END =~ /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/) {
		$END = &timegm_nocheck($6, $5, $4, $3, $2 - 1, $1 - 1900) * 1000;
	} elsif ($END =~ /^(\d{4})-(\d{2})-(\d{2})$/) {
		$END = &timegm_nocheck(0, 0, 0, $3, $2 - 1, $1 - 1900) * 1000;
	} else {
		die "FATAL: bad format for ending datetime, should be yyyy-mm-dd hh:mm:ss\n";
	}
}

# Warn that in cache mode the output directory in the same as input one
if ($CACHE && $OUTPUT_DIR) {
	warn "WARNING: output directory will not be used, cache files will be generated in $INPUT_DIR\n";
}

# Force the user to give an output directory
if (!$CACHE && !$OUTPUT_DIR) {
	die "FATAL: you must give an output directory $OUTPUT_DIR.\n";
} elsif (!$CACHE) {
	# Check if the directory is empty if we are not in cache mode
	opendir(IDIR, "$OUTPUT_DIR") || die "FATAL: can not open directory $OUTPUT_DIR: $!";
	my @files = grep { /\.html$/ } readdir(IDIR);
	closedir(IDIR);
	if ($#files >= 0) {
		die "FATAL: output directory $OUTPUT_DIR is not empty.";
	}
}

# Check that sar input file is set when no input directory is provided
# otherwise that mean that this is a miss use and the input directory
# is missing.
if (!$INPUT_DIR || !-d $INPUT_DIR) {
	if (!$SAR_INPUT_FILE && !$SADC_INPUT_FILE) {
		print STDERR "ERROR: you must specify a valid input directory: $INPUT_DIR.\n";
		&usage();
	}
}

# As cache mode can be run in cron job, absolute path for input directory is mandatory
if ($CACHE) {
	# Ensure this is not a relative path
	if (dirname($INPUT_DIR) eq '.') {
		die "FATAL: input directory ($INPUT_DIR) must be an absolute path in caching mode.\n";
	}

} else {

	# Write resources files (js and css) from __DATA__ section if they have not
	# been copied yet.
	&write_resources();

}

####
# In cache mode we have to look into subdirectories to find daily or hourly data files.
# In normal mode we will just compute statistics from the input directory.
# All working directories will be added to the @WORK_DIRS array
####
my @WORK_DIRS = ();
# Set working dir to - to mark that it is not used, by this way we will only parse sar file
if (!$INPUT_DIR && ($SAR_INPUT_FILE || $SADC_INPUT_FILE)) {
	push(@WORK_DIRS, '-');
} else {
	@WORK_DIRS = &get_data_directories();
}

####
# Now we will look over each statistics directories to compute stats
####
my $ORIG_OUTPUT_DIR = $OUTPUT_DIR;
foreach (my $dx = 0; $dx <= $#WORK_DIRS; $dx++) {

	# Reset global variables before processing a new work dir
	&clear_stats();

	my $in_dir = "$INPUT_DIR/$WORK_DIRS[$dx]";
	if ($WORK_DIRS[$dx] ne '-') {
		$OUTPUT_DIR = "$ORIG_OUTPUT_DIR/$WORK_DIRS[$dx]";
	} else {
		$OUTPUT_DIR = "$ORIG_OUTPUT_DIR";
	}

	# Check if we have binary file in the directory
	my @binfiles = ();
	if (-d "$in_dir") {
		opendir(IDIR, "$in_dir") || die "FATAL: can't opendir $in_dir: $!";
		@binfiles = grep { /^all_.*\.bin$/ } readdir(IDIR);
		closedir(IDIR);
	}

	# With cache mode look if the input directory already has cache files
	if ( $CACHE && ($#binfiles >= 0) ) {
		print "DEBUG: directory $in_dir has already been cached, skip it.\n" if ($DEBUG);
		next;
	}

	# Set default sysstat file to read (binary or text format)
	# an extract the disk devices and network interfaces list
	# if there's no binary files
	my $sar_file = '';
	my $sadc_file = '';
	if (!$DISABLE_SAR && ($#binfiles < 0) ) {
		($sar_file, $sadc_file) = &set_sysstat_file($in_dir);
		@DEVICE_LIST = &get_device_list($sar_file, $sadc_file);
		@IFACE_LIST = &get_interface_list($sar_file, $sadc_file);
	}

	# Look at system information
	if (-e "$in_dir/sys_cache.bin") {
		print "DEBUG: Loading system information from cache file $in_dir/sys_cache.bin\n" if ($DEBUG);
		&load_sys_binary($in_dir, "sys_cache.bin");
	} elsif (-e "$in_dir/sysinfo.txt") {
		print "DEBUG: Loading system information from file $in_dir/sysinfo.txt\n" if ($DEBUG);
		%sysinfo = &read_sysinfo("$in_dir/sysinfo.txt");
		$sysinfo{RELEASE}{'name'} ||= 'unknown';
	} elsif (-e "$in_dir/sysinfo.txt.gz") {
		print "DEBUG: Loading system information from file $in_dir/sysinfo.txt.gz\n" if ($DEBUG);
		%sysinfo = &read_sysinfo("$in_dir/sysinfo.txt.gz");
		$sysinfo{RELEASE}{'name'} ||= 'unknown';
	}
	if ($CACHE && (scalar keys %sysinfo > 0) ) {
		print "DEBUG: Dumping system information into cache file $in_dir/sys_cache.bin\n" if ($DEBUG);
		&dump_sys_binary($in_dir, "sys_cache.bin");
	}

	# Defined the backward level where ressources files are stored
	my $src_base = $WORK_DIRS[$dx];
	$src_base =~ s/\d+/../g;
	$src_base = '' if ($WORK_DIRS[$dx] eq '-');

	# parse SQL stats files
	if (-d "$in_dir") {

		# Create output subdirectories if not exists yet
		if (!$CACHE && !-e "$OUTPUT_DIR") {
			my $ret = `mkdir -p $OUTPUT_DIR 2>&1`;
			if ($ret) {
				die "FATAL: $ret\n";
			}
		}

		my @statistics_build = ();
		if ($#binfiles == -1) {

			# Check if there is csv file in the input directory
			print "DEBUG: looking for CSV file into directory $in_dir/\n" if ($DEBUG);
			opendir(IDIR, "$in_dir") || die "FATAL: can't opendir $in_dir: $!";
			my @files = grep { /\.csv(\.gz)?$/ } readdir(IDIR);
			closedir(IDIR);
			if ($#files < 0) {
				die "FATAL: no csv file found in $in_dir";
			}

			# Detect interval from csv file
			if (-e "$in_dir/pg_stat_database.csv" && !-z "$in_dir/pg_stat_database.csv") {
				$INTERVAL = &detect_interval("$in_dir/pg_stat_database.csv");
			} elsif (-e "$in_dir/pg_stat_database.csv.gz" ) {
				$INTERVAL = &detect_interval("$in_dir/pg_stat_database.csv.gz");
			}
			print "DEBUG: autodetected interval value $INTERVAL\n" if ($DEBUG);

			# Detect timezone from csv file
			if ($STATS_TIMEZONE eq '00') {
				if (-e "$in_dir/pg_stat_database.csv" && !-z "$in_dir/pg_stat_database.csv") {
					$STATS_TIMEZONE = &detect_timezone("$in_dir/pg_stat_database.csv");
				} elsif (-e "$in_dir/pg_stat_database.csv.gz" ) {
					$STATS_TIMEZONE = &detect_timezone("$in_dir/pg_stat_database.csv.gz");
				}
				if ($TIMEZONE eq '00') {
					$TIMEZONE = $STATS_TIMEZONE;
				}

				print "DEBUG: autodetected timezone value database : $STATS_TIMEZONE, system: $TIMEZONE\n" if ($DEBUG);
			}

			# Enable capture mode if all data file are not present
			if (!-e "$in_dir/pg_stat_connections.csv" && !-e "$in_dir/pg_stat_connections.csv.gz") {
				$CAPTURE = 1;
				print "DEBUG: detecting capture mode, enabling it.\n" if ($DEBUG);
				if ($CACHE) {
					die "FATAL: caching mode can not be used on a capture repository.\n";
				}
			}

			# Loop over CSV files and graphics definition to generate reports
			print "DEBUG: Building PostgreSQL statistics from CSV files\n" if ($DEBUG);
			foreach my $k (sort {$a cmp $b} keys %DB_GRAPH_INFOS) {
				if (-e "$in_dir/$k" && !-z "$in_dir/$k") {
					if (-e "$in_dir/$k" && !-z "$in_dir/$k") {
						&compute_postgresql_stat($in_dir, $k, $src_base, %{$DB_GRAPH_INFOS{$k}});
						push(@statistics_build, $k);
					}
				} elsif (-e "$in_dir/$k.gz" && !-z "$in_dir/$k.gz") {
					if (-e "$in_dir/$k.gz" && !-z "$in_dir/$k.gz") {
						&compute_postgresql_stat($in_dir, "$k.gz", $src_base, %{$DB_GRAPH_INFOS{$k}}); 
						push(@statistics_build, $k);
					}
				} elsif ($k =~ /_all_/) {
					my $f = $k;
					$f =~ s/_all_/_user_/;
					if (-e "$in_dir/$f" && !-z "$in_dir/$f") {
						&compute_postgresql_stat($in_dir, $f, $src_base, %{$DB_GRAPH_INFOS{$k}});
						push(@statistics_build, $f);
					} elsif (-e "$in_dir/$f.gz" && !-z "$in_dir/$f.gz") {
						&compute_postgresql_stat($in_dir, "$f.gz", $src_base, %{$DB_GRAPH_INFOS{$k}});
						push(@statistics_build, $f);
					}
				}
			}

			if ($CACHE) {
				print "DEBUG: Generating PostgreSQL statistics files cache into $in_dir/\n" if ($DEBUG);
				%global_infos = ('interval' => $INTERVAL, 'in_dir' => $in_dir, 'timezone' => $TIMEZONE, 'stats_timezone' => $STATS_TIMEZONE);
				&dump_pg_binary($in_dir);
			}

		} else {

			# Load statistics from cache files
			print "DEBUG: Loading PostgreSQL statistics from cache files $in_dir/*.bin\n" if ($DEBUG);
			&load_pg_binary($in_dir);

			# Try to find the interval related to these statistics
			if ($global_infos{interval}) {
				$INTERVAL = $global_infos{interval};
			} else {
				my $prev_val = 0;
				my $dt = 0;
				foreach $dt (sort {$a <=> $b} keys %all_stat_database) {
					if ($prev_val) {
						$dt = ($dt - $prev_val)/1000;
						last if ($dt > 0);
					}
					$prev_val = $dt;
				}
				if ( (length($dt) >= 2) && ($dt =~ /([1234])$/) ) {
					$dt -= $1;
				}
				$INTERVAL = $dt if ($dt);
			}
			if (($TIMEZONE eq '00') && $global_infos{timezone}) {
				$TIMEZONE = $global_infos{timezone};
			}
			if (($STATS_TIMEZONE eq '00') && $global_infos{stats_timezone}) {
				$STATS_TIMEZONE = $global_infos{stats_timezone};
			}
		}
		
		if (!$CACHE) {

			# Loop over statistic in memory to generate reports
			print "DEBUG: Building PostgreSQL statistics reports\n" if ($DEBUG);
			if ($#statistics_build > 0) {
				foreach my $k (@statistics_build) {
					&compute_postgresql_report($k, $src_base, %{$DB_GRAPH_INFOS{$k}}); 
				}
			} else {
				# Try to limit report generation to stats that exists in memory.
				# The storage variable name are the same than the keys in DB_GRAPH_INFOS
				# minus some transformation.
				foreach my $k (sort {$a cmp $b} keys %DB_GRAPH_INFOS) {
					my $inmem = $k;
					$inmem =~ s/\.csv//;
					$inmem =~ s/\./_/g;
					$inmem =~ s/^pg_/all_/;
					if ($inmem eq 'pgbouncer_stats') {
						$inmem = 'all_pgbouncer_stats';
					}
					if (($inmem =~ /_conf/) && ($inmem !~ /^all/)) {
						$inmem = 'all_' . $inmem;
					}
					$inmem =~ s/_all_/_user_/;
					# Skip this report if there's no statistics loaded in memory
					next if (scalar keys %{$inmem} == 0);
					print "DEBUG: Building report for $k (from memory \%$inmem)\n" if ($DEBUG);
					if ($k =~ /_all_/) {
						my $f = $k;
						$f =~ s/_all_/_user_/;
						&compute_postgresql_report($f, $src_base, %{$DB_GRAPH_INFOS{$k}}); 
					} else {
						&compute_postgresql_report($k, $src_base, %{$DB_GRAPH_INFOS{$k}}); 
					}
				}
			}

			# Add database general information
			foreach my $db (keys %{$OVERALL_STATS{'database'}}) {
				&write_database_info($db);
			}

			# Terminate each database and pgbouncer html file with the footer
			opendir(ODIR, "$OUTPUT_DIR") || die "FATAL: can't opendir $OUTPUT_DIR: $!";
			my @files = grep { /\.html$/ } readdir(ODIR);
			closedir(ODIR);
			foreach my $f (@files) {
				&end_html_file("$OUTPUT_DIR/$f");
			}
		}

	} elsif (!$sar_file) {

		print "FATAL: $in_dir is not a valid data directory\n";
		exit 1;

	}

	# Clear memory from PostgreSQL statistics storage
	&clear_db_stats();

	# parse SAR stats file
	if (!$DISABLE_SAR) {

		# Build sar statistics if a cache file is not present
		if ($#binfiles == -1) {

			if (-f "$sadc_file") {
				print "DEBUG: looking for sadc binary data file $sadc_file\n" if ($DEBUG);
				foreach my $id (sort keys %SAR_GRAPH_INFOS) {
					&compute_sarstat_stats($sadc_file, %{$SAR_GRAPH_INFOS{$id}});
				}
			} elsif (-f "$sar_file") {
				print "DEBUG: looking for sar text data file $sar_file\n" if ($DEBUG);
				foreach my $id (sort keys %SAR_GRAPH_INFOS) {
					&compute_sarfile_stats($sar_file, %{$SAR_GRAPH_INFOS{$id}});
				}
			}

			if ($CACHE) {
				print "DEBUG: Generating sar statistics files cache into $in_dir.\n" if ($DEBUG);
				%global_infos = ('interval' => $INTERVAL, 'in_dir' => $in_dir, 'timezone' => $TIMEZONE, 'stats_timezone' => $STATS_TIMEZONE);
				push(@{$global_infos{DEVICE_LIST}}, @DEVICE_LIST);
				push(@{$global_infos{IFACE_LIST}}, @IFACE_LIST);
				&dump_sar_binary($in_dir);
			}

		} else {

			#Load statistics from cache files
			@DEVICE_LIST = ();
			@IFACE_LIST = ();
			print "DEBUG: Loading Sar statistics from cache files $in_dir/*.bin\n" if ($DEBUG);
			&load_sar_binary($in_dir);
		}

		if (!$CACHE) {
			# Open filehandle
			$FH = new IO::File ">$OUTPUT_DIR/system.html";
			if (not defined $FH) {
				die "FATAL: can't write to $OUTPUT_DIR/system.html, $!\n";
			}
			# Generate the html header for each sar devices statistics report
			&html_header($FH, $src_base);
			print $FH "<ul id=\"slides\">\n";
			for (my $i = 0; $i <= $#DEVICE_LIST; $i++) {
				&init_device_output($i, $src_base);
			}
			for (my $i = 0; $i <= $#IFACE_LIST; $i++) {
				# Open a filehandle for each network devices
				$DEVFH{$IFACE_LIST[$i]} = new IO::File ">$OUTPUT_DIR/network-device$i.html";
				if (not defined $DEVFH{$IFACE_LIST[$i]}) {
					die "FATAL: can't write to $OUTPUT_DIR/network-device$i.html, $!\n";
				}
				&html_header($DEVFH{$IFACE_LIST[$i]}, $src_base);
				$DEVFH{$IFACE_LIST[$i]}->print("<ul id=\"slides\">\n");
			}

			# Build sar statistics graphs
			print "DEBUG: Building sar statistics reports\n" if ($DEBUG);
			foreach my $id (sort keys %SAR_GRAPH_INFOS) {
				&compute_sar_graph($src_base, %{$SAR_GRAPH_INFOS{$id}});
			}

			# Write html footer in all reports
			print $FH "</ul>\n";
			&html_footer($FH);
			$FH->close;
		}
	}

	if (!$CACHE) {

		if ($OUTPUT_DIR) {

			# Terminate all database statistic file
			foreach my $dev (@IFACE_LIST) {
				$DEVFH{$dev}->print("</ul>\n");
				&html_footer($DEVFH{$dev}, $dev);
				$DEVFH{$dev}->close;
			}
			# Terminate all database statistic file
			foreach my $dev (@DEVICE_LIST) {
				$DEVFH{$dev}->print("</ul>\n");
				&html_footer($DEVFH{$dev}, $dev);
				$DEVFH{$dev}->close;
			}

			# Generate main index
			&generate_html_index($in_dir, $src_base);
			my $menu = &generate_html_menu($in_dir, $OUTPUT_DIR);
			print "DEBUG: Inserting menu into all html files.\n" if ($DEBUG);
			opendir(ODIR, "$OUTPUT_DIR") || die "FATAL: can't opendir $OUTPUT_DIR: $!";
			my @files = grep { /\.html$/ } readdir(ODIR);
			closedir(ODIR);
			foreach my $f (@files) {
				my $tmp_content = '';
				open(IN, "$OUTPUT_DIR/$f") or die "FATAL: can't read file $OUTPUT_DIR/$f, $!";
				while (my $l = <IN>) {
					chomp($l);
					$l =~ s/\r//;
					if ($l =~ /<div id="navigation"><\/div>/) {
						$l = qq{
<div id="navigation">
$menu
</div>
};
					}
					$tmp_content .= "$l\n";
				}
				close(IN);
				# override file
				open(OUT, ">$OUTPUT_DIR/$f") or die "FATAL: can't write to file $OUTPUT_DIR/$f, $!";
				print OUT $tmp_content;
				close(OUT);
			}
		}

	# In cache mode if the --clean	option is enable we need to remove data file
	} elsif ($CLEAN && $CACHE) {
		print "DEBUG: removing all csv and data files from $in_dir.\n" if ($DEBUG);
		opendir(DIR, "$in_dir") || die "FATAL: can't opendir $in_dir: $!";
		my @file_list = grep { !/^.*\.bin$/ && -f "$in_dir/$_"; } readdir(DIR);
		closedir(DIR);
		foreach my $f (@file_list) {
			warn "ERROR: can not remove file $in_dir/$f: $!\n" unless(unlink("$in_dir/$f"));
		}
	}
}

exit 0;

#----------------------------------------------------------------------------------

sub usage {
    print qq{
usage: $0 [options] [-i sar_file | -I sadc_file] [input_dir]

	input_dir: directory where pgcluu_collectd or pgstats and sar data
		   files are stored.

options:
  -b, --begin  datetime      start date/time for the data to be parsed.
  -C, --cache                generate cache files only (.bin), no html output.
  -d, --db-only dbname       only report for the whole cluster and the given
                             database name. You can use it multiple time or
                             give a comma separated list of database name.
  -D, --device-only dev      only report I/O stats for a particular device
                             You can use it multiple time or give a comma
                             separated list of device name, ex: sda,sdc.
  -e, --end    datetime      end date/time for the data to be parsed.
  -i, --sar-file=FILE        path to the sar text data file to read to generate
                             system reports. Default to input_dir/sar_stats.dat.
  -I, --sadc-file=FILE       sadc binary data file to read to generate system
                             reports. Default to input_dir/sadc_stats.dat.
  -n, --top-number           Top number of tables or indexes I/O stats to show.
                             Default is set to top 10. Set it to 0 to show all.
  -N, --network-only iface   only report stats for a particular network interface.
                             You can use it multiple times or give a comma separated
                             list of network interfaces, ex: eth0,eth1.
  -o, --output=DIR           output directory
  -r, --reverse-date         By default pgcluu look at mm/dd/yy format in sar file.
                             When enabled pgcluu will look at dd/mm/yy format.
  -s, --sadf=BIN             path to the sadf sysstat command used to read the
                             sadc binary data file. Default: $SADF_PROG.
  -S, --disable-sar          disable collect of system statistics with sar.
  -t, --with-table table     Only report for the whole tables and the given
                             table name. You can use it multiple time or
                             give a comma separated list of database name.
  -T, --no-table             Do not report statistics related to tables.
  -v, --verbose              Print out debug informations.
  -V, --version              Show pgcluu version and exit.
  -z, --timezone +/-XX       Set the number of hour(s) from GMT of the timezone.
                             Use this to adjust date/time from the sar output,
                             pgcluu use GMT time to draw charts.
  -Z, --stats-timezone +/-XX Set the number of hour(s) from GMT of the timezone.
                             Use this to adjust date/time from the cluster and
                             system stats output, pgcluu use GMT time.
  --from-sa-file             instruct pgcluu that file specified by the -i option
                             uses the standard system activity daily data file.
  --charset                  used to set the HTML charset to be used.
                             Default: utf-8.
  --help                     print usage

For example, you can generate all HTML reports from data files stored into
/tmp/stat_db1/ with the following commands:

        mkdir /tmp/report_db1/
        pgcluu -o /tmp/report_db1/ /tmp/stat_db1/

If you just want reports of some databases, use the following:

        pgcluu -o /tmp/report_db1/ /tmp/stat_db1/ --db-only "db1,db2,db3"

If you just want to create a report from a sar output file:

	sar -p -A 10 60 > /root/my_sar_file.txt
        pgcluu -o /tmp/report_sar/ -i /root/my_sar_file.txt

};
    exit 0;
}

sub set_sysstat_file
{
	my $input_dir = shift;

	$input_dir ||= $INPUT_DIR;

	my $sar_file = '';
	my $sadc_file = '';
	if (!$SADC_INPUT_FILE && !$SAR_INPUT_FILE) {
		if (-f "$input_dir/sadc_stats.dat") {
			$sadc_file = "$input_dir/" . 'sadc_stats.dat';
		} elsif (-f "$input_dir/sar_stats.dat") {
			$sar_file = "$input_dir/" . 'sar_stats.dat';
		} elsif (-f "$input_dir/sar_stats.dat.gz") {
			$sar_file = "$input_dir/" . 'sar_stats.dat.gz';
		}
		if (!$sadc_file && !$sar_file) {
			print STDERR "WARNING: No sar data file found. Consider using -S or --disable-sar command\nline option or use -i / -I option to set the path to the data file.\nContinuing normally without reporting sar statistics.\n";
			$DISABLE_SAR = 1;
			return;
		}
	} else {
		$sadc_file = $SADC_INPUT_FILE;
		$sar_file = $SAR_INPUT_FILE;
	}

	# Verify that the sar data file exists.
	if ($sadc_file && !-f "$sadc_file") {
		print STDERR "ERROR: sar binary data file $sadc_file can't be found.\n";
		exit 1;
	}
	if ($sar_file && !-f "$sar_file") {
		print STDERR "ERROR: sar text data file $sar_file can't be found.\n";
		exit 1;
	}

	return ($sar_file, $sadc_file);
}


sub init_html_file
{
	my $ofile = shift;
	my $src_base = shift;

	# Open a filehandle for each database
	my $fhdb = new IO::File ">$ofile";
	if (not defined $fhdb) {
		die "FATAL: can't write to $ofile, $!\n";
	}
	&html_header($fhdb, $src_base);
	$fhdb->print("<ul id=\"slides\">\n");
	$fhdb->close();
}

sub append_to_html_file
{
	my $ofile = shift;
	my $src_base = shift;

	# If file doesn't exist create it
	if (! -e $ofile) {
		&init_html_file($ofile, $src_base);
	}

	# Open a filehandle for each database
	my $fhdb = new IO::File ">>$ofile";
	if (not defined $fhdb) {
		die "FATAL: can't write to $ofile, $!\n";
	}
	return $fhdb;
}

sub end_html_file
{
	my $ofile = shift;

	my $fhdb = new IO::File ">>$ofile";
	if (not defined $fhdb) {
		die "FATAL: can't write to $ofile, $!\n";
	}
	$fhdb->print("</ul>\n");
	&html_footer($fhdb);
	$fhdb->close;
}


sub init_device_output
{
	my $i = shift;
	my $src_base = shift;

	# Open a filehandle for each database
	$DEVFH{$DEVICE_LIST[$i]} = new IO::File ">$OUTPUT_DIR/system-device$i.html";
	if (not defined $DEVFH{$DEVICE_LIST[$i]}) {
		die "FATAL: can't write to $OUTPUT_DIR/system-device$i.html, $!\n";
	}
	&html_header($DEVFH{$DEVICE_LIST[$i]}, $src_base);
	$DEVFH{$DEVICE_LIST[$i]}->print("<ul id=\"slides\">\n");
}

sub progress_bar
{
	my ( $got, $total, $width, $char ) = @_;
	$width ||= 25; $char ||= '=';
	my $num_width = length $total;
	sprintf("[%-${width}s] Parsed %${num_width}s bytes of %s (%0.2f%%)\r",
		$char x (($width-1)*$got/$total). '>',
		$got, $total, 100*$got/+$total);
}

sub is_compressed
{
	my $file = shift;

	return 1 if ($file =~ /\.gz/);

	return 0;
}

sub open_filehdl
{
	my $file = shift;

	my $curfh = new IO::File;
	if (!is_compressed("$file")) {
		$curfh->open("< $file") or die "FATAL: can't read file $file: $!\n";
	} else {
		$curfh->open("$ZCAT_PROG $file |") or die "FATAL: can't read pipe from command: $ZCAT_PROG $file, $!\n";
	}
	return $curfh;
}

sub detect_interval
{
	my $file = shift;

	my $dt = 0;
	my $prev_val = 0;

	if (!&is_compressed($file)) {
		if (!open(IN, "$file")) {
			die "FATAL: can't read file $file: $!\n";
		}
	} else {
		if (!open(IN, "$ZCAT_PROG $file |")) {
			die "FATAL: can't read pipe on command: $ZCAT_PROG $file, $!\n";
		}
	}
	while (<IN>) {
		my @data = split(/;/);
		next if ($data[0] !~ /^\d+/);
		$data[0] = &convert_time($data[0]);
		if (!$dt && $prev_val) {
			$dt = ($data[0] - $prev_val)/1000;
			last if ($dt > 0);
		}
		$prev_val = $data[0];
	}
	close(IN);

	if ( (length($dt) >= 2) && ($dt =~ /([1234])$/) ) {
		$dt -= $1;
	}

	return $dt || 1;
}

sub detect_timezone
{
	my $file = shift;

	my $tz = '00';

	if (!&is_compressed($file)) {
		if (!open(IN, "$file")) {
			die "FATAL: can't read file $file: $!\n";
		}
	} else {
		if (!open(IN, "$ZCAT_PROG $file |")) {
			die "FATAL: can't read pipe on command: $ZCAT_PROG $file, $!\n";
		}
	}
	my $i = 1;
	while (<IN>) {
		my @data = split(/;/);
		if ($data[0] =~ /^\d+-\d+-\d+ \d+:\d+:\d+([+\-]\d\d)/) {
			$tz = $1;
			last;
		}
		$i++;
		last if ($i > 10);
	}
	close(IN);

	return $tz;
}


sub get_data_id
{
	my ($str, %data_info) = @_;

	foreach my $i (sort {$a <=> $b} keys %data_info) {
		if ($data_info{$i}->{name} eq $str) {
			return $i;
		}
	}
	return -1;
}

sub get_device_list
{
	my ($sar_file, $sadc_file) = @_;

	my @dev_list = ();

	if ($sadc_file && -f "$sadc_file") {

		my $command = "$SADF_PROG -t -P ALL -D $sadc_file -- -d -p";
		print "DEBUG: looking for device list using command $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		while (my $l = <IN>) {
			chomp($l);
			$l =~ s/\r//;
			# hostname;interval;timestamp;DEV;tps;rd_sec/s;wr_sec/s;avgrq-sz;avgqu-sz;await;svctm;%util
			my @data = split(/;/, $l);
			next if ($data[2] !~ /^\d+/);
			if (!grep(m#^$data[3]$#, @dev_list)) {
				push(@dev_list, $data[3]);
			} else {
				last;
			}
		}
		close(IN);

	} elsif ($sar_file && -f "$sar_file") {

		# Load data from file
		if (!&is_compressed($sar_file)) {
			if (!open(IN, "$sar_file")) {
				die "FATAL: can't read input file $sar_file: $!\n";
			}
		} else {
			if (!open(IN, "$ZCAT_PROG $sar_file |")) {
				die "FATAL: can't read pipe from command: $ZCAT_PROG $sar_file, $!\n";
			}
		}
		my $type = '';
		my @headers = ();
		while (my $l = <IN>) {
			chomp($l);
			$l =~ s/\r//;
			# Skip kernel header part
			if ($l !~ /^\d+:\d+:\d+/) {
				next;
			}
			# Format timestamp when AM or PM is used
			$l =~ s/^(\d+:\d+:\d+)\s(AM|PM)/$1/;

			last if ($l =~ m#IFACE\s+#);
			if ($l =~ m#DEV\s+#) {
				if ($#headers == -1) {
					push(@headers, split(m#\s+#, $l));
					next;
				} else {
					last;
				}
			}
			# Empty line, maybe the end of a report
			if (($l eq '') && ($#headers >= 0)) {
				last;
			}
			# Get all values reported
			if ($#headers >= 0) {
				my @values = ();
				push(@values, split(m#\s+#, $l));
				last if ($#values != $#headers);
				if (!grep(m#^$values[1]$#, @dev_list)) {
					push(@dev_list, $values[1]);
				}
			}
		}
		close(IN);

	}

	return @dev_list;
}

sub get_interface_list
{
	my ($sar_file, $sadc_file) = @_;

	my @dev_list = ();

	if ($sadc_file && -f "$sadc_file") {

		my $command = "$SADF_PROG -t -P ALL -D $sadc_file -- -n DEV";
		print "DEBUG: looking for device list using command $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		while (my $l = <IN>) {
			chomp($l);
			$l =~ s/\r//;
			# hostname;interval;timestamp;IFACE;rxpck/s;txpck/s;rxkB/s;txkB/s;rxcmp/s;txcmp/s;rxmcst/s
			my @data = split(/;/, $l);
			next if ($data[2] !~ /^\d+/);
			if (!grep(m#^$data[3]$#, @dev_list)) {
				push(@dev_list, $data[3]);
			} else {
				last;
			}
		}
		close(IN);

	} elsif ($sar_file && -f "$sar_file") {

		# Load data from file
		if (!&is_compressed($sar_file)) {
			if (!open(IN, "$sar_file")) {
				die "FATAL: can't read input file $sar_file: $!\n";
			}
		} else {
			if (!open(IN, "$ZCAT_PROG $sar_file |")) {
				die "FATAL: can't read input file $sar_file: $!\n";
			}
		}
		my $type = '';
		my @headers = ();
		while (my $l = <IN>) {
			chomp($l);
			$l =~ s/\r//;
			# Skip kernel header part
			if ($l !~ /^\d+:\d+:\d+/) {
				next;
			}
			# Format timestamp when AM or PM is used
			$l =~ s/^(\d+:\d+:\d+)\s(AM|PM)/$1/;

			if ($l =~ m#IFACE\s+#) {
				if ($#headers == -1) {
					push(@headers, split(m#\s+#, $l));
					next;
				} else {
					last;
				}
			}
			# Empty line, maybe the end of a report
			if (($l eq '') && ($#headers >= 0)) {
				last;
			}
			# Get all values reported
			if ($#headers >= 0) {
				my @values = ();
				push(@values, split(m#\s+#, $l));
				last if ($#values != $#headers);
				if (!grep(m#^$values[1]$#, @dev_list)) {
					push(@dev_list, $values[1]);
				}
			}
		}
		close(IN);

	}

	return @dev_list;
}


sub write_database_info
{
	my $db = shift;
	my $src_base = shift;

	return if (($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));

	my $next = $#{$sysinfo{EXTENSION}{$db}} + 1;
	my $extlist = join(',', @{$sysinfo{EXTENSION}{$db}});
	$extlist = ' (' . $extlist . ')' if ($extlist);
	my $nsch = $#{$sysinfo{SCHEMA}{$db}} + 1;
	my $schlist = join(',', @{$sysinfo{SCHEMA}{$db}});
	$schlist = ' (' . $schlist . ')' if ($schlist);
	my $procount = $sysinfo{PROCEDURE}{$db} || 0;
	my $trigcount = $sysinfo{TRIGGER}{$db} || 0;
	my $last_vacuum = $OVERALL_STATS{'database'}{$db}{last_vacuum} || '-';
	my $last_analyze = $OVERALL_STATS{'database'}{$db}{last_analyze} || '-';
	my $last_autovacuum = $OVERALL_STATS{'database'}{$db}{last_autovacuum} || '-';
	my $last_autoanalyze = $OVERALL_STATS{'database'}{$db}{last_autoanalyze} || '-';
	my $last_reset = $OVERALL_STATS{'database'}{$db}{'stat_reset'} || '';

	my $objects_count = '';
	foreach my $k (sort keys %RELKIND) {
	        $objects_count .= qq{<li><span class="figure">$OVERALL_STATS{'class'}{$db}{$k}</span> <span class="figure-label">} . lcfirst($RELKIND{$k}) . qq{</span></li>} if (exists $OVERALL_STATS{'class'}{$db}{$k});
	}
	$OVERALL_STATS{database}{$db}{invalid_indexes} ||= 0;
	$OVERALL_STATS{database}{$db}{hash_indexes} ||= 0;
	my $dbsize = &pretty_print_size($OVERALL_STATS{'database'}{$db}{'size'});
	my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-$db.html", $src_base);
	$dbfh->print( qq{
<li class="slide" id="database-info-slide">

	<div id="database-info"><br/><br/><br/></div>

	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-desktop fa-2x pull-left fa-border"></i><h2>Database $db</h2>
              </div>
              <div class="panel-body">
		<div class="key-figures">
		<ul>
		<li></li>
	        <li><span class="figure">$dbsize</span> <span class="figure-label">Total size</span></li>
	        <li><span class="figure">$next</span> <span class="figure-label">Installed extensions$extlist</span></li>
	        <li><span class="figure">$OVERALL_STATS{database}{$db}{invalid_indexes}</span> <span class="figure-label">Invalid indexes</span></li>
	        <li><span class="figure">$OVERALL_STATS{database}{$db}{hash_indexes}</span> <span class="figure-label">Hash indexes</span></li>
	        <li><span class="figure">$nsch</span> <span class="figure-label">Schemas$schlist</span></li>
	        <li><span class="figure">$last_vacuum</span> <span class="figure-label">Last manual vacuum</span></li>
	        <li><span class="figure">$last_analyze</span> <span class="figure-label">Last manual analyze</span></li>
	        <li><span class="figure">$last_autovacuum</span> <span class="figure-label">Last auto vacuum</span></li>
	        <li><span class="figure">$last_autoanalyze</span> <span class="figure-label">Last auto analyze</span></li>
	        <li><span class="figure">$last_reset</span> <span class="figure-label">Last database stats reset</span></li>
	        <li><span class="figure">$procount</span> <span class="figure-label">Stored procedures</span></li>
	        <li><span class="figure">$trigcount</span> <span class="figure-label">Triggers</span></li>
		$objects_count
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
	</div>

</li>
}
	);

}

sub compute_postgresql_stat
{
	my ($in_dir, $file, $src_base, %data_info) = @_;

	print "DEBUG: reading statistics in file $in_dir/$file\n" if ($DEBUG);

	# Compute graphs following the data file
	my $fctname = $file;
	$fctname =~ s/\.csv(\.gz)?//;
	$fctname =~ s/\.gz//;
	$fctname =~ s/_all_/_user_/;
	$fctname =~ s/\./_/g;
	$fctname->($in_dir, $file, $INTERVAL);
}

sub compute_postgresql_report
{
	my ($file, $src_base, %data_info) = @_;

	# Compute graphs following the data file
	my $fctname = $file;
	$fctname =~ s/\.csv(\.gz)?//;
	$fctname =~ s/\.gz//;
	$fctname =~ s/_all_/_user_/;
	$fctname =~ s/\./_/g;

	print "DEBUG: creating reports from statistics $fctname.\n" if ($DEBUG);
	$fctname .= '_report';
	$fctname->($INTERVAL, $src_base, %data_info);
}


# Compute statistics of database statistics
sub pg_stat_database
{
	my ($in_dir, $file) = @_;

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | datid | datname | numbackends | xact_commit | xact_rollback | blks_read | blks_hit | tup_returned | tup_fetched | tup_inserted | tup_updated | tup_deleted | conflicts | stats_reset | temp_files | temp_bytes | deadlocks | blk_read_time | blk_write_time
		push(@global_databases, $data[2]) if (!grep(/^$data[2]$/, @global_databases));
		push(@{$start_vals{$data[2]}}, @data) if ($#{$start_vals{$data[2]}} < 0);


		if ($#data >= 8) {

			(($data[8] - $start_vals{$data[2]}[8]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[8] - $start_vals{$data[2]}[8]);
			$all_stat_database{$data[0]}{$data[2]}{returned} = $tmp_val;
			$all_stat_database{$data[0]}{all}{returned} += $tmp_val;

			(($data[9] - $start_vals{$data[2]}[9]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[9] - $start_vals{$data[2]}[9]);
			$all_stat_database{$data[0]}{$data[2]}{fetched} = $tmp_val;
			$all_stat_database{$data[0]}{all}{fetched} += $tmp_val;

			# Gather insert statement
			(($data[10] - $start_vals{$data[2]}[10]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[10] - $start_vals{$data[2]}[10]);
			$all_stat_database{$data[0]}{$data[2]}{insert} = $tmp_val;
			$all_stat_database{$data[0]}{all}{insert} += $tmp_val;

			# Gather update statement
			(($data[11] - $start_vals{$data[2]}[11]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[11] - $start_vals{$data[2]}[11]);
			$all_stat_database{$data[0]}{$data[2]}{update} = $tmp_val;
			$all_stat_database{$data[0]}{all}{update} += $tmp_val;

			# Gather delete statement
			(($data[12] - $start_vals{$data[2]}[12]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[12] - $start_vals{$data[2]}[12]);
			$all_stat_database{$data[0]}{$data[2]}{delete} = $tmp_val;
			$all_stat_database{$data[0]}{all}{delete} += $tmp_val;

		}

		# Gather blks_read
		(($data[6] - $start_vals{$data[2]}[6]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[6] - $start_vals{$data[2]}[6]);
		$all_stat_database{$data[0]}{$data[2]}{blks_read} = $tmp_val;
		$all_stat_database{$data[0]}{all}{blks_read} += $tmp_val;

		# Gather blks_hit
		(($data[7] - $start_vals{$data[2]}[7]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[7] - $start_vals{$data[2]}[7]);
		$all_stat_database{$data[0]}{$data[2]}{blks_hit} = $tmp_val;
		$all_stat_database{$data[0]}{all}{blks_hit} += $tmp_val;

		# Gather number of running backend
		if ($data[3]) {
			$all_stat_database{$data[0]}{$data[2]}{nbackend} = $data[3];
			$all_stat_database{$data[0]}{all}{nbackend} += $data[3];
		}

		# Gather number of committed transaction
		(($data[4] - $start_vals{$data[2]}[4]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[4] - $start_vals{$data[2]}[4]);
		$all_stat_database{$data[0]}{$data[2]}{xact_commit} = $tmp_val;
		$all_stat_database{$data[0]}{all}{xact_commit} += $tmp_val;

		# Gather number of rollbacked transaction
		(($data[5] - $start_vals{$data[2]}[5]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[5] - $start_vals{$data[2]}[5]);
		$all_stat_database{$data[0]}{$data[2]}{xact_rollback} = $tmp_val;
		$all_stat_database{$data[0]}{all}{xact_rollback} += $tmp_val;

		# Gather number of canceled queries and stat reset
		if ($#data >= 13) {
			(($data[13] - $start_vals{$data[2]}[13]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[13] - $start_vals{$data[2]}[13]);
			$all_stat_database{$data[0]}{$data[2]}{canceled_queries} = $tmp_val;
			$all_stat_database{$data[0]}{all}{canceled_queries} += $tmp_val;
			$OVERALL_STATS{'database'}{$data[2]}{'stat_reset'} = $data[14] if (!exists $OVERALL_STATS{'database'}{$data[2]}{'stat_reset'} || ($OVERALL_STATS{'database'}{$data[2]}{'stat_reset'} lt $data[14]));
		}

		# Gather number of temporary data and deadlock
		if ($#data > 15) {
			(($data[15] - $start_vals{$data[2]}[15]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[15] - $start_vals{$data[2]}[15]);
			$all_stat_database{$data[0]}{$data[2]}{temp_files} = $tmp_val;
			$all_stat_database{$data[0]}{all}{temp_files} += $tmp_val;

			(($data[16] - $start_vals{$data[2]}[16]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[16] - $start_vals{$data[2]}[16]);
			$all_stat_database{$data[0]}{$data[2]}{temp_bytes} = $tmp_val;
			$all_stat_database{$data[0]}{all}{temp_bytes} += $tmp_val;

			(($data[17] - $start_vals{$data[2]}[17]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[17] - $start_vals{$data[2]}[17]);
			$all_stat_database{$data[0]}{$data[2]}{deadlocks} = $tmp_val;
			$all_stat_database{$data[0]}{all}{deadlocks} += $tmp_val;
		}

		@{$start_vals{$data[2]}} = ();
		push(@{$start_vals{$data[2]}}, @data);
	}
	$curfh->close();
	push(@global_databases, 'all') if (($#global_databases >= 0) && !grep(/^all$/, @global_databases));

}

# Compute graphs of database statistics
sub pg_stat_database_report
{
	my ($interval, $src_base, %data_info) = @_;


	my %database_stat = ();
	my %total_query_type = ();
	my %has_conn = ();
	my $has_tuples = 0;
	my $has_temp = 0;
	my $has_conflict = 0;
	foreach my $t (sort {$a <=> $b} keys %all_stat_database) {
		foreach my $db (@global_databases) {
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
			foreach my $k (qw(insert returned fetched update delete blks_read blks_hit nbackend xact_commit xact_rollback canceled_queries deadlocks temp_files temp_bytes)) {
				next if ($db eq 'all');
				$all_stat_database{$t}{$db}{$k} ||= 0;
				$OVERALL_STATS{'cluster'}{$k} += $all_stat_database{$t}{$db}{$k};
				$OVERALL_STATS{'database'}{$db}{$k} += $all_stat_database{$t}{$db}{$k};

			}

			$OVERALL_STATS{'start_date'} = $t if (!$OVERALL_STATS{'start_date'} || ($OVERALL_STATS{'start_date'} gt $t));
			$OVERALL_STATS{'end_date'} = $t if (!$OVERALL_STATS{'end_date'} || ($OVERALL_STATS{'end_date'} lt $t));
			# It depends on the postgresql version
			if (!$has_tuples) {
				foreach my $k (keys %{$all_stat_database{$t}{$db}}) {
					if (grep(/^$k$/, 'insert','returned','fetched','update','delete')) {
						$has_tuples = 1;
						last;
					}
				}
			}
			if ($has_tuples) {
				$database_stat{$db}{insert} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{insert}/$interval)) . '],';
				$database_stat{$db}{returned} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{returned}/$interval)) . '],';
				$database_stat{$db}{fetched} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{fetched}/$interval)) . '],';
				$database_stat{$db}{update} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{update}/$interval)) . '],';
				$database_stat{$db}{delete} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{delete}/$interval)) . '],';
				$total_query_type{$db}{'all'} +=  $all_stat_database{$t}{$db}{insert} + $all_stat_database{$t}{$db}{returned} + $all_stat_database{$t}{$db}{update} + $all_stat_database{$t}{$db}{delete};

				$total_query_type{$db}{'insert'} += $all_stat_database{$t}{$db}{insert};
				$total_query_type{$db}{'delete'} += $all_stat_database{$t}{$db}{delete};
				$total_query_type{$db}{'update'} += $all_stat_database{$t}{$db}{update};
				$total_query_type{$db}{'select'} += $all_stat_database{$t}{$db}{returned};
			}
			$all_stat_database{$t}{$db}{blks_read} ||= 0;
			$all_stat_database{$t}{$db}{blks_hit} ||= 0;
			$database_stat{$db}{blks_read} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{blks_read}/$interval)) . '],';
			$database_stat{$db}{blks_hit} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{blks_hit}/$interval)) . '],';

			if (($all_stat_database{$t}{$db}{blks_read} + $all_stat_database{$t}{$db}{blks_hit}) > 0) {
				$database_stat{$db}{ratio_hit_miss} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{blks_hit}*100)/($all_stat_database{$t}{$db}{blks_read} + $all_stat_database{$t}{$db}{blks_hit})) . '],';
			} else {
				$database_stat{$db}{ratio_hit_miss} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',0],';
			}
			$database_stat{$db}{nbackend} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_database{$t}{$db}{nbackend}||0) . '],';
			$has_conn{$db} = 1 if ($all_stat_database{$t}{$db}{nbackend});
			$database_stat{$db}{xact_commit} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{xact_commit}||0)/$interval) . '],';
			$database_stat{$db}{xact_rollback} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{xact_rollback}||0)/$interval) . '],';
			# It depends on the postgresql version
			if (!$has_conflict) {
				foreach my $k (keys %{$all_stat_database{$t}{$db}}) {
					if ($k eq 'canceled_queries') {
						$has_conflict = 1;
						last;
					}
				}
			}
			if ($has_conflict) {
				$database_stat{$db}{canceled_queries} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_database{$t}{$db}{canceled_queries}||0) . '],';
			}
			# It depends on the postgresql version
			if (!$has_temp) {
				foreach my $k (keys %{$all_stat_database{$t}{$db}}) {
					if (grep(/^$k$/, 'deadlocks','temp_files','temp_bytes')) {
						$has_temp = 1;
						last;
					}
				}
			}
			if ($has_temp) {
				$database_stat{$db}{deadlocks} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_database{$t}{$db}{deadlocks}||0) . '],';
				$database_stat{$db}{temp_files} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_database{$t}{$db}{temp_files}||0) . '],';
				$database_stat{$db}{temp_bytes} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_database{$t}{$db}{temp_bytes}||0)/$interval) . '],';
			}
		}
	}
	%all_stat_database = ();

	foreach my $id (sort {$a <=> $b} keys %data_info) {
		foreach my $db (sort keys %database_stat) {
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));

			my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-$db.html", $src_base);
			my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
			if ($data_info{$id}{name} eq 'database-write_ratio') {

				if ($has_tuples) {
					$database_stat{$db}{insert} =~ s/,$//;
					$database_stat{$db}{update} =~ s/,$//;
					$database_stat{$db}{delete} =~ s/,$//;
				}
				if ($db ne 'all') {
					$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-write_ratio', \%{$data_info{$id}}, $db, $database_stat{$db}{insert}, $database_stat{$db}{update}, $database_stat{$db}{delete}) );
				} else {
					print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-write_ratio', \%{$data_info{$id}}, $db, $database_stat{$db}{insert}, $database_stat{$db}{update}, $database_stat{$db}{delete});
				}

			} elsif ($data_info{$id}{name} eq 'database-read_ratio') {

				if ($has_tuples) {
					$database_stat{$db}{returned} =~ s/,$//;
					$database_stat{$db}{fetched} =~ s/,$//;
				}
				if ($db ne 'all') {
					$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-read_ratio', \%{$data_info{$id}}, $db, $database_stat{$db}{returned}, $database_stat{$db}{fetched}) );
				} else {
					print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-read_ratio', \%{$data_info{$id}}, $db, $database_stat{$db}{returned}, $database_stat{$db}{fetched});
				}

			} elsif ($data_info{$id}{name} eq 'database-read_write_query') {

				if (exists $total_query_type{$db}{'all'} && ($total_query_type{$db}{'all'} > 0)) {
					my %data = ();
					foreach my $t (keys %{$total_query_type{$db}}) {
						next if ($t eq 'all');
						$data{$t} = sprintf("%0.2f", $total_query_type{$db}{$t}*100/$total_query_type{$db}{'all'});
					}
					if ($db ne 'all') {
						$dbfh->print( &jqplot_piegraph($IDX++, 'database-read_write_query', \%{$data_info{$id}}, $db, %data) );
					} else {
						print $fhcluster &jqplot_piegraph($IDX++, 'cluster-read_write_query', \%{$data_info{$id}}, $db, %data);
					}
				}

			} elsif ($data_info{$id}{name} eq 'database-cache_ratio') {

				$database_stat{$db}{blks_read} =~ s/,$//;
				$database_stat{$db}{blks_hit} =~ s/,$//;
				if ($db ne 'all') {
					$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-cache_ratio', \%{$data_info{$id}}, $db, $database_stat{$db}{blks_hit}, $database_stat{$db}{blks_read}, $database_stat{$db}{ratio_hit_miss}) );
				} else {
					print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-cache_ratio', \%{$data_info{$id}}, $db, $database_stat{$db}{blks_hit}, $database_stat{$db}{blks_read}, $database_stat{$db}{ratio_hit_miss});
				}
				delete $database_stat{$db}{blks_hit};
				delete $database_stat{$db}{blks_read};
				delete $database_stat{$db}{ratio_hit_miss};

			} elsif ($data_info{$id}{name} eq 'database-commits_rollbacks') {

				$database_stat{$db}{xact_commit} =~ s/,$//;
				$database_stat{$db}{xact_rollback} =~ s/,$//;
				$database_stat{$db}{nbackend} =~ s/,$//;
				if ($db ne 'all') {
					$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-commits_rollbacks', \%{$data_info{$id}}, $db, $database_stat{$db}{xact_commit}, $database_stat{$db}{xact_rollback}, $database_stat{$db}{nbackend}) );
				} else {
					print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-commits_rollbacks', \%{$data_info{$id}}, $db, $database_stat{$db}{xact_commit}, $database_stat{$db}{xact_rollback}, $database_stat{$db}{nbackend});
				}
				delete $database_stat{$db}{xact_commit};
				delete $database_stat{$db}{xact_rollback};
			}
			$dbfh->close();
			$fhcluster->close();
		}
	}
	
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		my %data = ();
		my $found = 0;
		foreach my $db (sort keys %database_stat) {
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));

			my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-$db.html", $src_base);
			if ($data_info{$id}{name} eq 'database-backends') {
				$database_stat{$db}{nbackend} =~ s/,$//;
				$data{$db} = $database_stat{$db}{nbackend};
				if (($db ne 'all') && exists $has_conn{$db}) {
					$dbfh->print( &jqplot_linegraph_array($IDX++, $data_info{$id}{name}, \%{$data_info{$id}}, $db, $database_stat{$db}{nbackend}) );
				}
				delete $database_stat{$db}{nbackend};
				$found++;

			} elsif ($has_conflict && ($data_info{$id}{name} eq 'database-canceled_queries')) {

				$database_stat{$db}{canceled_queries} =~ s/,$//;
				$data{$db} = $database_stat{$db}{canceled_queries};
				if ($db ne 'all') {
					$dbfh->print( &jqplot_linegraph_array($IDX++, $data_info{$id}{name}, \%{$data_info{$id}}, $db, $database_stat{$db}{canceled_queries}) );
				}
				delete $database_stat{$db}{canceled_queries};
				$found++;

			} elsif ($has_temp && ($data_info{$id}{name} eq 'database-deadlocks')) {
				$database_stat{$db}{deadlocks} =~ s/,$//;
				$data{$db} = $database_stat{$db}{deadlocks};
				if ($db ne 'all') {
					$dbfh->print( &jqplot_linegraph_array($IDX++, $data_info{$id}{name}, \%{$data_info{$id}}, $db, $database_stat{$db}{deadlocks}) );
				}
				delete $database_stat{$db}{deadlocks};
				$found++;

			} elsif ($has_temp && ($data_info{$id}{name} eq 'database-temporary_files')) {

				$database_stat{$db}{temp_files} =~ s/,$//;
				$data{$db} = $database_stat{$db}{temp_files};
				if ($db ne 'all') {
					$dbfh->print( &jqplot_linegraph_array($IDX++, $data_info{$id}{name}, \%{$data_info{$id}}, $db, $database_stat{$db}{temp_files}) );
				}
				delete $database_stat{$db}{temp_files};
				$found++;

			} elsif ($has_temp && ($data_info{$id}{name} eq 'database-temporary_bytes')) {

				$database_stat{$db}{temp_bytes} =~ s/,$//;
				$data{$db} = $database_stat{$db}{temp_bytes};
				if ($db ne 'all') {
					$dbfh->print( &jqplot_linegraph_array($IDX++, $data_info{$id}{name}, \%{$data_info{$id}}, $db, $database_stat{$db}{temp_bytes}) );
				}
				delete $database_stat{$db}{temp_bytes};
				$found++;

			}
			$dbfh->close();
		}
		if ($found) {
			my $name = $data_info{$id}{name};
			$name =~ s/^database/cluster/;
			my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
			if ($has_temp && ($data_info{$id}{name} eq 'database-temporary_files')) {
				print $fhcluster &jqplot_linegraph_hash($IDX++, $name, \%{$data_info{$id}}, 'all', %data);
			}
			if ($has_temp && ($data_info{$id}{name} eq 'database-temporary_bytes')) {
				print $fhcluster &jqplot_linegraph_hash($IDX++, $name, \%{$data_info{$id}}, 'all', %data);
			}
			if ($data_info{$id}{name} eq 'database-backends') {
				print $fhcluster &jqplot_linegraph_hash($IDX++, $name, \%{$data_info{$id}}, 'all', %data);
			}
			if ($has_temp && ($data_info{$id}{name} eq 'database-deadlocks')) {
				print $fhcluster &jqplot_linegraph_hash($IDX++, $name, \%{$data_info{$id}}, 'all', %data);
			}
			if ($has_conflict && ($data_info{$id}{name} eq 'database-canceled_queries')) {
				print $fhcluster &jqplot_linegraph_hash($IDX++, $name, \%{$data_info{$id}}, 'all', %data);
			}
			$fhcluster->close();
		}
	}
}

# Compute statistics of database conflict statistics
sub pg_stat_database_conflicts
{
	my ($in_dir, $file) = @_;

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));
		# timestamp | datid | datname | confl_tablespace | confl_lock | confl_snapshot | confl_bufferpin | confl_deadlock

		# Get database size statistics
		push(@{$start_vals{$data[2]}}, @data) if ($#{$start_vals{$data[2]}} < 0);

		(($data[3] - $start_vals{$data[2]}[3]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[3] - $start_vals{$data[2]}[3]);
		$all_stat_database_conflicts{$data[2]}{tablespace} += $tmp_val;
		$all_stat_database_conflicts{'all'}{tablespace} += $tmp_val;

		(($data[4] - $start_vals{$data[2]}[4]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[4] - $start_vals{$data[2]}[4]);
		$all_stat_database_conflicts{$data[2]}{lock} += $tmp_val;
		$all_stat_database_conflicts{'all'}{lock} += $tmp_val;

		(($data[5] - $start_vals{$data[2]}[5]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[5] - $start_vals{$data[2]}[5]);
		$all_stat_database_conflicts{$data[2]}{snapshot} += $tmp_val;
		$all_stat_database_conflicts{'all'}{snapshot} += $tmp_val;

		(($data[6] - $start_vals{$data[2]}[6]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[6] - $start_vals{$data[2]}[6]);
		$all_stat_database_conflicts{$data[2]}{bufferpin} += $tmp_val;
		$all_stat_database_conflicts{'all'}{bufferpin} += $tmp_val;

		(($data[7] - $start_vals{$data[2]}[7]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[7] - $start_vals{$data[2]}[7]);
		$all_stat_database_conflicts{$data[2]}{deadlock} += $tmp_val;
		$all_stat_database_conflicts{'all'}{deadlock} += $tmp_val;

		@{$start_vals{$data[2]}} = ();
		push(@{$start_vals{$data[2]}}, @data);

	}
	$curfh->close();
}

# Compute graphs of database conflict statistics
sub pg_stat_database_conflicts_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %database_stat = ();
	my %total_count = ();
	my $id = &get_data_id('database-conflicts', %data_info);
	foreach my $db (sort keys %all_stat_database_conflicts) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		my $total = 0;
		foreach my $k (sort keys %{$all_stat_database_conflicts{$db}}) {
			$total += $all_stat_database_conflicts{$db}{$k};
		}
		next if (!$total);
		my %conflict_type = ();
		if ($conflict_type{tablespace} || $conflict_type{lock} || $conflict_type{snapshot} || $conflict_type{bufferpin} || $conflict_type{deadlock}) {
			$conflict_type{tablespace} = sprintf("%0.2f", ($all_stat_database_conflicts{$db}{'tablespace'}*100)/$total);
			$conflict_type{lock} = sprintf("%0.2f", ($all_stat_database_conflicts{$db}{'lock'}*100)/$total);
			$conflict_type{snapshot} = sprintf("%0.2f", ($all_stat_database_conflicts{$db}{'snapshot'}*100)/$total);
			$conflict_type{bufferpin} =  sprintf("%0.2f", ($all_stat_database_conflicts{$db}{'bufferpin'}*100)/$total);
			$conflict_type{deadlock} =  sprintf("%0.2f", ($all_stat_database_conflicts{$db}{'deadlock'}*100)/$total);
		}
		my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-$db.html", $src_base);
		if ($db ne 'all') {
			$dbfh->print( &jqplot_piegraph($IDX++, 'database-conflicts', \%{$data_info{$id}}, $db, %conflict_type) );
		} else {
			my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
			print $fhcluster &jqplot_piegraph($IDX++, 'cluster-conflicts', \%{$data_info{$id}}, $db, %conflict_type);
			$fhcluster->close();
		}
		$dbfh->close();
	}
	%all_stat_database_conflicts = ();
}

# Compute statistics of database size statistics
sub pg_database_size
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));
		push(@global_databases, $data[2]) if (!grep(/^$data[2]$/, @global_databases));
		# Get database size statistics
		$all_database_size{$data[0]}{$data[2]} = $data[3];
		$all_database_size{$data[0]}{'all'} += $data[3];
		push(@global_databases, $data[2]) if (!grep(/^$data[2]$/, @global_databases));
	}
	$curfh->close();
	push(@global_databases, 'all') if (($#global_databases >= 0) && !grep(/^all$/, @global_databases));
}

# Compute graphs of database size statistics
sub pg_database_size_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %database_stat = ();
	my $total_val = 0;
	foreach my $t (sort {$a <=> $b} keys %all_database_size) {
		foreach my $db (@global_databases) {
			$database_stat{$db}{size} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_database_size{$t}{$db} || 0) . '],';
			next if ($db eq 'all');
			$OVERALL_STATS{'database'}{$db}{'size'} = $all_database_size{$t}{$db};
			$OVERALL_STATS{'start_date'} = $t if (!$OVERALL_STATS{'start_date'} || ($OVERALL_STATS{'start_date'} gt $t));
			$OVERALL_STATS{'end_date'} = $t if (!$OVERALL_STATS{'end_date'} || ($OVERALL_STATS{'end_date'} lt $t));
		}
	}
	%all_database_size = ();

	my $id = &get_data_id('database-size', %data_info);
	my %data = ();
	foreach my $db (sort keys %database_stat) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		$database_stat{$db}{size} =~ s/,$//;
		$data{$db} = $database_stat{$db}{size};
		my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-$db.html", $src_base);
		if ($db ne 'all') {
			$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-size', \%{$data_info{$id}}, $db, $database_stat{$db}{size}) );
		}
		$dbfh->close();
		delete $database_stat{$db}{size};
	}

	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	if (!$CAPTURE) {
		print $fhcluster &jqplot_linegraph_hash($IDX++, 'cluster-size', \%{$data_info{$id}}, 'all', %data);
	} else {
		$data_info{$id}{title} =~ s/\%s/all/;
		print $fhcluster qq{
<li class="slide" id="cluster-size-slide">
      <div id="cluster-size"><br/><br/><br/><br/></div>
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{title}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="$data_info{$id}{name}-report">
			<div class="span11">
				<table class="table table-striped" id="$data_info{$id}{name}-table">
					<tbody>
					<tr><th>Database Name</th><th>Size</th></tr>
};
		foreach my $db (sort keys %{$OVERALL_STATS{'database'}}) {
                        next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep(/^$db$/, @INCLUDE_DB)));
			my $dbsize = &pretty_print_size($OVERALL_STATS{'database'}{$db}{size});
			print $fhcluster "<tr><td>$db</td><td>$dbsize</td></tr>\n";
		}
		print $fhcluster qq{
					</tbody>
				</table>
			</div>
		</div>
		</div>
	    </div>
	    </div>
	</div>
    </li>
};
	}
	$fhcluster->close();

}

# Compute statistics of tablespace size
sub pg_tablespace_size
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	my $total_val = 0;
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | tbspname | size | path

		push(@global_tbspnames, $data[1]) if (!grep(/^$data[1]$/, @global_tbspnames));

		# Get tablespace size statistics
		$all_tablespace_size{$data[0]}{$data[1]}{size} = $data[2];
		$all_tablespace_size{$data[0]}{$data[1]}{location} = $data[3];
		$all_tablespace_size{$data[0]}{'all'}{size} += $data[2];
	}
	$curfh->close();
	push(@global_tbspnames, 'all') if ($#global_tbspnames > 0);

}

# Compute graphs of tablespace size
sub pg_tablespace_size_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $id = &get_data_id('tablespace-size', %data_info);
	my %data = ();
	my $print_after = '';
	if (!$CAPTURE) {
		my %tablespace_stat = ();
		foreach my $t (sort {$a <=> $b} keys %all_tablespace_size) {
			foreach my $tbsp (@global_tbspnames) {
				$tablespace_stat{$tbsp}{size} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_tablespace_size{$t}{$tbsp}{size}||0) . '],';
				if ($tbsp ne 'all') {
					$OVERALL_STATS{'tablespace'}{$tbsp}{'size'} = $all_tablespace_size{$t}{$tbsp}{size};
					$OVERALL_STATS{'tablespace'}{$tbsp}{'location'} = $all_tablespace_size{$t}{$tbsp}{location};
				}
			}
		}
		foreach my $tbsp (sort keys %tablespace_stat) {
			$tablespace_stat{$tbsp}{size} =~ s/,$//;
			$data{$tbsp} = $tablespace_stat{$tbsp}{size};
			if ($tbsp ne 'all') {
				my $location = "$tbsp";
				$location .= " ($OVERALL_STATS{'tablespace'}{$tbsp}{location})" if ($OVERALL_STATS{'tablespace'}{$tbsp}{location});
				$print_after .= &jqplot_linegraph_array($IDX++, 'tablespace-size+', \%{$data_info{$id}}, $location, $tablespace_stat{$tbsp}{size});
			}
		}
	}
	%all_tablespace_size = ();

	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	if (!$CAPTURE) {
		print $fhcluster &jqplot_linegraph_hash($IDX++, 'tablespace-cluster-size', \%{$data_info{$id}}, 'all', %data);
		print $fhcluster  $print_after;
	} else {
		my $header = '<tr><th>Tablespace Name</th><th>Location</th><th>Size</th></tr>';
		if (scalar keys %{$OVERALL_STATS{'tablespace'}} == 0) {
			$header = qq{<td><div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div></td>};
		}
		$data_info{$id}{title} =~ s/\%s/all/;
		print $fhcluster qq{
<li class="slide" id="tablespace-cluster-size-slide">
      <div id="tablespace-cluster-size"><br/><br/><br/><br/></div>
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{title}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="$data_info{$id}{name}-report">
			<div class="span11">
				<table class="table table-striped" id="$data_info{$id}{name}-table">
					<tbody>
					$header
};
		foreach my $tbsp (sort keys %{$OVERALL_STATS{'tablespace'}}) {
			my $tbsize = &pretty_print_size($OVERALL_STATS{'tablespace'}{$tbsp}{size});
			print $fhcluster "<tr><td>$tbsp</td><td>$OVERALL_STATS{'tablespace'}{$tbsp}{location}</td><td>$tbsize</td></tr>\n";
		}
		print $fhcluster qq{
					</tbody>
				</table>
			</div>
		</div>
		</div>
	    </div>
	</div>
    </div>
};
	}
	print $fhcluster "</li>\n";
	$fhcluster->close();
}

# Compute statistics about table accesses and vacuum
sub pg_stat_user_tables
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | dbname | relid | schemaname | relname | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | last_vacuum | last_autovacuum | last_analyze | last_autoanalyze | vacuum_count | autovacuum_count | analyze_count | autoanalyze_count

		$OVERALL_STATS{'database'}{$data[1]}{last_vacuum} = $data[15] if (!$OVERALL_STATS{'database'}{$data[1]}{last_vacuum} || ($data[15] gt $OVERALL_STATS{'database'}{$data[1]}{last_vacuum}));
		$OVERALL_STATS{'database'}{$data[1]}{last_autovacuum} = $data[16] if (!$OVERALL_STATS{'database'}{$data[1]}{last_autovacuum} || ($data[16] gt $OVERALL_STATS{'database'}{$data[1]}{last_autovacuum}));
		$OVERALL_STATS{'database'}{$data[1]}{last_analyze} = $data[17] if (!$OVERALL_STATS{'database'}{$data[1]}{last_analyze} || ($data[17] gt $OVERALL_STATS{'database'}{$data[1]}{last_analyze}));
		$OVERALL_STATS{'database'}{$data[1]}{last_autoanalyze} = $data[18] if (!$OVERALL_STATS{'database'}{$data[1]}{last_autoanalyze} || ($data[18] gt $OVERALL_STATS{'database'}{$data[1]}{last_autoanalyze}));

		$data[4] = "$data[3].$data[4]";
		push(@{$start_vals{$data[1]}{$data[4]}}, @data) if ($#{$start_vals{$data[1]}{$data[4]}} < 0);

		# Stores last manual vacuum/analyze
		$all_stat_user_tables{$data[1]}{$data[4]}{last_vacuum} = $data[15] if ($data[15]);
		$all_stat_user_tables{$data[1]}{$data[4]}{last_autovacuum} = $data[16] if ($data[16]);
		$all_stat_user_tables{$data[1]}{$data[4]}{last_analyze} = $data[17] if ($data[17]);
		$all_stat_user_tables{$data[1]}{$data[4]}{last_autoanalyze} = $data[18] if ($data[18]);

		# Get database statistics
		(($data[5] - $start_vals{$data[1]}{$data[4]}[5]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[5] - $start_vals{$data[1]}{$data[4]}[5]);
		$all_vacuum_stat{$data[1]}{$data[4]}{seq_scan} += $tmp_val;
		$all_stat_user_tables{$data[1]}{$data[4]}{seq_scan} = $data[5] || 0;
		(($data[7] - $start_vals{$data[1]}{$data[4]}[7]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[7] - $start_vals{$data[1]}{$data[4]}[7]);
		$all_vacuum_stat{$data[1]}{$data[4]}{idx_scan} += $tmp_val;
		$all_stat_user_tables{$data[1]}{$data[4]}{idx_scan} = $data[6] || 0;
		(($data[9] - $start_vals{$data[1]}{$data[4]}[9]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[9] - $start_vals{$data[1]}{$data[4]}[9]);
		$all_vacuum_stat{$data[1]}{$data[4]}{n_tup_ins} += $tmp_val;
		$all_stat_user_tables{$data[1]}{$data[4]}{n_tup_ins} = $data[9] || 0;
		(($data[10] - $start_vals{$data[1]}{$data[4]}[10]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[10] - $start_vals{$data[1]}{$data[4]}[10]);
		$all_vacuum_stat{$data[1]}{$data[4]}{n_tup_upd} += $tmp_val;
		$all_stat_user_tables{$data[1]}{$data[4]}{n_tup_upd} = $data[10] || 0;
		(($data[11] - $start_vals{$data[1]}{$data[4]}[11]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[11] - $start_vals{$data[1]}{$data[4]}[11]);
		$all_vacuum_stat{$data[1]}{$data[4]}{n_tup_del} += $tmp_val;
		$all_stat_user_tables{$data[1]}{$data[4]}{n_tup_del} = $data[11] || 0;
		(($data[12] - $start_vals{$data[1]}{$data[4]}[12]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[12] - $start_vals{$data[1]}{$data[4]}[12]);
		$all_vacuum_stat{$data[1]}{$data[4]}{n_tup_hot_upd} += $tmp_val;
		$all_stat_user_tables{$data[1]}{$data[4]}{n_tup_hot_upd} = $data[12] || 0;
		$all_stat_user_tables{$data[1]}{$data[4]}{n_dead_tup} = $data[14];
		$all_stat_user_tables{$data[1]}{$data[4]}{n_live_tup} = $data[13];
		$all_stat_user_tables{$data[1]}{$data[4]}{dead_vs_live} = sprintf("%.2f", ($data[14]*100)/(($data[13]+$data[14])||1));
		if ($#data > 19) {
			(($data[19] - $start_vals{$data[1]}{$data[4]}[19]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[19] - $start_vals{$data[1]}{$data[4]}[19]);
			$all_vacuum_stat{$data[1]}{$data[4]}{vacuum_count} += $tmp_val;
			$all_stat_user_tables{$data[1]}{$data[4]}{vacuum_count} = $data[19];
			(($data[20] - $start_vals{$data[1]}{$data[4]}[20]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[20] - $start_vals{$data[1]}{$data[4]}[20]);
			$all_vacuum_stat{$data[1]}{$data[4]}{autovacuum_count} += $tmp_val;
			$all_stat_user_tables{$data[1]}{$data[4]}{autovacuum_count} = $data[20];
			(($data[21] - $start_vals{$data[1]}{$data[4]}[21]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[21] - $start_vals{$data[1]}{$data[4]}[21]);
			$all_vacuum_stat{$data[1]}{$data[4]}{analyze_count} += $tmp_val;
			$all_stat_user_tables{$data[1]}{$data[4]}{analyze_count} = $data[21];
			(($data[22] - $start_vals{$data[1]}{$data[4]}[22]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[22] - $start_vals{$data[1]}{$data[4]}[22]);
			$all_vacuum_stat{$data[1]}{$data[4]}{autoanalyze_count} += $tmp_val;
			$all_stat_user_tables{$data[1]}{$data[4]}{autoanalyze_count} = $data[22];
		}
		@{$start_vals{$data[1]}{$data[4]}} = ();
		push(@{$start_vals{$data[1]}{$data[4]}}, @data);
	}
	$curfh->close();
}

# Compute report about table accesses
sub pg_stat_user_tables_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	my $do_vacuum = 0;
	foreach my $db (keys %all_vacuum_stat) {
		foreach my $t (keys %{$all_vacuum_stat{$db}}) {
			foreach my $k (keys %{$all_vacuum_stat{$db}{$t}}) {
				if (($k =~ /vacuum|analyze/) && $all_vacuum_stat{$db}{$t}{$k}) {
					$do_vacuum = 1;
				}
			}
		}
	}
	foreach my $db (keys %all_vacuum_stat) {
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^table-/);
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);
			my $table_header = '';
			my $colspan = '';
			if ($data_info{$id}{name} eq 'table-indexes') {
				$table_header = qq{
					<th>Sequencial scan</th>
					<th>Index scan</th>
					<th>Index vs Sequencial</th>
};
				$colspan = ' colspan="5"';
			} elsif ($data_info{$id}{name} eq 'table-query-tuples') {
				$table_header = qq{
					<th>Inserted</th>
					<th>Updated</th>
					<th>Deleted</th>
					<th>Hot Updated</th>
};
				$colspan = ' colspan="6"';
			} elsif ($data_info{$id}{name} eq 'table-kind-tuples') {
				$table_header = qq{
					<th>Live tuples</th>
					<th>Dead tuples</th>
					<th>Dead vs Live</th>
};
				$colspan = ' colspan="5"';
			} elsif ( $do_vacuum && ($data_info{$id}{name} eq 'table-vacuums-analyzes') ) {
				$table_header = qq{
					<th>Vacuum</th>
					<th>Autovacuum</th>
					<th>Analyze</th>
					<th>Autoanalyze</th>
					<th>Last vacuum</th>
					<th>Last autovacuum</th>
					<th>Last analyze</th>
					<th>Last autoanalyze</th>
};
				$colspan = ' colspan="10"';
			}
			print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database tables</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
						<th>Schema.Table</th>
						$table_header
					</tr>
				</thead>
				<tbody>
};
			my $has_table_data = 0;
			foreach my $tb (sort keys %{$all_vacuum_stat{$db}}) {
				next if ($tb eq 'all');
				next if (($#INCLUDE_TB >= 0) && !grep(/^$tb$/, @INCLUDE_TB));
				my $table_data = '';
				if ($data_info{$id}{name} eq 'table-indexes') {
					if (!$all_vacuum_stat{$db}{$tb}{seq_scan} && !$all_vacuum_stat{$db}{$tb}{idx_scan}) {
						next;
						foreach ('idx_scan','seq_scan') {
							$all_stat_user_tables{$db}{$tb}{$_} ||= 0;
						}
						$all_stat_user_tables{$db}{$tb}{idx_scan_vs_seq_scan} = sprintf("%0.2f", ($all_stat_user_tables{$db}{$tb}{idx_scan}*100)/(($all_stat_user_tables{$db}{$tb}{seq_scan}+$all_stat_user_tables{$db}{$tb}{idx_scan})||1));
						$table_data = qq{<tr><th>$tb</th><td>$all_stat_user_tables{$db}{$tb}{seq_scan}</td><td>$all_stat_user_tables{$db}{$tb}{idx_scan}</td><td>$all_stat_user_tables{$db}{$tb}{idx_scan_vs_seq_scan}%</td></tr>};
					} else {
						$has_table_data = 1;
						foreach ('idx_scan','seq_scan') {
							$all_vacuum_stat{$db}{$tb}{$_} ||= 0;
						}
						$all_vacuum_stat{$db}{$tb}{idx_scan_vs_seq_scan} = sprintf("%0.2f", ($all_vacuum_stat{$db}{$tb}{idx_scan}*100)/(($all_vacuum_stat{$db}{$tb}{seq_scan}+$all_vacuum_stat{$db}{$tb}{idx_scan})||1));
						$table_data = qq{<tr><th>$tb</th><td>$all_vacuum_stat{$db}{$tb}{seq_scan}</td><td>$all_vacuum_stat{$db}{$tb}{idx_scan}</td><td>$all_vacuum_stat{$db}{$tb}{idx_scan_vs_seq_scan}%</td></tr>};
					}
				} elsif ($data_info{$id}{name} eq 'table-query-tuples') {
					if (!$all_vacuum_stat{$db}{$tb}{n_tup_ins} && !$all_vacuum_stat{$db}{$tb}{n_tup_upd} && !$all_vacuum_stat{$db}{$tb}{n_tup_del} && !$all_vacuum_stat{$db}{$tb}{n_tup_hot_upd}) {
						next;
						foreach ('n_tup_ins','n_tup_upd','n_tup_del','n_tup_hot_upd') {
							$all_stat_user_tables{$db}{$tb}{$_} ||= 0;
						}
						$table_data = qq{<tr><th>$tb</th><td>$all_stat_user_tables{$db}{$tb}{n_tup_ins}</td><td>$all_stat_user_tables{$db}{$tb}{n_tup_upd}</td><td>$all_stat_user_tables{$db}{$tb}{n_tup_del}</td><td>$all_stat_user_tables{$db}{$tb}{n_tup_hot_upd}</td></tr>};
					} else {
						$has_table_data = 1;
						foreach ('n_tup_ins','n_tup_upd','n_tup_del','n_tup_hot_upd') {
							$all_vacuum_stat{$db}{$tb}{$_} ||= 0;
						}
						$table_data = qq{<tr><th>$tb</th><td>$all_vacuum_stat{$db}{$tb}{n_tup_ins}</td><td>$all_vacuum_stat{$db}{$tb}{n_tup_upd}</td><td>$all_vacuum_stat{$db}{$tb}{n_tup_del}</td><td>$all_vacuum_stat{$db}{$tb}{n_tup_hot_upd}</td></tr>};
					}
				} elsif ($data_info{$id}{name} eq 'table-kind-tuples') {
					if (!$all_stat_user_tables{$db}{$tb}{n_live_tup} && !$all_stat_user_tables{$db}{$tb}{n_dead_tup}) {
						next;
					}
					$has_table_data = 1;
					foreach ('n_live_tup','n_dead_tup','dead_vs_live') {
						$all_stat_user_tables{$db}{$tb}{$_} ||= 0;
					}
					$table_data = qq{<tr><th>$tb</th><td>$all_stat_user_tables{$db}{$tb}{n_live_tup}</td><td>$all_stat_user_tables{$db}{$tb}{n_dead_tup}</td><td>$all_stat_user_tables{$db}{$tb}{dead_vs_live}%</td></tr>};
				} elsif ( $do_vacuum && ($data_info{$id}{name} eq 'table-vacuums-analyzes') ) {
					if (!$all_vacuum_stat{$db}{$tb}{vacuum_count} && !$all_vacuum_stat{$db}{$tb}{autovacuum_count} && !$all_vacuum_stat{$db}{$tb}{analyze_count} && !$all_vacuum_stat{$db}{$tb}{analyze_count}) {
						next;
						foreach ('vacuum_count','autovacuum_count','analyze_count','autoanalyze_count') {
							$all_stat_user_tables{$db}{$tb}{$_} ||= 0;
						}
						$table_data = qq{<tr><th>$tb</th><td>$all_stat_user_tables{$db}{$tb}{vacuum_count}</td><td>$all_stat_user_tables{$db}{$tb}{autovacuum_count}</td><td>$all_stat_user_tables{$db}{$tb}{analyze_count}</td><td>$all_stat_user_tables{$db}{$tb}{autoanalyze_count}</td>};
					} else  {
						$has_table_data = 1;
						foreach ('vacuum_count','autovacuum_count','analyze_count','autoanalyze_count') {
							$all_vacuum_stat{$db}{$tb}{$_} ||= 0;
						}
						$table_data = qq{<tr><th>$tb</th><td>$all_vacuum_stat{$db}{$tb}{vacuum_count}</td><td>$all_vacuum_stat{$db}{$tb}{autovacuum_count}</td><td>$all_vacuum_stat{$db}{$tb}{analyze_count}</td><td>$all_vacuum_stat{$db}{$tb}{autoanalyze_count}</td>};
					}
					foreach ('last_vacuum','last_autovacuum','last_analyze','last_autoanalyze') {
						$all_stat_user_tables{$db}{$tb}{$_} ||= '-';
					}
					$table_data .= qq{<td>$all_stat_user_tables{$db}{$tb}{last_vacuum}</td><td>$all_stat_user_tables{$db}{$tb}{last_autovacuum}</td><td>$all_stat_user_tables{$db}{$tb}{last_analyze}</td><td>$all_stat_user_tables{$db}{$tb}{last_autoanalyze}</td></tr>};
				}
				if ($table_data) {
					print $fhtable qq{$table_data};
				}
			}
			if (!scalar keys %{$all_vacuum_stat{$db}} || !$has_table_data) {
				print $fhtable qq{<tr><td$colspan><div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div></td></tr>};
			}
			print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
};
			# Terminate cluster statistics file
			print $fhtable qq{
	</div>
    </div>
</div>
};
			$fhtable->close;
		}
	}
	%all_stat_user_tables = ();
}

# Compute statistics about index scan
sub pg_stat_user_indexes
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | dbname | relid | indexrelid | schemaname | relname | indexrelname | idx_scan | idx_tup_read | idx_tup_fetch
		$data[6] = "$data[4].$data[5].$data[6]";
		push(@{$start_vals{$data[1]}{$data[6]}}, @data) if ($#{$start_vals{$data[1]}{$data[6]}} < 0);

		# Get database statistics
		(($data[7] - $start_vals{$data[1]}{$data[6]}[7]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[7] - $start_vals{$data[1]}{$data[6]}[7]);
		$all_stat_user_indexes{$data[1]}{$data[6]}{idx_scan} += $tmp_val;

		(($data[8] - $start_vals{$data[1]}{$data[6]}[8]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[8] - $start_vals{$data[1]}{$data[6]}[8]);
		$all_stat_user_indexes{$data[1]}{$data[6]}{idx_tup_read} += $tmp_val;

		(($data[9] - $start_vals{$data[1]}{$data[6]}[9]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[9] - $start_vals{$data[1]}{$data[6]}[9]);
		$all_stat_user_indexes{$data[1]}{$data[6]}{idx_tup_fetch} += $tmp_val;

		@{$start_vals{$data[1]}{$data[6]}} = ();
		push(@{$start_vals{$data[1]}{$data[6]}}, @data);
	}
	$curfh->close();
}

# Compute report about index scan
sub pg_stat_user_indexes_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	foreach my $db (keys %all_stat_user_indexes) {
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^index-/);
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);
			my $table_header = '';
			my $colspan =  ' colspan="4"';
			if ($data_info{$id}{name} eq 'index-scan') {
				$table_header = qq{
					<th>Index scan</th>
					<th>Index entries returned</th>
					<th>Live table rows fetched</th>
};
			}
			print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database indexes</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
						<th>Schema.Table.Index</th>
						$table_header
					</tr>
				</thead>
				<tbody>
};
			my $found_table_stat = 0;
			foreach my $idx (sort keys %{$all_stat_user_indexes{$db}}) {
				next if ($idx eq 'all');
				next if (($#INCLUDE_TB >= 0) && !grep(/^$idx$/, @INCLUDE_TB));
				my $table_data = '';
				if ($data_info{$id}{name} eq 'index-scan') {
					if (!$all_stat_user_indexes{$db}{$idx}{idx_scan} && !$all_stat_user_indexes{$db}{$idx}{idx_tup_read} && !$all_stat_user_indexes{$db}{$idx}{idx_tup_fetch}) {
						next;
					}
					$found_table_stat = 1;
					foreach ('idx_scan','idx_tup_read','idx_tup_fetch') {
						$all_stat_user_indexes{$db}{$idx}{$_} ||= 0;
					}
					$table_data = qq{<tr><th>$idx</th><td>$all_stat_user_indexes{$db}{$idx}{idx_scan}</td><td>$all_stat_user_indexes{$db}{$idx}{idx_tup_read}</td><td>$all_stat_user_indexes{$db}{$idx}{idx_tup_fetch}</td></tr>};
				}
				if ($table_data) {
					print $fhtable qq{$table_data} if ($table_data);
				}
			}
			if (!$found_table_stat) {
				print $fhtable qq{<tr><td$colspan><div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div></td></tr>};
			}
			print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
};
			# Terminate cluster statistics file
			print $fhtable qq{
	</div>
    </div>
</div>
};
			$fhtable->close;
		}
	}
	%all_stat_user_indexes = ();
}

# Compute statistics about invalid index
sub pg_stat_invalid_indexes
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | dbname | schemaname | relname | indexrelname | index_definition
		$all_stat_invalid_indexes{$data[1]}{$data[2]}{$data[3]}{$data[4]} = $data[5];
		$OVERALL_STATS{'database'}{$data[1]}{invalid_indexes}++;
		$OVERALL_STATS{'cluster'}{invalid_indexes}++;
		push(@{$OVERALL_STATS{'cluster'}{invalid_indexes_db}}, $data[1]) if (!grep(/^$data[1]$/, @{$OVERALL_STATS{'cluster'}{invalid_indexes_db}}));
	}
	$curfh->close();
}

# Compute report about invalid index
sub pg_stat_invalid_indexes_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	foreach my $db (keys %all_stat_invalid_indexes) {
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} ne 'index-invalid');
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);
			my $table_header = '';
			my $colspan =  ' colspan="4"';
			print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Schema</th>
					<th>Table</th>
					<th>Index name</th>
					<th>Index definition</th>
					</tr>
				</thead>
				<tbody>
};
			my $found_stat = 0;
			foreach my $sch (sort keys %{$all_stat_invalid_indexes{$db}}) {
				foreach my $tb (sort keys %{$all_stat_invalid_indexes{$db}{$sch}}) {
					next if (($#INCLUDE_TB >= 0) && !grep(/^$tb$/, @INCLUDE_TB));
					$found_stat = 1;
					foreach my $idx (sort keys %{$all_stat_invalid_indexes{$db}{$sch}{$tb}}) {
						print $fhtable qq{<tr><th>$sch</th><td>$tb</td><td>$idx</td><td>$all_stat_invalid_indexes{$db}{$sch}{$tb}{$idx}</td></tr>};
					}
				}
			}
			if (!$found_stat) {
				print $fhtable qq{<tr><td$colspan><div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div></td></tr>};
			}
			print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
};
			# Terminate cluster statistics file
			print $fhtable qq{
	</div>
    </div>
</div>
};
			$fhtable->close;
		}
	}
	%all_stat_invalid_indexes = ();
}

# Compute statistics about hash index
sub pg_stat_hash_indexes
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | dbname | schemaname | relname | indexrelname | index_definition
		$all_stat_hash_indexes{$data[1]}{$data[2]}{$data[3]}{$data[4]} = $data[5];
		$OVERALL_STATS{'database'}{$data[1]}{hash_indexes}++;
		$OVERALL_STATS{'cluster'}{hash_indexes}++;
		push(@{$OVERALL_STATS{'cluster'}{hash_indexes_db}}, $data[1]) if (!grep(/^$data[1]$/, @{$OVERALL_STATS{'cluster'}{hash_indexes_db}}));
	}
	$curfh->close();
}

# Compute report about hash index
sub pg_stat_hash_indexes_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	foreach my $db (keys %all_stat_hash_indexes) {
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} ne 'index-hash');
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);
			my $table_header = '';
			my $colspan =  ' colspan="4"';
			print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Schema</th>
					<th>Table</th>
					<th>Index name</th>
					<th>Index definition</th>
					</tr>
				</thead>
				<tbody>
};
			my $found_stat = 0;
			foreach my $sch (sort keys %{$all_stat_hash_indexes{$db}}) {
				foreach my $tb (sort keys %{$all_stat_hash_indexes{$db}{$sch}}) {
					next if (($#INCLUDE_TB >= 0) && !grep(/^$tb$/, @INCLUDE_TB));
					$found_stat = 1;
					foreach my $idx (sort keys %{$all_stat_hash_indexes{$db}{$sch}{$tb}}) {
						print $fhtable qq{<tr><th>$sch</th><td>$tb</td><td>$idx</td><td>$all_stat_hash_indexes{$db}{$sch}{$tb}{$idx}</td></tr>};
					}
				}
			}
			if (!$found_stat) {
				print $fhtable qq{<tr><td$colspan><div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div></td></tr>};
			}
			print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
};
			# Terminate cluster statistics file
			print $fhtable qq{
	</div>
    </div>
</div>
};
			$fhtable->close;
		}
	}
	%all_stat_hash_indexes = ();
}


# Compute stats for table I/O
sub pg_statio_user_tables
{
	my ($in_dir, $file, $interval) = @_;

	return if ($NO_TB_STAT);

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | dbname | relid | schemaname | relname | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit
		$data[4] = "$data[3].$data[4]";

		push(@{$start_vals{$data[1]}{$data[4]}}, @data) if ($#{$start_vals{$data[1]}{$data[4]}} < 0);

		(($data[5] - $start_vals{$data[1]}{$data[4]}[5]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[5] - $start_vals{$data[1]}{$data[4]}[5]);
		$all_statio_user_tables{$data[0]}{$data[1]}{$data[4]}{heap_blks_read} = int($tmp_val/$interval);

		(($data[6] - $start_vals{$data[1]}{$data[4]}[6]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[6] - $start_vals{$data[1]}{$data[4]}[6]);
		$all_statio_user_tables{$data[0]}{$data[1]}{$data[4]}{heap_blks_hit} = int($tmp_val/$interval);

		(($data[7] - $start_vals{$data[1]}{$data[4]}[7]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[7] - $start_vals{$data[1]}{$data[4]}[7]);
		$all_statio_user_tables{$data[0]}{$data[1]}{$data[4]}{idx_blks_read} = int($tmp_val/$interval);

		(($data[8] - $start_vals{$data[1]}{$data[4]}[8]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[8] - $start_vals{$data[1]}{$data[4]}[8]);
		$all_statio_user_tables{$data[0]}{$data[1]}{$data[4]}{idx_blks_hit} = int($tmp_val/$interval);

		(($data[9] - $start_vals{$data[1]}{$data[4]}[9]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[9] - $start_vals{$data[1]}{$data[4]}[9]);
		$all_statio_user_tables{$data[0]}{$data[1]}{$data[4]}{toast_blks_read} = int($tmp_val/$interval);

		(($data[10] - $start_vals{$data[1]}{$data[4]}[10]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[10] - $start_vals{$data[1]}{$data[4]}[10]);
		$all_statio_user_tables{$data[0]}{$data[1]}{$data[4]}{toast_blks_hit} = int($tmp_val/$interval);

		(($data[11] - $start_vals{$data[1]}{$data[4]}[11]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[11] - $start_vals{$data[1]}{$data[4]}[11]);
		$all_statio_user_tables{$data[0]}{$data[1]}{$data[4]}{tidx_blks_read} = int($tmp_val/$interval);

		(($data[12] - $start_vals{$data[1]}{$data[4]}[12]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[12] - $start_vals{$data[1]}{$data[4]}[12]);
		$all_statio_user_tables{$data[0]}{$data[1]}{$data[4]}{tidx_blks_hit} = int($tmp_val/$interval);

		@{$start_vals{$data[1]}{$data[4]}} = ();
		push(@{$start_vals{$data[1]}{$data[4]}}, @data);
	}
	$curfh->close();
}

# Compute report for table I/O
sub pg_statio_user_tables_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	my %is_used = ();
	my %is_toast = ();
	my %statio_usertable = ();
	foreach my $t (sort {$a <=> $b} keys %all_statio_user_tables) {
		foreach my $db (@global_databases) {
			foreach my $obj (keys %{ $all_statio_user_tables{$t}{$db} }) {
				$statio_usertable{$db}{$obj}{heap_blks_read} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_user_tables{$t}{$db}{$obj}{heap_blks_read}||0) . '],';
				$statio_usertable{$db}{$obj}{heap_blks_hit} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_user_tables{$t}{$db}{$obj}{heap_blks_hit}||0) . '],';
				$statio_usertable{$db}{$obj}{idx_blks_read} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_user_tables{$t}{$db}{$obj}{idx_blks_read}||0) . '],';
				$statio_usertable{$db}{$obj}{idx_blks_hit} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_user_tables{$t}{$db}{$obj}{idx_blks_hit}||0) . '],';
				$statio_usertable{$db}{$obj}{toast_blks_read} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_user_tables{$t}{$db}{$obj}{toast_blks_read}||0) . '],';
				$statio_usertable{$db}{$obj}{toast_blks_hit} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_user_tables{$t}{$db}{$obj}{toast_blks_hit}||0) . '],';
				$statio_usertable{$db}{$obj}{tidx_blks_read} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_user_tables{$t}{$db}{$obj}{tidx_blks_read}||0) . '],';
				$statio_usertable{$db}{$obj}{tidx_blks_hit} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_user_tables{$t}{$db}{$obj}{tidx_blks_hit}||0) . '],';
				$is_used{$db}{$obj}{is_used} += ($all_statio_user_tables{$t}{$db}{$obj}{heap_blks_read}||0)+($all_statio_user_tables{$t}{$db}{$obj}{heap_blks_hit}||0)+($all_statio_user_tables{$t}{$db}{$obj}{idx_blks_read}||0)+($all_statio_user_tables{$t}{$db}{$obj}{idx_blks_hit}||0)+($all_statio_user_tables{$t}{$db}{$obj}{toast_blks_read}||0)+($all_statio_user_tables{$t}{$db}{$obj}{toast_blks_hit}||0)+($all_statio_user_tables{$t}{$db}{$obj}{tidx_blks_read}||0)+($all_statio_user_tables{$t}{$db}{$obj}{tidx_blks_hit}||0);
				if (!$is_toast{$db}{$obj}{is_toast}) {
					$is_toast{$db}{$obj}{is_toast} += ($all_statio_user_tables{$t}{$db}{$obj}{toast_blks_read}||0)+($all_statio_user_tables{$t}{$db}{$obj}{toast_blks_hit}||0)+($all_statio_user_tables{$t}{$db}{$obj}{tidx_blks_read}||0)+($all_statio_user_tables{$t}{$db}{$obj}{tidx_blks_hit}||0);
				}
			}
		}
	}
	%all_statio_user_tables = ();

	foreach my $db (sort keys %statio_usertable) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		next if (!exists $is_used{$db});
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^statio-/);
			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);

			my $rank = 1;
			foreach my $tb (sort {$is_used{$db}{$b} <=> $is_used{$db}{$a} } keys %{$is_used{$db}}) {
				next if (($#INCLUDE_TB >= 0) && !grep(/^$tb$/, @INCLUDE_TB));
				last if ($TOP_STAT && ($rank > $TOP_STAT));
				my $graph_data = '';
				if ($data_info{$id}{name} eq 'statio-table') {
					foreach ('heap_blks_read','heap_blks_hit','idx_blks_read','idx_blks_hit','toast_blks_read','toast_blks_hit','tidx_blks_read','tidx_blks_hit') {
						$statio_usertable{$db}{$tb}{$_} =~ s/,$//;
					}
					# if this is a toast table override the normal table values for easy use
					if (exists $is_toast{$db}{$tb}) {
						$statio_usertable{$db}{$tb}{heap_blks_read} = $statio_usertable{$db}{$tb}{toast_blks_read};
						$statio_usertable{$db}{$tb}{heap_blks_hit} = $statio_usertable{$db}{$tb}{toast_blks_hit};
						$statio_usertable{$db}{$tb}{idx_blks_read} = $statio_usertable{$db}{$tb}{tidx_blks_read};
						$statio_usertable{$db}{$tb}{idx_blks_hit} = $statio_usertable{$db}{$tb}{tidx_blks_hit};
					}
					print $fhtable &jqplot_linegraph_array($IDX++, 'statio-table', \%{$data_info{$id}}, $tb, $statio_usertable{$db}{$tb}{heap_blks_read},$statio_usertable{$db}{$tb}{heap_blks_hit},$statio_usertable{$db}{$tb}{idx_blks_read},$statio_usertable{$db}{$tb}{idx_blks_hit});
					delete $statio_usertable{$db}{$tb};
					$rank++;
				}
			}
			$fhtable->close;
		}
	}
}

# Compute stats for relation buffer cache
sub pg_relation_buffercache
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		$data[7] = 100 if ($data[7] > 100);
		# date_trunc | datname | relname | buffers | relpages | buffered | buffers % | relation %
		$all_relation_buffercache{$data[0]}{$data[1]}{$data[2]}{buffers}      = ($data[3] || 0);
		$all_relation_buffercache{$data[0]}{$data[1]}{$data[2]}{pages}        = ($data[4] || 0);
		$all_relation_buffercache{$data[0]}{$data[1]}{$data[2]}{buffered}     = ($data[5] || 0);
		$all_relation_buffercache{$data[0]}{$data[1]}{$data[2]}{'buffers %'}  = ($data[6] || 0);
		$all_relation_buffercache{$data[0]}{$data[1]}{$data[2]}{'relation %'} = ($data[7] || 0);

	}
	$curfh->close();
};

# Compute report for relation buffer cache
sub pg_relation_buffercache_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	my %rel_stat = ();
	my %to_show = ();
	my %buffercache_stat = ();

	foreach my $t (sort {$a <=> $b} keys %all_relation_buffercache) {
		foreach my $db (@global_databases) {
			foreach my $obj ( keys %{$all_relation_buffercache{$t}{$db}} ) {
				$rel_stat{$db}{$obj}{buffers}      .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_relation_buffercache{$t}{$db}{$obj}{buffers} || 0) . '],';
				$buffercache_stat{$db}{$obj}{buffers} = ($all_relation_buffercache{$t}{$db}{$obj}{buffers} || 0);
				$rel_stat{$db}{$obj}{pages}        .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_relation_buffercache{$t}{$db}{$obj}{pages} || 0) . '],';
				$buffercache_stat{$db}{$obj}{pages} = ($all_relation_buffercache{$t}{$db}{$obj}{pages} || 0);
				$rel_stat{$db}{$obj}{buffered}     .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_relation_buffercache{$t}{$db}{$obj}{buffered} || 0) . '],';
				$buffercache_stat{$db}{$obj}{buffered} = ($all_relation_buffercache{$t}{$db}{$obj}{buffered} || 0);
				$rel_stat{$db}{$obj}{'buffers %'}  .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_relation_buffercache{$t}{$db}{$obj}{'buffers %'} || 0) . '],';
				$buffercache_stat{$db}{$obj}{'buffers %'} = ($all_relation_buffercache{$t}{$db}{$obj}{'buffers %'} || 0);
				$rel_stat{$db}{$obj}{'relation %'} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_relation_buffercache{$t}{$db}{$obj}{'relation %'} || 0) . '],';
				$buffercache_stat{$db}{$obj}{'relation %'} = ($all_relation_buffercache{$t}{$db}{$obj}{'relation %'} || 0);
			}
		}
	}
	%all_relation_buffercache = ();

	# Show list of object in the shared buffers
	foreach my $db (keys %buffercache_stat) {

		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));

		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^buffercache-/);

			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);
			my $table_header = '';
			my $colspan =  ' colspan="6"';
			if ($data_info{$id}{name} eq 'buffercache-relation') {
				$table_header = qq{
					<th>Relation</th>
					<th>Buffers</th>
					<th>Pages</th>
					<th>Buffered</th>
					<th>Buffers %</th>
					<th>Relation %</th>
};
			}
			print $fhtable qq{
<ul id="slides">

<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
						$table_header
					</tr>
				</thead>
				<tbody>
};
			my $found_stat = 0;
			my $rank = 1;
			foreach my $rel (sort {$buffercache_stat{$db}{$b}{buffers} <=> $buffercache_stat{$db}{$a}{buffers}} keys %{$buffercache_stat{$db}}) {
				next if (($#INCLUDE_TB >= 0) && !grep(/^$rel$/, @INCLUDE_TB));
				last if ($TOP_STAT && ($rank > $TOP_STAT));
				my $table_data = '';
				if ($data_info{$id}{name} eq 'buffercache-relation') {
					if (!$buffercache_stat{$db}{$rel}{buffers} && !$buffercache_stat{$db}{$rel}{pages} && !$buffercache_stat{$db}{$rel}{buffered}) {
						next;
					}
					$found_stat = 1;
					$to_show{$db}{$rel} = $rank;
					$table_data = "<tr><th>$rel</th><td>$buffercache_stat{$db}{$rel}{buffers}</td><td>$buffercache_stat{$db}{$rel}{pages}</td><td>" . &pretty_print_size($buffercache_stat{$db}{$rel}{buffered}) . "</td><td>$buffercache_stat{$db}{$rel}{'buffers %'}</td><td>$buffercache_stat{$db}{$rel}{'relation %'}</td></tr>\n";
				}
				$rank++;
				if ($table_data) {
					print $fhtable qq{$table_data} if ($table_data);
				}
			}
			if (!$found_stat) {
				print $fhtable qq{<tr><td$colspan><div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div></td></tr>};
			}
			print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
};
			# Terminate cluster statistics file
			print $fhtable qq{
	</div>
    </div>
</div>
};
			$fhtable->close;
		}
	}
	%buffercache_stat = ();

	# Show shared buffers usage per object
	foreach my $db (sort keys %rel_stat) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^statio-buffercache/);
			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);

			foreach my $rel (sort {$to_show{$db}{$a} <=> $to_show{$db}{$b} } keys %{$to_show{$db}}) {
				my $graph_data = '';
				if ($data_info{$id}{name} eq 'statio-buffercache') {
					foreach ('buffers','pages','buffered','buffers %','relation %') {
						$rel_stat{$db}{$rel}{$_} =~ s/,$//;
					}
					print $fhtable &jqplot_linegraph_array($IDX++, 'statio-buffercache', \%{$data_info{$id}}, $rel, $rel_stat{$db}{$rel}{buffered},$rel_stat{$db}{$rel}{'relation %'});
					delete $rel_stat{$db}{$rel};
				}
			}
			$fhtable->close;
		}
	}

}

# Compute stats for index I/O
sub pg_statio_user_indexes
{
	my ($in_dir, $file, $interval) = @_;

	return if ($NO_TB_STAT);

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | dbname | relid | indexrelid | schemaname | relname | indexrelname | idx_blks_read | idx_blks_hit
		$data[6] = "$data[4].$data[5].$data[6]";

		push(@{$start_vals{$data[1]}{$data[6]}}, @data) if ($#{$start_vals{$data[1]}{$data[6]}} < 0);

		(($data[7] - $start_vals{$data[1]}{$data[6]}[7]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[7] - $start_vals{$data[1]}{$data[6]}[7]);
		$all_statio_all_indexes{$data[0]}{$data[1]}{$data[6]}{idx_blks_read} = int($tmp_val/$interval);

		(($data[8] - $start_vals{$data[1]}{$data[6]}[8]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[8] - $start_vals{$data[1]}{$data[6]}[8]);
		$all_statio_all_indexes{$data[0]}{$data[1]}{$data[6]}{idx_blks_hit} = int($tmp_val/$interval);

		@{$start_vals{$data[1]}{$data[6]}} = ();
		push(@{$start_vals{$data[1]}{$data[6]}}, @data);
	}
	$curfh->close();

}

# Compute report for index I/O
sub pg_statio_user_indexes_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	my %statio_userindex = ();
	my %is_used = ();
	foreach my $t (sort {$a <=> $b} keys %all_statio_all_indexes) {
		foreach my $db (@global_databases) {
			foreach my $obj (keys %{ $all_statio_all_indexes{$t}{$db} }) {
				$statio_userindex{$db}{$obj}{idx_blks_read} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_all_indexes{$t}{$db}{$obj}{idx_blks_read}||0) . '],';
				$statio_userindex{$db}{$obj}{idx_blks_hit} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_statio_all_indexes{$t}{$db}{$obj}{idx_blks_hit}||0) . '],';
				$is_used{$db}{$obj} += ($all_statio_all_indexes{$t}{$db}{$obj}{idx_blks_hit}||0)+($all_statio_all_indexes{$t}{$db}{$obj}{idx_blks_read}||0);
			}
		}
	}
	%all_statio_all_indexes = ();

	foreach my $db (sort keys %statio_userindex) {
		next if (!exists $is_used{$db});
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^statio-/);
			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);

			my $rank = 1;
			foreach my $tb (sort {$is_used{$db}{$b} <=> $is_used{$db}{$a} } keys %{$is_used{$db}}) {
				next if (($#INCLUDE_TB >= 0) && !grep(/^$tb$/, @INCLUDE_TB));
				last if ($TOP_STAT && ($rank > $TOP_STAT));
				my $graph_data = '';
				if ($data_info{$id}{name} eq 'statio-index') {
					foreach ('idx_blks_read','idx_blks_hit') {
						$statio_userindex{$db}{$tb}{$_} =~ s/,$//;
					}
					print $fhtable &jqplot_linegraph_array($IDX++, 'statio-index', \%{$data_info{$id}}, $tb, $statio_userindex{$db}{$tb}{idx_blks_read},$statio_userindex{$db}{$tb}{idx_blks_hit});
					delete $statio_userindex{$db}{$tb};
					$rank++;
				}
			}
			$fhtable->close;
		}
	}

}

# Compute statistics of xlog cluster
sub pg_xlog_stat
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | total_file | last_wal_name | wal_recycled | wal_written | max_wal

		# case of pgstats file content
		if ($#data == 3) {
			$all_xlog_stat{$data[0]}{total}++;
		} else {
			$all_xlog_stat{$data[0]}{total} = ($data[1] || 0);
			if ($#data == 5) {
				$all_xlog_stat{$data[0]}{recycled} = ($data[3] || 0);
				$all_xlog_stat{$data[0]}{written}  = ($data[4] || 0);
				$all_xlog_stat{$data[0]}{max_wal}  = (POSIX::ceil($data[5]) || 0);
			}
		}
	}
	$curfh->close();
}

# Compute graphs of xlog cluster statistics
sub pg_xlog_stat_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %xlog_stat = ();
	foreach my $t (sort {$a <=> $b} keys %all_xlog_stat) {
		$xlog_stat{total} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_xlog_stat{$t}{total} || 0) . '],';
		$xlog_stat{recycled} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_xlog_stat{$t}{recycled} || 0) . '],';
		$xlog_stat{written}  .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_xlog_stat{$t}{written} || 0) . '],';
		$xlog_stat{max_wal}  .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_xlog_stat{$t}{max_wal} || 0) . '],';
	}
	%all_xlog_stat = ();

	my $id = &get_data_id('database-xlog_files', %data_info);
	$xlog_stat{total} =~ s/,$//;
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	if (exists $xlog_stat{recycled}) {
		push(@{$data_info{$id}{legends}}, 'recycled', 'written', 'max_wal');
		print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-xlog_files', \%{$data_info{$id}}, '', $xlog_stat{total}, $xlog_stat{recycled}, $xlog_stat{written}, $xlog_stat{max_wal});
	} else {
		print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-xlog_files', \%{$data_info{$id}}, '', $xlog_stat{total});
	}
	$fhcluster->close();
}

# Compute statistics of bgwriter cluster
sub pg_stat_bgwriter
{
	my ($in_dir, $file, $interval) = @_;

	my @start_vals = ();
	my %total_count = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		push(@start_vals, @data) if ($#start_vals < 0);
		(($data[1] - $start_vals[1]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[1] - $start_vals[1]);
		$all_stat_bgwriter{$data[0]}{checkpoints_timed} = $tmp_val;
		(($data[2] - $start_vals[2]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[2] - $start_vals[2]);
		$all_stat_bgwriter{$data[0]}{checkpoints_req} .= $tmp_val;
		my $id = 0;
		if ($#data > 10) {
			$id += 2;
			(($data[3] - $start_vals[3]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[3] - $start_vals[3]);
			$all_stat_bgwriter{$data[0]}{checkpoint_write_time} .= $tmp_val;
			(($data[4] - $start_vals[4]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[4] - $start_vals[4]);
			$all_stat_bgwriter{$data[0]}{checkpoint_sync_time} .= $tmp_val;
		}
		(($data[3+$id] - $start_vals[3+$id]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[3+$id] - $start_vals[3+$id]);
		$all_stat_bgwriter{$data[0]}{buffers_checkpoint} .= sprintf("%.2f", $tmp_val/$interval);
		(($data[4+$id] - $start_vals[4+$id]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[4+$id] - $start_vals[4+$id]);
		$all_stat_bgwriter{$data[0]}{buffers_clean} .= sprintf("%.2f", $tmp_val/$interval);
		(($data[5+$id] - $start_vals[5+$id]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[5+$id] - $start_vals[5+$id]);
		$all_stat_bgwriter{$data[0]}{maxwritten_clean} .= sprintf("%.2f", $tmp_val/$interval);
		(($data[6+$id] - $start_vals[6+$id]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[6+$id] - $start_vals[6+$id]);
		$all_stat_bgwriter{$data[0]}{buffers_backend} .= sprintf("%.2f", $tmp_val/$interval);
		(($data[7+$id] - $start_vals[7+$id]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[7+$id] - $start_vals[7+$id]);
		$all_stat_bgwriter{$data[0]}{buffers_backend_fsync} .= sprintf("%.2f", $tmp_val/$interval);
		$OVERALL_STATS{'bgwriter'}{stats_reset} = $data[-1] if (!exists $OVERALL_STATS{'bgwriter'}{stats_reset} || ($OVERALL_STATS{'bgwriter'}{stats_reset} lt $data[-1]));

		@start_vals = ();
		push(@start_vals, @data);
	}
	$curfh->close();

}

# Compute graphs of bgwriter cluster statistics
sub pg_stat_bgwriter_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %bgwriter_stat = ();
	my %data = ();
	foreach my $t (sort {$a <=> $b} keys %all_stat_bgwriter) {
		$data{'Checkpoint timed'} += ($all_stat_bgwriter{$t}{checkpoints_timed} || 0);
		$data{'Checkpoint requested'} += ($all_stat_bgwriter{$t}{checkpoints_red} || 0);
		$bgwriter_stat{checkpoints_timed} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_bgwriter{$t}{checkpoints_timed} . '],';
		$bgwriter_stat{checkpoints_req} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_bgwriter{$t}{checkpoints_req} . '],';
		$bgwriter_stat{checkpoint_write_time} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_bgwriter{$t}{checkpoint_write_time}||0) . '],';
		$bgwriter_stat{checkpoint_sync_time} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_bgwriter{$t}{checkpoint_sync_time}||0) . '],';
		$bgwriter_stat{buffers_checkpoint} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_bgwriter{$t}{buffers_checkpoint} . '],';
		$bgwriter_stat{buffers_clean} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_bgwriter{$t}{buffers_clean} . '],';
		$bgwriter_stat{maxwritten_clean} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_bgwriter{$t}{maxwritten_clean} . '],';
		$bgwriter_stat{buffers_backend} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_bgwriter{$t}{buffers_backend} . '],';
		$bgwriter_stat{buffers_backend_fsync} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_bgwriter{$t}{buffers_backend_fsync} . '],';
	}
	%all_stat_bgwriter = ();

	my $total_checkpoint = $data{'Checkpoint timed'} + $data{'Checkpoint requested'};
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		if ($data_info{$id}{name} eq 'database-checkpoints') {
			if ($total_checkpoint) {
				$data_info{$id}{legends}[0] .= ' (' . sprintf("%0.2f", $data{'Checkpoint timed'}*100/($total_checkpoint||1)) . '%)';
				$data_info{$id}{legends}[1] .= ' (' . sprintf("%0.2f", $data{'Checkpoint requested'}*100/($total_checkpoint||1)) . '%)';
			}
			$bgwriter_stat{checkpoints_timed} =~ s/,$//;
			$bgwriter_stat{checkpoints_req} =~ s/,$//;
			print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-checkpoints', \%{$data_info{$id}}, '', $bgwriter_stat{checkpoints_timed}, $bgwriter_stat{checkpoints_req});
		} elsif ($data_info{$id}{name} eq 'database-checkpoints_time') {
			if (exists $bgwriter_stat{checkpoint_write_time}) {
				$bgwriter_stat{checkpoint_sync_time} =~ s/,$//;
				$bgwriter_stat{checkpoint_write_time} =~ s/,$//;
				print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-checkpoints_time', \%{$data_info{$id}}, '', $bgwriter_stat{checkpoint_write_time}, $bgwriter_stat{checkpoint_sync_time});
			}
		} elsif ($data_info{$id}{name} eq 'database-bgwriter') {
			$bgwriter_stat{buffers_checkpoint} =~ s/,$//;
			$bgwriter_stat{buffers_clean} =~ s/,$//;
			$bgwriter_stat{buffers_backend} =~ s/,$//;
			print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-bgwriter', \%{$data_info{$id}}, '', $bgwriter_stat{buffers_checkpoint}, $bgwriter_stat{buffers_clean}, $bgwriter_stat{buffers_backend});
		} elsif ($data_info{$id}{name} eq 'database-bgwriter_count') {
			$bgwriter_stat{maxwritten_clean} =~ s/,$//;
			$bgwriter_stat{buffers_backend_fsync} =~ s/,$//;
			print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-bgwriter_count', \%{$data_info{$id}}, '',  $bgwriter_stat{maxwritten_clean}, $bgwriter_stat{buffers_backend_fsync});
		}
	}
	$fhcluster->close();
}

# Compute statistics of connections
sub pg_stat_connections
{
	my ($in_dir, $file) = @_;

	my @start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data, 5));

		# timestamp | total | active | waiting | idle_in_xact | datname

		push(@global_databases, $data[5]) if (!grep(/^$data[5]$/, @global_databases));

		$all_stat_connections{$data[0]}{$data[5]}{total} = $data[1];
		$all_stat_connections{$data[0]}{$data[5]}{active} = $data[2];
		$all_stat_connections{$data[0]}{$data[5]}{waiting} = $data[3];
		$all_stat_connections{$data[0]}{$data[5]}{idle_in_xact} = $data[4];
		$all_stat_connections{$data[0]}{$data[5]}{idle} = ($data[1] - $data[2] - $data[4]);

		$all_stat_connections{$data[0]}{'all'}{total} += $data[1];
		$all_stat_connections{$data[0]}{'all'}{active} += $data[2];
		$all_stat_connections{$data[0]}{'all'}{waiting} += $data[3];
		$all_stat_connections{$data[0]}{'all'}{idle_in_xact} += $data[4];
		$all_stat_connections{$data[0]}{'all'}{idle} += ($data[1] - $data[2] - $data[4]);
	}
	$curfh->close();
}

# Compute graphs of connections statistics
sub pg_stat_connections_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %connections_stat = ();
	foreach my $t (sort {$a <=> $b} keys %all_stat_connections) {
		foreach my $db (@global_databases) {
			$connections_stat{$db}{total} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_connections{$t}{$db}{total}||0) . '],';
			$connections_stat{$db}{active} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_connections{$t}{$db}{active}||0) . '],';
			$connections_stat{$db}{waiting} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_connections{$t}{$db}{waiting}||0) . '],';
			$connections_stat{$db}{idle_in_xact} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_connections{$t}{$db}{idle_in_xact}||0) . '],';
			$connections_stat{$db}{idle} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_connections{$t}{$db}{idle}||0) . '],';
		}
	}
	%all_stat_connections = ();

	my $id = &get_data_id('database-connections', %data_info);
	foreach my $db (sort keys %connections_stat) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		$connections_stat{$db}{total} =~ s/,$//;
		$connections_stat{$db}{active} =~ s/,$//;
		$connections_stat{$db}{waiting} =~ s/,$//;
		$connections_stat{$db}{idle_in_xact} =~ s/,$//;
		$connections_stat{$db}{idle} =~ s/,$//;
		my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-$db.html", $src_base);
		if ($db ne 'all') {
			$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-connections', \%{$data_info{$id}}, $db, $connections_stat{$db}{active}, $connections_stat{$db}{idle}, $connections_stat{$db}{idle_in_xact}, $connections_stat{$db}{waiting}) );
		} else {
			my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
			print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-connections', \%{$data_info{$id}}, 'all', $connections_stat{$db}{active}, $connections_stat{$db}{idle}, $connections_stat{$db}{idle_in_xact}, $connections_stat{$db}{waiting});
			$fhcluster->close();
		}
		$dbfh->close();
	}
}

# Compute statistics of user functions call
sub pg_stat_user_functions
{
	my ($in_dir, $file) = @_;

	my %start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | datname | funcid | schemaname | funcname | calls | total_time | self_time
		$data[4] = "$data[3].$data[4]";

		push(@{$start_vals{$data[1]}{$data[4]}}, @data) if ($#{$start_vals{$data[1]}{$data[4]}} < 0);

		(($data[5] - $start_vals{$data[1]}{$data[4]}[5]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[5] - $start_vals{$data[1]}{$data[4]}[5]);
		$all_stat_user_functions{$data[1]}{$data[4]}{calls} += $tmp_val;
		(($data[6] - $start_vals{$data[1]}{$data[4]}[6]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[6] - $start_vals{$data[1]}{$data[4]}[6]);
		$all_stat_user_functions{$data[1]}{$data[4]}{total_time} += $tmp_val;
		(($data[7] - $start_vals{$data[1]}{$data[4]}[7]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[7] - $start_vals{$data[1]}{$data[4]}[7]);
		$all_stat_user_functions{$data[1]}{$data[4]}{self_time} += $tmp_val;

		@{$start_vals{$data[1]}{$data[4]}} = ();
		push(@{$start_vals{$data[1]}{$data[4]}}, @data);

	}
	$curfh->close();
}

# Compute graphs of user functions call statistics
sub pg_stat_user_functions_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $id = &get_data_id('database-functions', %data_info);
	foreach my $db (keys %all_stat_user_functions) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		my $colspan =  ' colspan="4"';
		my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-fct-$db.html", $src_base);
		$dbfh->print (qq{
<li class="slide" id="database-functions-slide">
<div id="database-functions"><br/><br/><br/><br/></div>

<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Schema.function</th>
					<th>Calls</th>
					<th>Total time</th>
					<th>Self time</th>
					</tr>
				</thead>
				<tbody>
});
			my $found_fct_stat = 0;
			foreach my $fct (sort keys %{$all_stat_user_functions{$db}}) {
				if (!$all_stat_user_functions{$db}{$fct}{calls} && !$all_stat_user_functions{$db}{$fct}{total_time} && !$all_stat_user_functions{$db}{$fct}{self_time}) {
					next;
				}
				$found_fct_stat = 1;
				foreach ('calls','total_time','self_time') {
					$all_stat_user_functions{$db}{$fct}{$_} ||= 0;
				}
				$dbfh->print( "<tr><th>$fct</th><td>$all_stat_user_functions{$db}{$fct}{calls}</td><td>" . &format_duration($all_stat_user_functions{$db}{$fct}{total_time}) . "</td><td>" . &format_duration($all_stat_user_functions{$db}{$fct}{self_time}) . "</td></tr>\n");
			}
			if (!$found_fct_stat) {
				$dbfh->print( qq{<tr><td$colspan><div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div></td></tr>} );
			}
			$dbfh->print( qq{
				</tbody>
			</table>
		</div>
	</div>
	</div>
    </div>
</div>
</div>
</li>
});
		$dbfh->close();
	}
}

# Compute graphs of replication cluster statistics
sub pg_stat_replication
{
	my ($in_dir, $file, $interval) = @_;

	my @start_vals = ();
	my $tmp_val = 0;
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));
		# timestamp | pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | state | master_location | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state
		# Do not care about BACKUP and pg_basebackup connection
		if ( (uc($data[9]) eq 'STREAMING') || (uc($data[4]) eq 'WALRECEIVER') ) {
			my $name = $data[5];
			$data[6] =~ s/"//g;
			$name .= " - $data[6]" if ($data[6]);

			push(@start_vals, @data) if ($#start_vals < 0);

			if ($CAPTURE) {
				$all_stat_replication{$data[0]}{master_location} = 0;
			} else {
				if ((&getNumericalOffset($data[10]) - &getNumericalOffset($start_vals[10])) > 0) {
					$all_stat_replication{$data[0]}{master_location} = &getNumericalOffset($data[10]) -&getNumericalOffset($start_vals[10]);
				} else {
					$all_stat_replication{$data[0]}{master_location} = 0;
				}
			}

			if (!$data[14]) {
				$all_stat_replication{$data[0]}{$name}{replay_location} = 0;
			} else {
				((&getNumericalOffset($data[10]) - &getNumericalOffset($data[14])) < 0) ? $tmp_val = 0 : $tmp_val = (&getNumericalOffset($data[10]) - &getNumericalOffset($data[14]));
				$all_stat_replication{$data[0]}{$name}{replay_location} = sprintf("%.2f", ($tmp_val/$interval));
			}
			if (!$data[11]) {
				$all_stat_replication{$data[0]}{$name}{sent_location} = 0;
			} else {
				((&getNumericalOffset($data[10]) - &getNumericalOffset($data[11])) < 0) ? $tmp_val = 0 : $tmp_val = (&getNumericalOffset($data[10]) - &getNumericalOffset($data[11]));
				$all_stat_replication{$data[0]}{$name}{sent_location} = sprintf("%.2f", ($tmp_val/$interval));
			}
			if (!$data[12]) {
				$all_stat_replication{$data[0]}{$name}{write_location} = 0;
			} else {
				((&getNumericalOffset($data[10]) - &getNumericalOffset($data[12])) < 0) ? $tmp_val = 0 : $tmp_val = (&getNumericalOffset($data[10]) - &getNumericalOffset($data[12]));
				$all_stat_replication{$data[0]}{$name}{write_location} = sprintf("%.2f", ($tmp_val/$interval));
			}
			if (!$data[12]) {
				$all_stat_replication{$data[0]}{$name}{flush_location} = 0;
			} else {
				((&getNumericalOffset($data[10]) - &getNumericalOffset($data[13])) < 0) ? $tmp_val = 0 : $tmp_val = (&getNumericalOffset($data[10]) - &getNumericalOffset($data[13]));
				$all_stat_replication{$data[0]}{$name}{flush_location} = sprintf("%.2f", ($tmp_val/$interval));
			}
			if ($CAPTURE) {
				$all_stat_replication{$data[0]}{$name}{replay_location} = ($data[14] || 0);
				$all_stat_replication{$data[0]}{$name}{sent_location}  = ($data[11] || 0);
				$all_stat_replication{$data[0]}{$name}{write_location} = ($data[12] || 0);
				$all_stat_replication{$data[0]}{$name}{flush_location} = ($data[13] || 0);
			}
			@start_vals = ();
			push(@start_vals, @data);
		}
	}
	$curfh->close();
}

# Compute graphs of replication cluster statistics
sub pg_stat_replication_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %xlog_stat = ();
	foreach my $t (sort {$a <=> $b} keys %all_stat_replication) {
		foreach my $name (sort {$a cmp $b} keys %{$all_stat_replication{$t}}) {
			if ($name eq 'master_location') {
				$all_stat_replication{$t}{master_location} ||= 0;
				$xlog_stat{master_location} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . sprintf("%0.2f", ($all_stat_replication{$t}{master_location}/$interval)) . '],';
				next;
			}
			$xlog_stat{$name}{replay_location} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_replication{$t}{$name}{replay_location} || 0) . '],';
			$xlog_stat{$name}{sent_location} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_replication{$t}{$name}{sent_location} || 0) . '],';
			$xlog_stat{$name}{write_location} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_replication{$t}{$name}{write_location} || 0) . '],';
			$xlog_stat{$name}{flush_location} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_replication{$t}{$name}{flush_location} || 0) . '],';
		}
	}
	%all_stat_replication = ();
	return if (scalar keys %xlog_stat == 0);

	if (!$CAPTURE) {
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
			if (exists $xlog_stat{master_location} && ($data_info{$id}{name} eq 'database-xlog')) {
				$xlog_stat{master_location} =~ s/,$//;
				print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-xlog', \%{$data_info{$id}}, '', $xlog_stat{master_location});
				delete $xlog_stat{master_location};

			} elsif ($data_info{$id}{name} eq 'database-replication') {
				foreach my $host (sort {$a cmp $b} keys %xlog_stat) {
					next if ($host eq 'master_location');
					$xlog_stat{$host}{sent_location} =~ s/,$//;
					$xlog_stat{$host}{write_location} =~ s/,$//;
					$xlog_stat{$host}{flush_location} =~ s/,$//;
					$xlog_stat{$host}{replay_location} =~ s/,$//;
					print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-replication', \%{$data_info{$id}}, $host, $xlog_stat{$host}{sent_location}, $xlog_stat{$host}{write_location}, $xlog_stat{$host}{replay_location});
				}
			}
			$fhcluster->close();
		}
	} else {
		my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
		my $id = &get_data_id('database-replication', %data_info);
		$data_info{$id}{title} =~ s/ with \%s//;
		print $fhcluster qq{
<li class="slide" id="cluster-replication-slide">
      <div id="cluster-replication"><br/><br/><br/><br/></div>
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{title}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="$data_info{$id}{name}-report">
			<div class="span11">
				<table class="table table-striped" id="$data_info{$id}{name}-table">
					<tbody>
					<tr><th>Name</th><th>Master location</th><th>Sent location</th><th>Replay location</th><th>Flushed location</th><th>Write location</th></tr>
};
		foreach my $name (sort {$a cmp $b} keys %xlog_stat) {
			print $fhcluster "<tr><td>$name</td><td>$xlog_stat{$name}{master_location}</td><td>$xlog_stat{$name}{sent_location}</td><td>$xlog_stat{$name}{replay_location}</td><td>$xlog_stat{$name}{flush_location}</td><td>$xlog_stat{$name}{write_location}</td></tr>\n";
		}
		print $fhcluster qq{
					</tbody>
				</table>
			</div>
		</div>
		</div>
	    </div>
	    </div>
	</div>
    </li>
};
		$fhcluster->close();
	}
}

# Compute statistics of pgbouncer
sub pgbouncer_stats
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));
		next if ($data[1] eq 'pgbouncer');

		# timestamp|database|user|cl_active|cl_waiting|sv_active|sv_idle|sv_used|sv_tested|sv_login|maxwait
		$all_pgbouncer_stats{$data[0]}{$data[1]}{$data[2]}{cl_active} += ($data[3] || 0);
		$all_pgbouncer_stats{$data[0]}{$data[1]}{$data[2]}{cl_waiting} += ($data[4] || 0);
		$all_pgbouncer_stats{$data[0]}{$data[1]}{$data[2]}{sv_active} += ($data[5] || 0);
		$all_pgbouncer_stats{$data[0]}{$data[1]}{$data[2]}{sv_idle} += ($data[6] || 0);
		$all_pgbouncer_stats{$data[0]}{$data[1]}{$data[2]}{sv_used} += ($data[7] || 0);
		$all_pgbouncer_stats{$data[0]}{$data[1]}{$data[2]}{sv_tested} += ($data[8] || 0);
		$all_pgbouncer_stats{$data[0]}{$data[1]}{$data[2]}{sv_login} += ($data[9] || 0);
		$all_pgbouncer_stats{$data[0]}{$data[1]}{$data[2]}{maxwait} += ($data[10] || 0);
	}
	$curfh->close();
}

# Compute graphs of pgbouncer statistics
sub pgbouncer_stats_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %pgbouncer_stat = ();
	my %total_pool = ();
	foreach my $t (sort {$a <=> $b} keys %all_pgbouncer_stats) {
		foreach my $db (keys %{$all_pgbouncer_stats{$t}}) {
			foreach my $usr (keys %{$all_pgbouncer_stats{$t}{$db}}) {
				$pgbouncer_stat{"$db/$usr"}{cl_active} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_pgbouncer_stats{$t}{$db}{$usr}{cl_active} || 0) . '],';
				$pgbouncer_stat{"$db/$usr"}{cl_waiting} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_pgbouncer_stats{$t}{$db}{$usr}{cl_waiting} || 0) . '],';
				$pgbouncer_stat{"$db/$usr"}{sv_active} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_pgbouncer_stats{$t}{$db}{$usr}{sv_active} || 0) . '],';
				$pgbouncer_stat{"$db/$usr"}{sv_idle} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_pgbouncer_stats{$t}{$db}{$usr}{sv_idle} || 0) . '],';
				$pgbouncer_stat{"$db/$usr"}{sv_used} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_pgbouncer_stats{$t}{$db}{$usr}{sv_used} || 0) . '],';
				$pgbouncer_stat{"$db/$usr"}{sv_tested} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_pgbouncer_stats{$t}{$db}{$usr}{sv_tested} || 0) . '],';
				$pgbouncer_stat{"$db/$usr"}{sv_login} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_pgbouncer_stats{$t}{$db}{$usr}{sv_login} || 0) . '],';
				$pgbouncer_stat{"$db/$usr"}{maxwait} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_pgbouncer_stats{$t}{$db}{$usr}{maxwait} || 0) . '],';
				$total_pool{$db}{cl_active} += $all_pgbouncer_stats{$t}{$db}{$usr}{cl_active};
				$total_pool{$db}{cl_waiting} += $all_pgbouncer_stats{$t}{$db}{$usr}{cl_waiting};
				$total_pool{$db}{sv_active} += $all_pgbouncer_stats{$t}{$db}{$usr}{sv_active};
				$total_pool{$db}{sv_idle} += $all_pgbouncer_stats{$t}{$db}{$usr}{sv_idle};
				$total_pool{$db}{sv_used} += $all_pgbouncer_stats{$t}{$db}{$usr}{sv_used};
				$total_pool{$db}{sv_tested} += $all_pgbouncer_stats{$t}{$db}{$usr}{sv_tested};
				$total_pool{$db}{sv_login} += $all_pgbouncer_stats{$t}{$db}{$usr}{sv_login};
				$total_pool{$db}{maxwait} += $all_pgbouncer_stats{$t}{$db}{$usr}{maxwait};
			}
			$pgbouncer_stat{$db}{cl_active} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{$db}{cl_active} || 0) . '],';
			$pgbouncer_stat{$db}{cl_waiting} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{$db}{cl_waiting} || 0) . '],';
			$pgbouncer_stat{$db}{sv_active} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{$db}{sv_active} || 0) . '],';
			$pgbouncer_stat{$db}{sv_idle} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{$db}{sv_idle} || 0) . '],';
			$pgbouncer_stat{$db}{sv_used} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{$db}{sv_used} || 0) . '],';
			$pgbouncer_stat{$db}{sv_tested} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{$db}{sv_tested} || 0) . '],';
			$pgbouncer_stat{$db}{sv_login} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{$db}{sv_login} || 0) . '],';
			$pgbouncer_stat{$db}{maxwait} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{$db}{maxwait} || 0) . '],';
#			$total_pool{'all'}{cl_active} += $total_pool{$db}{cl_active};
#			$total_pool{'all'}{cl_waiting} += $total_pool{$db}{cl_waiting};
#			$total_pool{'all'}{sv_active} += $total_pool{$db}{sv_active};
#			$total_pool{'all'}{sv_idle} += $total_pool{$db}{sv_idle};
#			$total_pool{'all'}{sv_used} += $total_pool{$db}{sv_used};
#			$total_pool{'all'}{sv_tested} += $total_pool{$db}{sv_tested};
#			$total_pool{'all'}{sv_login} += $total_pool{$db}{sv_login};
#			$total_pool{'all'}{maxwait} += $total_pool{$db}{maxwait};
			delete $total_pool{$db};
		}
#		$pgbouncer_stat{'all'}{cl_active} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{'all'}{cl_active} || 0) . '],';
#		$pgbouncer_stat{'all'}{cl_waiting} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{'all'}{cl_waiting} || 0) . '],';
#		$pgbouncer_stat{'all'}{sv_active} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{'all'}{sv_active} || 0) . '],';
#		$pgbouncer_stat{'all'}{sv_idle} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{'all'}{sv_idle} || 0) . '],';
#		$pgbouncer_stat{'all'}{sv_used} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{'all'}{sv_used} || 0) . '],';
#		$pgbouncer_stat{'all'}{sv_tested} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{'all'}{sv_tested} || 0) . '],';
#		$pgbouncer_stat{'all'}{sv_login} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{'all'}{sv_login} || 0) . '],';
#		$pgbouncer_stat{'all'}{maxwait} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($total_pool{'all'}{maxwait} || 0) . '],';
	}

	# Build graph dataset for all pgbouncer pool
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		foreach my $db (sort {$a cmp $b} keys %pgbouncer_stat) {
			next if ($db eq 'all');
			next if ($db =~ /\//);
			my $pgbfh = &append_to_html_file("$OUTPUT_DIR/pgbouncer-$db.html", $src_base);
			if ($data_info{$id}{name} eq 'pgbouncer-connections') {
				$pgbouncer_stat{$db}{cl_active} =~ s/,$//;
				$pgbouncer_stat{$db}{cl_waiting} =~ s/,$//;
				$pgbouncer_stat{$db}{sv_active} =~ s/,$//;
				$pgbouncer_stat{$db}{sv_idle} =~ s/,$//;
				$pgbouncer_stat{$db}{sv_used} =~ s/,$//;
				$pgbouncer_stat{$db}{maxwait} =~ s/,$//;
				$pgbfh->print( &jqplot_linegraph_array($IDX++, 'pgbouncer-connections', \%{$data_info{$id}}, $db, $pgbouncer_stat{$db}{cl_active}, $pgbouncer_stat{$db}{cl_waiting}, $pgbouncer_stat{$db}{sv_active}, $pgbouncer_stat{$db}{sv_idle},$pgbouncer_stat{$db}{sv_used}, $pgbouncer_stat{$db}{maxwait}) );
				foreach my $pool (sort {$a cmp $b} keys %pgbouncer_stat) {
					next if ($pool !~ /^$db\//);
					$pgbouncer_stat{$pool}{cl_active} =~ s/,$//;
					$pgbouncer_stat{$pool}{cl_waiting} =~ s/,$//;
					$pgbouncer_stat{$pool}{sv_active} =~ s/,$//;
					$pgbouncer_stat{$pool}{sv_idle} =~ s/,$//;
					$pgbouncer_stat{$pool}{sv_used} =~ s/,$//;
					$pgbouncer_stat{$pool}{maxwait} =~ s/,$//;
					$pgbfh->print( &jqplot_linegraph_array($IDX++, 'pgbouncer-connections+', \%{$data_info{$id}}, $pool, $pgbouncer_stat{$pool}{cl_active}, $pgbouncer_stat{$pool}{cl_waiting}, $pgbouncer_stat{$pool}{sv_active}, $pgbouncer_stat{$pool}{sv_idle},$pgbouncer_stat{$pool}{sv_used}, $pgbouncer_stat{$pool}{maxwait}) );
				}
				$pgbfh->print("</li>\n");
			}
			$pgbfh->close();
		}
	}
}

# Get content of pgbouncer.ini
sub pgbouncer_ini
{
	my ($in_dir, $file) = @_;

	return if (!-e "$in_dir/pgbouncer.ini");

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (my $l = <$curfh>) {
		chomp($l);
		$l =~ s/\r//;
		next if ($l !~ /^[a-z]/);
		$l =~ s/\s*;.*//;
		$all_pgbouncer_ini{content} .= "$l\n";
	}
	$curfh->close();

	return if (!exists $all_pgbouncer_ini{content});

	# Load change on configuration file from diff files
	if (-e "$in_dir/$file.diff") {
		$curfh = open_filehdl("$in_dir/$file.diff");
		my $key = '';
		while (my $l = <$curfh>) {
			chomp($l);
			$l =~ s/\r//;
			next if ($l =~ /^\+\+\+/);
			if ($l =~ /^\-\-\-.*\s(\d+-\d+-\d+ \d+:\d+:\d+)/) {
				$key = $1;
				next;
			}
			if ($key) {
				$all_pgbouncer_ini{$key} .= "$l\n";
			}
		}
		$curfh->close();
	}

}

# Show relevant content of pgbouncer.ini
sub pgbouncer_ini_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $output = "<div style=\"white-space: pre\">\n";
	$output .= $all_pgbouncer_ini{content} || '';
	$output .= "</div>\n";

	my $id = &get_data_id('cluster-pgbouncer', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-pgbouncer-slide">
      <div id="cluster-pgbouncer"><br><br><br><br></div>
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="cluster-pgbouncer-report">
			<div class="span11">
				$output
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};

	delete $all_pgbouncer_ini{content};

	foreach my $k (sort { $b cmp $a } keys %all_pgbouncer_ini) {
		print $fhcluster qq{
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h4>Change on $k</h4>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid">
			<div class="span11">
				<pre>$all_pgbouncer_ini{$k}</pre>
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};
	}
	%all_pgbouncer_ini = ();
	
	print $fhcluster qq{
  </li>
};
	$fhcluster->close();
}

# Collect statistics about pgbouncer queries
sub pgbouncer_req_stats
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));
		next if ($data[1] eq 'pgbouncer');

		# timestamp|database|total_requests|total_received|total_sent|total_query_time|avg_req|avg_recv|avg_sent|avg_query
		$all_pgbouncer_req_stats{$data[0]}{$data[1]}{total_requests} += $data[2];
		$all_pgbouncer_req_stats{$data[0]}{$data[1]}{total_received} += $data[3];
		$all_pgbouncer_req_stats{$data[0]}{$data[1]}{total_sent} += $data[4];
		$all_pgbouncer_req_stats{$data[0]}{$data[1]}{total_query_time} += $data[5];
		$all_pgbouncer_req_stats{$data[0]}{$data[1]}{avg_req} += $data[6];
		$all_pgbouncer_req_stats{$data[0]}{$data[1]}{avg_recv} += $data[7];
		$all_pgbouncer_req_stats{$data[0]}{$data[1]}{avg_sent} += $data[8];
		$all_pgbouncer_req_stats{$data[0]}{$data[1]}{avg_query} += $data[9];
	}
	$curfh->close();
}

# Show report about pgbouncer queries
sub pgbouncer_req_stats_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %pgbouncer_stat = ();
	foreach my $t (sort {$a <=> $b} keys %all_pgbouncer_req_stats) {
		foreach my $db (keys %{$all_pgbouncer_req_stats{$t}}) {
			foreach my $k (keys %{$all_pgbouncer_req_stats{$t}{$db}}) {
				$pgbouncer_stat{$db}{$k} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_pgbouncer_req_stats{$t}{$db}{$k} . '],';
			}
		}
	}
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		foreach my $db (sort {$a cmp $b} keys %pgbouncer_stat) {
			next if ($db eq 'all');
			my $pgbfh = &append_to_html_file("$OUTPUT_DIR/pgbouncer-$db.html", $src_base);
			if ($data_info{$id}{name} eq 'pgbouncer-duration') {
				$pgbouncer_stat{$db}{avg_query} =~ s/,$//;
				$pgbfh->print( &jqplot_linegraph_array($IDX++, 'pgbouncer-duration', \%{$data_info{$id}}, $db, $pgbouncer_stat{$db}{avg_query}) );
			} elsif ($data_info{$id}{name} eq 'pgbouncer-number') {
				$pgbouncer_stat{$db}{avg_req} =~ s/,$//;
				$pgbfh->print( &jqplot_linegraph_array($IDX++, 'pgbouncer-number', \%{$data_info{$id}}, $db, $pgbouncer_stat{$db}{avg_req}) );
			}
			$pgbfh->close();
		}
	}
}

# Compute graphs of object size statistics
sub pg_class_size
{
	my ($in_dir, $file) = @_;

	my $total_val = 0;
	my %table_changed = ();
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));
		if ($data[4] !~ /^[a-zA-Z]$/) {
			print STDERR "WARNING: incompatible type of file pg_class_size.csv, the second field should be the database name\n";
			last;
		}

		# timestamp | dbname | nspname | relname | relkind | reltuples | relpages | relsize
		my $size = $data[6]*8192;
		$size = $data[7] if ($#data == 7);
		$all_class_size{$data[1]}{$data[4]}{"$data[2].$data[3]"}{size} = $size;
		$all_class_size{$data[1]}{$data[4]}{"$data[2].$data[3]"}{tuples} = $data[5];
		if ($data[5] > 0) {
			$all_class_size{$data[1]}{$data[4]}{"$data[2].$data[3]"}{width} = sprintf("%.2f", $size/$data[5]);
		} else {
			$all_class_size{$data[1]}{$data[4]}{"$data[2].$data[3]"}{width} = '-';
		}
	}
	$curfh->close();

}

# Compute graphs of object size statistics
sub pg_class_size_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %data = ();
	foreach my $db (sort keys %all_class_size) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		foreach my $k (sort keys %RELKIND) {
			# Count the number of object
			if (exists $all_class_size{$db}{$k}) {
				$OVERALL_STATS{'class'}{$db}{$k} = scalar keys %{$all_class_size{$db}{$k}};
			} else {
				$OVERALL_STATS{'class'}{$db}{$k} = 0;
			}
		}
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^(table|index)-/);
			# Open filehandle to cluster file
			my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
			if (not defined $fhtable) {
				die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
			}
			&html_header($fhtable, $src_base);
			my $table_header = '';
			my $kind = '';
			if ($data_info{$id}{name} eq 'table-size') {
				$kind = 'tables';
				$table_header = qq{
					<th>Size</th>
					<th>Tuples</th>
					<th>Avg width</th>
};
			} elsif ($data_info{$id}{name} eq 'index-size') {
				$kind = 'indexes';
				$table_header = qq{
					<th>Size</th>
					<th>Tuples</th>
					<th>Avg width</th>
};
			}
			print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database $kind</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
						<th>Object name</th>
						$table_header
					</tr>
				</thead>
				<tbody>
};
			my $found_table_stat = 0;
			foreach my $k (sort keys %{$all_class_size{$db}}) {
				next if (($k ne 't') && ($k ne 'r') && ($data_info{$id}{name} eq 'table-size'));
				next if (($k ne 'i') && ($data_info{$id}{name} eq 'index-size'));
				my $colspan = ' colspan="5"';
				foreach my $tb (sort {$all_class_size{$db}{$k}{$b}{size} <=> $all_class_size{$db}{$k}{$a}{size} } keys %{$all_class_size{$db}{$k}}) {
					next if (!$all_class_size{$db}{$k}{$tb}{size} && !$all_class_size{$db}{$k}{$tb}{tuples});
					next if (($#INCLUDE_TB >= 0) && !grep(/^$tb$/, @INCLUDE_TB));
					my $table_data = '';
					if ($data_info{$id}{name} =~ /^(table|index)-size$/) {
						$found_table_stat = 1;
						foreach ('size','tuples','width') {
							$all_class_size{$db}{$k}{$tb}{$_} ||= 0;
						}
						$table_data = "<tr><th>$tb</th><td>" . &pretty_print_size($all_class_size{$db}{$k}{$tb}{size}) . "</td><td>" . int($all_class_size{$db}{$k}{$tb}{tuples}) . "</td><td>$all_class_size{$db}{$k}{$tb}{width}</td></tr>\n";
					}
					if ($table_data) {
						print $fhtable qq{$table_data} if ($table_data);
					}
				}
				if (!$found_table_stat) {
					print $fhtable qq{<tr><td$colspan><div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div></td></tr>};
				}
			}
			print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
};
			# Terminate cluster statistics file
			print $fhtable qq{
	</div>
	</div>
    </div>
</div>
};
			$fhtable->close;
		}
	}
	
	%all_class_size = ();
}

# Compute graphs of locks statistics
sub pg_stat_locks
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp|database|label|(type|mode|granted)|count
		$data[3] = 'granted' if ($data[3] eq 't');
		$data[3] = 'waiting' if ($data[3] eq 'f');
		$all_stat_locks{$data[0]}{$data[1]}{$data[2]}{$data[3]} += $data[4];
	}
	$curfh->close();
}

# Compute graphs of locks statistics
sub pg_stat_locks_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %locks_stat = ();
	my %legends = ();
	foreach my $t (keys %all_stat_locks) {
		foreach my $db (keys %{$all_stat_locks{$t}}) {
			foreach my $lbl (keys %{$all_stat_locks{$t}{$db}}) {
				push(@{$legends{$db}{$lbl}}, 'waiting') if ( grep(/^waiting$/, @{$legends{$db}{$lbl}}) && (${$legends{$db}{$lbl}}[0] eq 'granted') );
				foreach my $k (@{$legends{$db}{$lbl}}) {
					$locks_stat{$db}{$lbl}{$k} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_stat_locks{$t}{$db}{$lbl}{$k}||0) . '],';
				}
			}
		}
	}
	%all_stat_locks = ();
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		foreach my $db (sort keys %locks_stat) {
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
			my @graph_data = ();
			my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-$db.html", $src_base);
			if ($data_info{$id}{name} eq 'database-lock-types') {
				foreach my $k (sort keys %{$locks_stat{$db}{lock_type}}) {
					$locks_stat{$db}{lock_type}{$k} =~ s/,$//;
					push(@{$data_info{$id}{legends}}, $k);
					push(@graph_data, $locks_stat{$db}{lock_type}{$k});
				}
				$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-lock-types', \%{$data_info{$id}}, $db, @graph_data) );
			} elsif ($data_info{$id}{name} eq 'database-lock-modes') {
				foreach my $k (sort keys %{$locks_stat{$db}{lock_mode}}) {
					$locks_stat{$db}{lock_mode}{$k} =~ s/,$//;
					push(@{$data_info{$id}{legends}}, $k);
					push(@graph_data, $locks_stat{$db}{lock_mode}{$k});
				}
				$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-lock-modes', \%{$data_info{$id}}, $db, @graph_data) );
			} elsif ($data_info{$id}{name} eq 'database-lock-granted') {
				foreach my $k (sort keys %{$locks_stat{$db}{lock_granted}}) {
					$locks_stat{$db}{lock_granted}{$k} =~ s/,$//;
					push(@{$data_info{$id}{legends}}, $k);
					push(@graph_data, $locks_stat{$db}{lock_granted}{$k});
				}
				$dbfh->print( &jqplot_linegraph_array($IDX++, 'database-lock-granted', \%{$data_info{$id}}, $db, @graph_data) );
			}
			$dbfh->close();
		}
	}
}

# Compute statistics about unused index
sub pg_stat_unused_indexes
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);

		# timestamp | dbname | schemaname | relname | indexrelname | index_code
		push(@{$all_stat_unused_indexes{$data[1]}},  [ ($data[2], $data[3], $data[4], $data[5]) ] );
	}
	$curfh->close();
}

# Compute report about unused index
sub pg_stat_unused_indexes_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	my $id = &get_data_id('unused-index', %data_info);
	foreach my $db (sort keys %all_stat_unused_indexes) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		# Open filehandle to cluster file
		my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
		if (not defined $fhtable) {
			die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
		}
		&html_header($fhtable, $src_base);
		print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Schema</th>
					<th>Table</th>
					<th>Index</th>
					<th>Code</th>
					</tr>
				</thead>
				<tbody>
};
		foreach my $r (@{$all_stat_unused_indexes{$db}}) {
			print $fhtable '<tr><td>', join('</td><td>', @$r), "</td></tr>\n";
		}
		print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
	</div>
    </div>
</div>
};
		$fhtable->close;
	}
	%all_stat_unused_indexes = ();
}

# Compute statistics about redundant index
sub pg_stat_redundant_indexes
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);

		# Do not report indexes when one is partial and not the oher one
		next if (grep(/\bWHERE\b/i, $data[2], $data[3]) == 1);
		next if (grep(/\bUNIQUE\b/i, $data[2], $data[3]) >= 1);

		# timestamp | dbname | contained | containing
		push(@{$all_stat_redundant_indexes{$data[1]}}, [ ($data[2], $data[3]) ] );
	}
	$curfh->close();
}

# Compute report about redundant index
sub pg_stat_redundant_indexes_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	my $id = &get_data_id('redundant-index', %data_info);
	foreach my $db (sort keys %all_stat_redundant_indexes) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		# Open filehandle to cluster file
		my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
		if (not defined $fhtable) {
			die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
		}
		&html_header($fhtable, $src_base);
		print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Contained</th>
					<th>Containing</th>
					</tr>
				</thead>
				<tbody>
};
		foreach my $r (@{$all_stat_redundant_indexes{$db}}) {
			print $fhtable '<tr><td>', join('</td><td>', @$r), "</td></tr>\n";
		}
		print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
	</div>
    </div>
</div>
};
		$fhtable->close;
	}
	%all_stat_redundant_indexes = ();
}

# Compute statistics about indexes count
sub pg_stat_count_indexes
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);

		# timestamp | dbname | schema | table | count
		$all_stat_count_indexes{$data[1]}{$data[2]}{$data[3]} = $data[4];
	}
	$curfh->close();
}

# Compute report about table without indexes or with too many indexes
sub pg_stat_count_indexes_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	foreach my $db (sort keys %all_stat_count_indexes) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		my $id = &get_data_id('count-index', %data_info);
		# Open filehandle to cluster file
		my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
		if (not defined $fhtable) {
			die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
		}
		&html_header($fhtable, $src_base);
		print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Schema</th>
					<th>table</th>
					<th>Number of indexes</th>
					</tr>
				</thead>
				<tbody>
};
		foreach my $s (sort keys %{$all_stat_count_indexes{$db}}) {
			foreach my $t (sort keys %{$all_stat_count_indexes{$db}{$s}}) {
				next if ($all_stat_count_indexes{$db}{$s}{$t} < $MAX_INDEXES);
				print $fhtable "<tr><td>$s</td><td>$t</td><td>$all_stat_count_indexes{$db}{$s}{$t}</td></tr>\n";
			}
		}
		print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
	</div>
    </div>
</div>
};

		$id = &get_data_id('zero-index', %data_info);
		print $fhtable qq{
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Schema</th>
					<th>table</th>
					</tr>
				</thead>
				<tbody>
};
		foreach my $s (sort keys %{$all_stat_count_indexes{$db}}) {
			foreach my $t (sort keys %{$all_stat_count_indexes{$db}{$s}}) {
				next if ($all_stat_count_indexes{$db}{$s}{$t} > 0);
				print $fhtable "<tr><td>$s</td><td>$t</td></tr>\n";
			}
		}
		print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
	</div>
    </div>
</div>
};

		$fhtable->close;
	}
	%all_stat_count_indexes = ();
}

# Compute statistics about missing index
sub pg_stat_missing_fkindexes
{
	my ($in_dir, $file) = @_;

	return if ($NO_TB_STAT);

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);

		# timestamp | dbname | relname | ddl
		push(@{$all_stat_missing_fkindexes{$data[1]}}, [ ($data[2], $data[3]) ] );
	}
	$curfh->close();
}

# Compute report about missing index
sub pg_stat_missing_fkindexes_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if ($NO_TB_STAT);

	my $id = &get_data_id('missing-index', %data_info);
	foreach my $db (sort keys %all_stat_missing_fkindexes) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		# Open filehandle to cluster file
		my $fhtable = new IO::File ">$OUTPUT_DIR/$db-$data_info{$id}{name}.html";
		if (not defined $fhtable) {
			die "FATAL: can't write to $OUTPUT_DIR/$db-$data_info{$id}{name}.html, $!\n";
		}
		&html_header($fhtable, $src_base);
		print $fhtable qq{
<ul id="slides">
<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Table</th>
					<th>Missing index</th>
					</tr>
				</thead>
				<tbody>
};
		foreach my $r (@{$all_stat_missing_fkindexes{$db}}) {
			print $fhtable '<tr><td>', join('</td><td>', @$r), "</td></tr>\n";
		}
		print $fhtable qq{
				</tbody>
			</table>
		</div>
	</div>
	</div>
    </div>
</div>
};
		$fhtable->close;
	}
	%all_stat_missing_fkindexes = ();
}

# Get relevant content of postgresql.conf
sub postgresql_conf
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (my $l = <$curfh>) {
		chomp($l);
		$l =~ s/\r//;
		next if ($l !~ /^[a-z]/);
		$l =~ s/\s*#.*//;
		$all_postgresql_conf{content} .= "$l\n";
	}
	$curfh->close();

	return if (!exists $all_postgresql_conf{content});

	# Load change on configuration file from diff files
	if (-e "$in_dir/$file.diff") {
		$curfh = open_filehdl("$in_dir/$file.diff");
		my $key = '';
		while (my $l = <$curfh>) {
			chomp($l);
			$l =~ s/\r//;
			next if ($l =~ /^\+\+\+/);
			if ($l =~ /^\-\-\-.*\s(\d+-\d+-\d+ \d+:\d+:\d+)/) {
				$key = $1;
				next;
			}
			if ($key) {
				$all_postgresql_conf{$key} .= "$l\n";
			}
		}
		$curfh->close();
	}

}

# Show content of postgresql.conf
sub postgresql_conf_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $output = $all_postgresql_conf{content} || '';
	return if (!$output);

	if (!$output) {
		$output = '<div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div>';
	} else {
		$output = "<div style=\"white-space: pre\">\n$output</div>\n";
	}
	my $id = &get_data_id('cluster-pgconf', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-pgconf-slide">
      <div id="cluster-pgconf"><br><br><br><br></div>
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="cluster-pgconf-report">
			<div class="span11">
				$output
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};

	delete $all_postgresql_conf{content};

	foreach my $k (sort { $b cmp $a } keys %all_postgresql_conf) {
		print $fhcluster qq{
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h4>Change on $k</h4>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid">
			<div class="span11">
				<pre>$all_postgresql_conf{$k}</pre>
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};
	}
	%all_postgresql_conf = ();
	
	print $fhcluster qq{
  </li>
};

	$fhcluster->close();
}

# Get relevant content of recovery.conf
sub recovery_conf
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (my $l = <$curfh>) {
		chomp($l);
		$l =~ s/\r//;
		next if ($l !~ /^[a-z]/);
		$l =~ s/\s*#.*//;
		$all_recovery_conf{content} .= "$l\n";
	}
	$curfh->close();

	return if (!exists $all_recovery_conf{content});

	# Load change on configuration file from diff files
	if (-e "$in_dir/$file.diff") {
		$curfh = open_filehdl("$in_dir/$file.diff");
		my $key = '';
		while (my $l = <$curfh>) {
			chomp($l);
			$l =~ s/\r//;
			next if ($l =~ /^\+\+\+/);
			if ($l =~ /^\-\-\-.*\s(\d+-\d+-\d+ \d+:\d+:\d+)/) {
				$key = $1;
				next;
			}
			if ($key) {
				$all_recovery_conf{$key} .= "$l\n";
			}
		}
		$curfh->close();
	}

}

# Show content of recovery.conf
sub recovery_conf_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $output = $all_recovery_conf{content} || '';
	return if (!$output);

	if (!$output) {
		$output = '<div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div>';
	} else {
		$output = "<div style=\"white-space: pre\">\n$output</div>\n";
	}
	my $id = &get_data_id('cluster-recoveryconf', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-recoveryconf-slide">
      <div id="cluster-recoveryconf"><br><br><br><br></div>
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="cluster-ercoveryconf-report">
			<div class="span11">
				$output
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};

	delete $all_recovery_conf{content};

	foreach my $k (sort { $b cmp $a } keys %all_recovery_conf) {
		print $fhcluster qq{
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h4>Change on $k</h4>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid">
			<div class="span11">
				<pre>$all_recovery_conf{$k}</pre>
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};
	}
	%all_recovery_conf = ();
	
	print $fhcluster qq{
  </li>
};
	$fhcluster->close();
}

# Show relevant content of postgresql.auto.conf
sub postgresql_auto_conf
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (my $l = <$curfh>) {
		chomp($l);
		$l =~ s/\r//;
		next if ($l !~ /^[a-z]/);
		$l =~ s/\s*#.*//;
		$all_postgresql_auto_conf{content} .= "$l\n";
	}
	$curfh->close();

	return if (!exists $all_postgresql_auto_conf{content});

	# Load change on configuration file from diff files
	if (-e "$in_dir/$file.diff") {
		$curfh = open_filehdl("$in_dir/$file.diff");
		my $key = '';
		while (my $l = <$curfh>) {
			chomp($l);
			$l =~ s/\r//;
			next if ($l =~ /^\+\+\+/);
			if ($l =~ /^\-\-\-.*\s(\d+-\d+-\d+ \d+:\d+:\d+)/) {
				$key = $1;
				next;
			}
			if ($key) {
				$all_postgresql_auto_conf{$key} .= "$l\n";
			}
		}
		$curfh->close();
	}

}

# Show relevant content of postgresql.auto.conf
sub postgresql_auto_conf_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $output = $all_postgresql_auto_conf{content} || '';
	return if (!$output);

	if (!$output) {
		$output = '<div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div>';
	} else {
		$output = "<div style=\"white-space: pre\">\n$output</div>\n";
	}
	my $id = &get_data_id('cluster-alterconf', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-alterconf-slide">
      <div id="cluster-alterconf"><br><br><br><br></div>
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="cluster-alterconf-report">
			<div class="span11">
				$output
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};

	delete $all_postgresql_auto_conf{content};

	foreach my $k (sort { $b cmp $a } keys %all_postgresql_auto_conf) {
		print $fhcluster qq{
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h4>Change on $k</h4>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid">
			<div class="span11">
				<pre>$all_postgresql_auto_conf{$k}</pre>
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};
	}
	%all_postgresql_auto_conf = ();
	
	print $fhcluster qq{
  </li>
};
	$fhcluster->close();
}

# Get relevant content of pg_hba.conf
sub pg_hba_conf
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (my $l = <$curfh>) {
		chomp($l);
		$l =~ s/\r//;
		next if ($l !~ /^[a-z]/);
		$l =~ s/\s*#.*//;
		$pg_hba_conf{content} .= "$l\n";
	}
	$curfh->close();

	return if (!exists $pg_hba_conf{content});

	# Load change on configuration file from diff files
	if (-e "$in_dir/$file.diff") {
		$curfh = open_filehdl("$in_dir/$file.diff");
		my $key = '';
		while (my $l = <$curfh>) {
			chomp($l);
			$l =~ s/\r//;
			next if ($l =~ /^\+\+\+/);
			if ($l =~ /^\-\-\-.*\s(\d+-\d+-\d+ \d+:\d+:\d+)/) {
				$key = $1;
				next;
			}
			if ($key) {
				$pg_hba_conf{$key} .= "$l\n";
			}
		}
		$curfh->close();
	}

}

# Show content of pg_hba.conf
sub pg_hba_conf_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $output = $pg_hba_conf{content} || '';
	return if (!$output);

	if (!$output) {
		$output = '<div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div>';
	} else {
		$output = "<div style=\"white-space: pre\">\n$output</div>\n";
	}

	my $id = &get_data_id('cluster-pghba', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-pghba-slide">
      <div id="cluster-pghba"><br><br><br><br></div>

	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="cluster-pghba-report">
			<div class="span11">
				$output
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};

	delete $pg_hba_conf{content};

	foreach my $k (sort { $b cmp $a } keys %pg_hba_conf) {
		print $fhcluster qq{
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h4>Change on $k</h4>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid">
			<div class="span11">
				<pre>$pg_hba_conf{$k}</pre>
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};
	}
	%pg_hba_conf = ();
	
	print $fhcluster qq{
  </li>
};
	$fhcluster->close();
}

# Get relevant content of pg_ident.conf
sub pg_ident_conf
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (my $l = <$curfh>) {
		chomp($l);
		$l =~ s/\r//;
		next if ($l !~ /^[a-z]/);
		$l =~ s/\s*#.*//;
		$pg_ident_conf{content} .= "$l\n";
	}
	$curfh->close();

	return if (!exists $pg_ident_conf{content});

	# Load change on configuration file from diff files
	if (-e "$in_dir/$file.diff") {
		$curfh = open_filehdl("$in_dir/$file.diff");
		my $key = '';
		while (my $l = <$curfh>) {
			chomp($l);
			$l =~ s/\r//;
			next if ($l =~ /^\+\+\+/);
			if ($l =~ /^\-\-\-.*\s(\d+-\d+-\d+ \d+:\d+:\d+)/) {
				$key = $1;
				next;
			}
			if ($key) {
				$pg_ident_conf{$key} .= "$l\n";
			}
		}
		$curfh->close();
	}

}

# Show content of pg_ident.conf
sub pg_ident_conf_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $output = $pg_ident_conf{content} || '';
	return if (!$output);

	if (!$output) {
		$output = '<div class="flotr-graph"><blockquote><b>NO DATASET</b></blockquote></div>';
	} else {
		$output = "<div style=\"white-space: pre\">\n$output</div>\n";
	}
	my $id = &get_data_id('cluster-pgident', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-pgident-slide">
      <div id="cluster-pgident"><br><br><br><br></div>

	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="cluster-pgident-report">
			<div class="span11">
				$output
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};

	delete $pg_ident_conf{content};

	foreach my $k (sort { $b cmp $a } keys %pg_ident_conf) {
		print $fhcluster qq{
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h4>Change on $k</h4>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid">
			<div class="span11">
				<pre>$pg_ident_conf{$k}</pre>
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};
	}
	%pg_ident_conf = ();
	
	print $fhcluster qq{
  </li>
};
	$fhcluster->close();
}

# Get configuration from pg_settings
sub pg_settings
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | label | setting | value | unit | context | source | boot_val | reset_val | pending_restart
		$all_settings{$data[1]}{$data[2]}{value} = $data[3];
		$all_settings{$data[1]}{$data[2]}{unit} = '';
		$all_settings{$data[1]}{$data[2]}{bootval} = '';
		$all_settings{$data[1]}{$data[2]}{resetval} = '';
		if ($#data >= 6) {
			$all_settings{$data[1]}{$data[2]}{unit} = $data[4];
			$all_settings{$data[1]}{$data[2]}{bootval} = $data[7];
			$all_settings{$data[1]}{$data[2]}{resetval} = $data[8];
			if ($#data >= 9) {
				$all_settings{$data[1]}{$data[2]}{pending_restart} = $data[9];
			}
		}
	}
	$curfh->close();

	# Load change on pg_settings from diff file
	$file =~ s/\.csv/.diff/;
	if (-e "$in_dir/$file") {
		$curfh = open_filehdl("$in_dir/$file");
		my $key = '';
		while (my $l = <$curfh>) {
			chomp($l);
			$l =~ s/\r//;
			next if (($l =~ /^\+\+\+/) || ($l =~ /^\@\@/));
			if ($l =~ /^\-\-\-.*\s(\d+-\d+-\d+ \d+:\d+:\d+)/) {
				$key = $1;
				next;
			}
			if ($key) {
				$pg_settings_diff{$key} .= "$l\n";
			}
		}
		$curfh->close();
	}

}

# Show configuration from pg_settings
sub pg_settings_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if (scalar keys %all_settings == 0);

	my $id = &get_data_id('cluster-settings', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-settings-slide">
      <div id="cluster-settings"><br><br><br><br></div>

	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="$data_info{$id}{name}-report">
			<div class="span11">
				<table class="table table-striped" id="$data_info{$id}{name}-table">
					<tbody>
};
	foreach my $lbl (sort keys %all_settings) {
		print $fhcluster "<tr><th colspan=\"5\">$lbl</th></tr>\n";
		print $fhcluster "<tr><th>Name</th><th>Current</th><th>Unit</th><th>Reset val</th><th>Boot val</th><th>Pending restart</th></tr>\n";
		foreach my $set (sort { lc($a) cmp lc($b) } keys %{$all_settings{$lbl}}) {
			print $fhcluster "<tr><td>$set</td><td>$all_settings{$lbl}{$set}{value}</td><td>$all_settings{$lbl}{$set}{unit}</td>";
			if ($all_settings{$lbl}{$set}{resetval}) {
				print $fhcluster "<td>$all_settings{$lbl}{$set}{resetval}</td>";
			} else {
				print $fhcluster "<td></td>";
			}
			if ($all_settings{$lbl}{$set}{bootval}) {
				print $fhcluster "<td>$all_settings{$lbl}{$set}{bootval}</td>";
			} else {
				print $fhcluster "<td></td>";
			}
			if (exists $all_settings{$lbl}{$set}{pending_restart}) {
				if ($all_settings{$lbl}{$set}{pending_restart} eq 't') {
					print $fhcluster "<td><b>$all_settings{$lbl}{$set}{pending_restart}</b></td>";
				} else {
					print $fhcluster "<td>$all_settings{$lbl}{$set}{pending_restart}</td>";
				}
			} else {
				print $fhcluster "<td>n/a</td>";
			}
			print $fhcluster "</tr>\n";
		}
	}
	print $fhcluster qq{
					</tbody>
				</table>
			</div>
		</div>
		</div>
	    </div>
	    </div>
	</div>
};

	foreach my $k (sort { $b cmp $a } keys %pg_settings_diff) {
		print $fhcluster qq{
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h4>Change on $k</h4>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid">
			<div class="span11">
				<pre>$pg_settings_diff{$k}</pre>
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};
	}
	%pg_settings_diff = ();
	
	print $fhcluster qq{

    </li>
};
	$fhcluster->close();
	%all_settings = ();
}

# Get non default configuration from pg_settings
sub pg_nondefault_settings
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | label | setting | value
		$all_nondefault_settings{$data[1]}{$data[2]}{value} = $data[3];
		$all_nondefault_settings{$data[1]}{$data[2]}{unit} = '';
		$all_nondefault_settings{$data[1]}{$data[2]}{bootval} = '';
		$all_nondefault_settings{$data[1]}{$data[2]}{resetval} = '';
		if ($#data >= 6) {
			$all_nondefault_settings{$data[1]}{$data[2]}{unit} = $data[4];
			$all_nondefault_settings{$data[1]}{$data[2]}{bootval} = $data[7];
			$all_nondefault_settings{$data[1]}{$data[2]}{resetval} = $data[8];
		}
	}
	$curfh->close();
}

# Show non default configuration from pg_settings
sub pg_nondefault_settings_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if (scalar keys %all_nondefault_settings == 0);

	my $id = &get_data_id('cluster-nondefault-settings', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-nondefault-settings-slide">
      <div id="cluster-nondefault-settings"><br><br><br><br></div>

	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="$data_info{$id}{name}-report">
			<div class="span11">
				<table class="table table-striped" id="$data_info{$id}{name}-table">
					<tbody>
};
	foreach my $lbl (sort keys %all_nondefault_settings) {
		print $fhcluster "<tr><th colspan=\"5\">$lbl</th></tr>\n";
		print $fhcluster "<tr><th>Name</th><th>Current</th><th>Unit</th><th>Reset val</th><th>Boot val</th></tr>\n";
		foreach my $set (sort { lc($a) cmp lc($b) } keys %{$all_nondefault_settings{$lbl}}) {
			print $fhcluster "<tr><td>$set</td><td>$all_nondefault_settings{$lbl}{$set}{value}</td><td>$all_nondefault_settings{$lbl}{$set}{unit}</td>";
			if ($all_nondefault_settings{$lbl}{$set}{resetval}) {
				print $fhcluster "<td>$all_nondefault_settings{$lbl}{$set}{resetval}</td>";
			} else {
				print $fhcluster "<td></td>";
			}
			if ($all_nondefault_settings{$lbl}{$set}{bootval}) {
				print $fhcluster "<td>$all_nondefault_settings{$lbl}{$set}{bootval}</td>";
			} else {
				print $fhcluster "<td></td>";
			}
			print $fhcluster "</tr>\n";
		}
	}
	print $fhcluster qq{
					</tbody>
				</table>
			</div>
		</div>
		</div>
	    </div>
	    </div>
	</div>
    </li>
};
	$fhcluster->close();
	%all_nondefault_settings = ();
}

# Get configuration from pg_db_role_setting
sub pg_db_role_setting
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | database | role | settings
		$data[1] ||= 'All';
		$data[2] ||= 'All';
		$all_db_role_setting{$data[1]}{$data[2]} = $data[3];
	}
	$curfh->close();

	# Load change on pg_settings from diff file
	$file =~ s/\.csv/.diff/;
	if (-e "$in_dir/$file") {
		$curfh = open_filehdl("$in_dir/$file");
		my $key = '';
		while (my $l = <$curfh>) {
			chomp($l);
			$l =~ s/\r//;
			next if (($l =~ /^\+\+\+/) || ($l =~ /^\@\@/));
			if ($l =~ /^\-\-\-.*\s(\d+-\d+-\d+ \d+:\d+:\d+)/) {
				$key = $1;
				next;
			}
			if ($key) {
				$db_role_setting_diff{$key} .= "$l\n";
			}
		}
		$curfh->close();
	}


}

# Show configuration from pg_db_role_setting
sub pg_db_role_setting_report
{
	my ($interval, $src_base, %data_info) = @_;

	return if (scalar keys %all_db_role_setting == 0);

	my $id = &get_data_id('cluster-dbrolesetting', %data_info);
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	print $fhcluster qq{
<li style="display: none;" class="slide" id="cluster-dbrolesetting-slide">
      <div id="cluster-dbrolesetting"><br><br><br><br></div>

	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h2>$data_info{$id}{menu}</h2>
		<p>$data_info{$id}{description}</p>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid" id="$data_info{$id}{name}-report">
			<div class="span11">
				<table class="table table-striped" id="$data_info{$id}{name}-table">
					<tbody>
};
	print $fhcluster "<tr><th>Database</th><th>Role</th><th>Settings</th></tr>\n";
	foreach my $lbl (sort keys %all_db_role_setting) {
		foreach my $set (sort { lc($a) cmp lc($b) } keys %{$all_db_role_setting{$lbl}}) {
			print $fhcluster "<tr><td>$lbl</td><td>$set</td><td>$all_db_role_setting{$lbl}{$set}</td></tr>\n";
		}
	}
	print $fhcluster qq{
					</tbody>
				</table>
			</div>
		</div>
		</div>
	    </div>
	    </div>
	</div>
};

	foreach my $k (sort { $b cmp $a } keys %db_role_setting_diff) {
		print $fhcluster qq{
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
		<h4>Change on $k</h4>
              </div>
              <div class="panel-body">
		<div class="analysis-item row-fluid">
			<div class="span11">
				<pre>$db_role_setting_diff{$k}</pre>
			</div>
		</div>
	      </div>
	      </div>
	    </div>
	</div>
};
	}
	%db_role_setting_diff = ();
	
	print $fhcluster qq{
    </li>
};
	$fhcluster->close();
	%all_db_role_setting = ();
}


# Compute statistics of buffercache database
sub pg_database_buffercache
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# date_trunc | datname | buffers | buffered | buffers % | database %
		$all_database_buffercache{$data[0]}{$data[1]}{shared_buffers_used} = ($data[4]||0);
		$all_database_buffercache{$data[0]}{$data[1]}{database_loaded} = ($data[5]||0);
		$all_database_buffercache{$data[0]}{'all'}{shared_buffers_used} += ($data[4]||0);
		$all_database_buffercache{$data[0]}{'all'}{database_loaded} += ($data[5]||0);
	}
	$curfh->close();
}

# Compute report of buffercache database statistics
sub pg_database_buffercache_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %shared_stat = ();
	foreach my $t (sort keys %all_database_buffercache) {
		foreach my $db (@global_databases) {
			$shared_stat{$db}{shared_buffers_used} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_database_buffercache{$t}{$db}{shared_buffers_used}||0) . '],';
			$shared_stat{$db}{database_loaded} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . ($all_database_buffercache{$t}{$db}{database_loaded}||0) . '],';
		}
	}
	%all_database_buffercache = ();
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		if ($data_info{$id}{name} eq 'cluster-buffersused') {
			my @graph_data = ();
			foreach my $db (sort keys %shared_stat) {
				next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
				push(@{$data_info{$id}{legends}}, "% used by $db");
				$shared_stat{$db}{shared_buffers_used} =~ s/,$//;
				push(@graph_data, $shared_stat{$db}{shared_buffers_used});
			}
			$fhcluster->print( &jqplot_linegraph_array($IDX++, 'cluster-buffersused', \%{$data_info{$id}}, '', @graph_data) );
		} elsif ($data_info{$id}{name} eq 'cluster-databaseloaded') {
			my @graph_data = ();
			foreach my $db (sort keys %shared_stat) {
				next if ($db eq 'all');
				next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
				push(@{$data_info{$id}{legends}}, "% of $db");
				$shared_stat{$db}{database_loaded} =~ s/,$//;
				push(@graph_data, $shared_stat{$db}{database_loaded});
			}
			$fhcluster->print( &jqplot_linegraph_array($IDX++, 'cluster-databaseloaded', \%{$data_info{$id}}, '', @graph_data) );
		}
	}
	$fhcluster->close();
}

# Compute statistics of usagecount in shared buffers
sub pg_database_usagecount
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# date_trunc | datname | usagecount | buffer | buffers %
		$all_database_usagecount{$data[0]}{$data[2]} += ($data[4]||0);
	}
	$curfh->close();
}

# Compute graph of usagecount in shared buffers
sub pg_database_usagecount_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %shared_stat = ();
	foreach my $t (sort keys %all_database_usagecount) {
		foreach my $u (sort keys %{$all_database_usagecount{$t}}) {
			$shared_stat{$u}{usagecount} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_database_usagecount{$t}{$u} . '],';
		}
	}
	%all_database_usagecount = ();
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		if ($data_info{$id}{name} eq 'cluster-usagecount') {
			my @graph_data = ();
			foreach my $u (sort keys %shared_stat) {
				push(@{$data_info{$id}{legends}}, "% of usagecount $u");
				$shared_stat{$u}{usagecount} =~ s/,$//;
				push(@graph_data, $shared_stat{$u}{usagecount});
			}
			$fhcluster->print( &jqplot_linegraph_array($IDX++, 'cluster-usagecount', \%{$data_info{$id}}, '', @graph_data) );
		}
	}
	$fhcluster->close();
}

# Compute statistics of dirty buffer in cache
sub pg_database_isdirty
{
	my ($in_dir, $file) = @_;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# date_trunc | datname | usagecount | isdirty | buffer | buffers %
		$all_database_isdirty{$data[0]}{$data[2]} += $data[5] if ($data[3] eq 't');
	}
	$curfh->close();
}

# Compute graphs of dirty buffer in cache
sub pg_database_isdirty_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %shared_stat = ();
	foreach my $t (sort keys %all_database_isdirty) {
		foreach my $u (sort keys %{$all_database_isdirty{$t}}) {
			$shared_stat{$u}{usagecount} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_database_isdirty{$t}{$u} . '],';
		}
	}
	%all_database_isdirty = ();
	my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		if ($data_info{$id}{name} eq 'cluster-isdirty') {
			my @graph_data = ();
			foreach my $u (sort keys %shared_stat) {
				push(@{$data_info{$id}{legends}}, "% of usagecount $u");
				$shared_stat{$u}{usagecount} =~ s/,$//;
				push(@graph_data, $shared_stat{$u}{usagecount});
			}
			$fhcluster->print( &jqplot_linegraph_array($IDX++, 'cluster-isdirty', \%{$data_info{$id}}, '', @graph_data) );
		}
	}
	$fhcluster->close();
}

# Compute statistics of archiver
sub pg_stat_archiver
{
	my ($in_dir, $file) = @_;

	my @start_vals = ();
	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		# timestamp | archived_count | last_archived_wal | last_archived_time | failed_count | last_failed_wal | last_failed_time | stats_reset
                push(@start_vals, @data) if ($#start_vals < 0);

		# Get archiver size statistics
		my $tmp_val = '';
                (($data[1] - $start_vals[1]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[1] - $start_vals[1]);
		$all_stat_archiver{$data[0]}{archived_count} = $tmp_val;
                (($data[4] - $start_vals[4]) < 0) ? $tmp_val = 0 : $tmp_val = ($data[4] - $start_vals[4]);
		$all_stat_archiver{$data[0]}{failed_count} = $tmp_val;
		$all_stat_archiver{$data[0]}{last_archived_wal} = $data[2];
		$data[3] =~ s/\..*//;
		$all_stat_archiver{$data[0]}{last_archived_time} = $data[3];
		$all_stat_archiver{$data[0]}{last_failed_wal} = $data[5];
		$data[6] =~ s/\..*//;
		$all_stat_archiver{$data[0]}{last_failed_time} = $data[6];
		$data[7] =~ s/\..*//;
		$all_stat_archiver{$data[0]}{stats_reset} = $data[7];

		@start_vals = ();
		push(@start_vals, @data);
	}
	$curfh->close();
}

# Compute graphs of archiver statistics
sub pg_stat_archiver_report
{
	my ($interval, $src_base, %data_info) = @_;

	my %archiver_stat = ();
	foreach my $t (sort {$a <=> $b} keys %all_stat_archiver) {
		$archiver_stat{archived_count} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_archiver{$t}{archived_count}. '],';
		$archiver_stat{failed_count} .= '[' . ($t - ($STATS_TIMEZONE*3600*1000)) . ',' . $all_stat_archiver{$t}{failed_count}. '],';
		if (!$OVERALL_STATS{'archiver'}{last_archived_time} || ($all_stat_archiver{$t}{last_archived_time} gt $OVERALL_STATS{'archiver'}{last_archived_time})) {
			$OVERALL_STATS{'archiver'}{last_archived_wal} = $all_stat_archiver{$t}{last_archived_wal};
			$OVERALL_STATS{'archiver'}{last_archived_time} = $all_stat_archiver{$t}{last_archived_time};
		}
		if (!$OVERALL_STATS{'archiver'}{last_failed_time} || ($all_stat_archiver{$t}{last_failed_time} gt $OVERALL_STATS{'archiver'}{last_failed_time})) {
			$OVERALL_STATS{'archiver'}{last_failed_wal} = $all_stat_archiver{$t}{last_failed_wal};
			$OVERALL_STATS{'archiver'}{last_failed_time} = $all_stat_archiver{$t}{last_failed_time};
		}
		if (!$OVERALL_STATS{'archiver'}{stats_reset} || ($all_stat_archiver{$t}{stats_reset} gt $OVERALL_STATS{'archiver'}{stats_reset})) {
			$OVERALL_STATS{'archiver'}{stats_reset} = $all_stat_archiver{$t}{stats_reset};
		}

	}
	%all_stat_archiver = ();
	foreach my $id (sort {$a <=> $b} keys %data_info) {
		if ($data_info{$id}{name} eq 'cluster-archive') {
			my $fhcluster = &append_to_html_file("$OUTPUT_DIR/cluster.html", $src_base);
			print $fhcluster &jqplot_linegraph_array($IDX++, 'cluster-archive', \%{$data_info{$id}}, '', $archiver_stat{archived_count}, $archiver_stat{failed_count});
			$fhcluster->close();
		}
	}
}

# Compute graphs of statements statistics
sub pg_stat_statements
{
	my ($in_dir, $file) = @_;

	my $total_val = 0;
	my @start_vals = ();
	my $has_temp = 0;

	# Load data from file
	my $curfh = open_filehdl("$in_dir/$file");
	while (<$curfh>) {
		my @data = split(/;/);
		next if (!&normalize_line(\@data));

		next if (($#INCLUDE_DB >= 0) && (!grep($data[2] =~ /^$_$/, @INCLUDE_DB)));

		# pg 8.4
		# timestamp | userid | datname | query | calls | total_time | rows
		# pg 9.0-9.1
		# timestamp | userid | datname | query | calls | total_time | rows | shared_blks_hit | shared_blks_read | shared_blks_written | local_blks_hit | local_blks_read | local_blks_written | temp_blks_read | temp_blks_written
		# pg 9.2+
		# timestamp | userid | datname | query | calls | total_time | rows | shared_blks_hit | shared_blks_read | shared_blks_dirtied | shared_blks_written | local_blks_hit | local_blks_read | local_blks_dirtied | local_blks_written | temp_blks_read | temp_blks_written | blk_read_time | blk_write_time |

		my $id = 3;
		#$id++ if ($#data == 20);
		next if (!$data[$id]);

		$all_stat_statements{$data[2]}{$data[$id]}{calls} += ($data[$id+1] || 0);
		$all_stat_statements{$data[2]}{$data[$id]}{total_time} += ($data[$id+2] || 0);
		$all_stat_statements{$data[2]}{$data[$id]}{rows} += ($data[$id+3] || 0);
		if ($#data > 6) {
			$all_stat_statements{$data[2]}{$data[$id]}{shared_blks_hit} += $data[$id+4];
			$all_stat_statements{$data[2]}{$data[$id]}{shared_blks_read} += $data[$id+5];
			if ($#data < 18) {
				$all_stat_statements{$data[2]}{$data[$id]}{shared_blks_written} += $data[$id+6];
				$all_stat_statements{$data[2]}{$data[$id]}{local_blks_hit} += $data[$id+7];
				$all_stat_statements{$data[2]}{$data[$id]}{local_blks_read} += $data[$id+8];
				$all_stat_statements{$data[2]}{$data[$id]}{local_blks_written} += $data[$id+9];
				$all_stat_statements{$data[2]}{$data[$id]}{temp_blks_read} += $data[$id+10];
				$all_stat_statements{$data[2]}{$data[$id]}{temp_blks_written} += $data[$id+11];
				# This is just a flag, the total_time key is not used but must exists to not generate
				# error on use of unitialised value later. This is ugly but useful
				$all_stat_statements{$data[2]}{has_temp}{total_time} = 1;
			} else {
				$all_stat_statements{$data[2]}{$data[$id]}{shared_blks_dirtied} += ($data[$id+6]*8192);
				$all_stat_statements{$data[2]}{$data[$id]}{shared_blks_written} += $data[$id+7];
				$all_stat_statements{$data[2]}{$data[$id]}{local_blks_hit} += $data[$id+8];
				$all_stat_statements{$data[2]}{$data[$id]}{local_blks_read} += $data[$id+9];
				$all_stat_statements{$data[2]}{$data[$id]}{local_blks_dirtied} += $data[$id+10];
				$all_stat_statements{$data[2]}{$data[$id]}{local_blks_written} += $data[$id+11];
				$all_stat_statements{$data[2]}{$data[$id]}{temp_blks_read} += ($data[$id+12]*8192);
				$all_stat_statements{$data[2]}{$data[$id]}{temp_blks_written} += ($data[$id+13]*8192);
				$all_stat_statements{$data[2]}{$data[$id]}{blk_read_time} += $data[$id+14];
				$all_stat_statements{$data[2]}{$data[$id]}{blk_write_time} += $data[$id+15];
				# This is just a flag, the total_time key is not used but must exists to not generate
				# error on use of unitialised value later. This is ugly but useful
				$all_stat_statements{$data[2]}{has_temp}{total_time} = 2;
				if ($data[$id+14] || $data[$id+15]) {
					$all_stat_statements{$data[2]}{has_temp}{total_time} = 3;
				}
			}
		}

	}
	$curfh->close();
}

# Compute graphs of statements statistics
sub pg_stat_statements_report
{
	my ($interval, $src_base, %data_info) = @_;

	my $id = &get_data_id('database-queries', %data_info);
	foreach my $db (keys %all_stat_statements) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		my $header = '';
		if (exists $all_stat_statements{$db}{has_temp}) {
			$header = qq{<th>Temp blocks written</th>};
		}
		if ($all_stat_statements{$db}{has_temp}{total_time} >= 2) {
			$header .= qq{<th>Blocks read</th><th>Blocks hit</th><th>Blocks dirtied</th><th>Blocks written</th>};
		}
		if ($all_stat_statements{$db}{has_temp}{total_time} == 3) {
			$header .= qq{<th>I/O time</th>};
		}
		my $dbfh = &append_to_html_file("$OUTPUT_DIR/database-queries-$db.html", $src_base);
		$dbfh->print (qq{
<li class="slide" id="database-queries-slide">
<div id="database-queries"><br/><br/><br/><br/></div>

<div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
      <div class="panel-heading">
	<h2>$data_info{$id}{menu} on $db database</h2>
	<p>$data_info{$id}{description}</p>
      </div>
      <div class="panel-body">
	<div class="analysis-item row-fluid" id="$db-$data_info{$id}{name}">
		<div class="span11">
			<table class="table table-striped sortable" id="$db-$data_info{$id}{name}-table">
				<thead>
					<tr>
					<th>Query</th>
					<th>Calls</th>
					<th>Avg time</th>
					<th>Total time</th>
					<th>Rows</th>
					$header
					</tr>
				</thead>
				<tbody>
});
			foreach my $q (sort {$all_stat_statements{$db}{$b}{total_time} <=> $all_stat_statements{$db}{$a}{total_time}} keys %{$all_stat_statements{$db}}) {
				next if ($q eq 'has_temp');
				my $additional_cols = '';
				if (exists $all_stat_statements{$db}{has_temp}) {
					$additional_cols = "<td>" .  &pretty_print_number($all_stat_statements{$db}{$q}{temp_blks_written}) . "</td>";
				}
				if ($all_stat_statements{$db}{has_temp}{total_time} >= 2) {
					$additional_cols .= "<td>" . &pretty_print_number($all_stat_statements{$db}{$q}{shared_blks_read}) . "</td><td>" . &pretty_print_number($all_stat_statements{$db}{$q}{shared_blks_hit}) . "</td><td>" . &pretty_print_number($all_stat_statements{$db}{$q}{shared_blks_dirtied}) . "</td><td>" . &pretty_print_number($all_stat_statements{$db}{$q}{shared_blks_written}) . "</td>";
				}
				if ($all_stat_statements{$db}{has_temp}{total_time} == 3) {
					$additional_cols .= "<td>" . sprintf("%0.2d", ($all_stat_statements{$db}{$q}{blk_read_time}+$all_stat_statements{$db}{$q}{blk_write_time})/($all_stat_statements{$db}{$q}{calls}||1)) . "</td>";
				}
				my $query = $q;
				$query =~ s/#SMCLN#/;/g;
				$dbfh->print( "<tr><th width=\"50%\">$query</th><td>$all_stat_statements{$db}{$q}{calls}</td><td>" . &format_duration(int($all_stat_statements{$db}{$q}{total_time}/($all_stat_statements{$db}{$q}{calls}||1))) . "</td><td>" . &format_duration($all_stat_statements{$db}{$q}{total_time}) . "</td><td>$all_stat_statements{$db}{$q}{rows}</td>$additional_cols</tr>\n");
			}
			$dbfh->print( qq{
				</tbody>
			</table>
		</div>
	</div>
	</div>
    </div>
</div>
</div>
</li>
});
		$dbfh->close();
	}
	%all_stat_statements = ();

}

sub normalize_line
{
	my $data = shift;

	# Get position of the database name
	my $pos  = shift;
	$pos ||= 2;

	return 0 if ($data->[0] !~ /^\d+/);

	$data->[0] = &convert_time($data->[0]);

	# Skip unwanted lines
	return 0 if ($BEGIN && ($data->[0] < $BEGIN));
	return 0 if ($END   && ($data->[0] > $END));

	chomp($data->[-1]);
	map { s/,/\./g; s/^$/0/; } @$data;

	# Always skip default template database
	return 0 if ($data->[$pos] =~ /template/);

	return 1;
}

sub pretty_print_size
{
        my $val = shift;
        return 0 if (!$val);

        if ($val >= 1125899906842624) {
                $val = ($val / 1125899906842624);
                $val = sprintf("%0.2f", $val) . " PB";
        } elsif ($val >= 1099511627776) {
                $val = ($val / 1099511627776);
                $val = sprintf("%0.2f", $val) . " TB";
        } elsif ($val >= 1073741824) {
                $val = ($val / 1073741824);
                $val = sprintf("%0.2f", $val) . " GB";
        } elsif ($val >= 1048576) {
                $val = ($val / 1048576);
                $val = sprintf("%0.2f", $val) . " MB";
        } elsif ($val >= 1024) {
                $val = ($val / 1024);
                $val = sprintf("%0.2f", $val) . " KB";
        } else {
                $val = $val . " B";
        }

        return $val;
}

sub pretty_print_number
{
        my $val = shift;
        return 0 if (!$val);

	if ($val >= 1000000000000000) {
		$val = ($val / 1000000000000000);
		$val = sprintf("%0.2f", $val) . " P";
	} elsif ($val >= 1000000000000) {
		$val = ($val / 1000000000000);
		$val = sprintf("%0.2f", $val) . " T";
	} elsif ($val >= 1000000000) {
		$val = ($val / 1000000000);
		$val = sprintf("%0.2f", $val) . " G";
	} elsif ($val >= 1000000) {
		$val = ($val / 1000000);
		$val = sprintf("%0.2f", $val) . " M";
	} elsif ($val >= 1000) {
		$val = ($val / 1000);
		$val = sprintf("%0.2f", $val) . " K";
	}

	return $val;
}

sub generate_html_index
{
	my $in_dir = shift;
	my $src_base = shift;

	my $fh = new IO::File ">$OUTPUT_DIR/index.html";
	if (not defined $fh) {
		die "FATAL: can't write to $OUTPUT_DIR/index.html, $!\n";
	}

	&html_header($fh, $src_base);

	# Compute global statistics for home page dashboard
	my %overall_stat_databases = ();
	if ($CAPTURE || exists $OVERALL_STATS{'cluster'}) {
		$OVERALL_STATS{'cluster'}{'blks_hit'} ||= 0;
		$OVERALL_STATS{'cluster'}{'blks_read'} ||= 0;
		$OVERALL_STATS{'cluster'}{'cache_ratio'} = sprintf("%3d", ($OVERALL_STATS{'cluster'}{'blks_hit'} * 100) / (($OVERALL_STATS{'cluster'}{'blks_read'} + $OVERALL_STATS{'cluster'}{'blks_hit'}) || 1)) . "%";
		$OVERALL_STATS{'cluster'}{'temp_bytes'} = &pretty_print_size($OVERALL_STATS{'cluster'}{'temp_bytes'});
		foreach my $db (keys %{$OVERALL_STATS{'database'}}) {
			next if ($db eq 'all');
			$OVERALL_STATS{'database'}{$db}{'blks_hit'} ||= 0;
			$OVERALL_STATS{'database'}{$db}{'blks_read'} ||= 0;
			$OVERALL_STATS{'database'}{$db}{'blks_hit'} ||= 0;
			$OVERALL_STATS{'database'}{$db}{'cache_ratio'} = sprintf("%3d", ($OVERALL_STATS{'database'}{$db}{'blks_hit'} * 100) / (($OVERALL_STATS{'database'}{$db}{'blks_read'} + $OVERALL_STATS{'database'}{$db}{'blks_hit'}) || 1));
		}
		foreach my $db (keys %{$OVERALL_STATS{'database'}}) {
			next if ($db eq 'all');
			$OVERALL_STATS{'cluster'}{'size'} += ($OVERALL_STATS{'database'}{$db}{'size'}||0);
			next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
			if (exists $OVERALL_STATS{'database'}{$db}{'size'}) {
				if (!exists $overall_stat_databases{'size'} || $OVERALL_STATS{'database'}{$db}{'size'} > $overall_stat_databases{'size'}[1]) {
					@{$overall_stat_databases{'size'}} = ($db, $OVERALL_STATS{'database'}{$db}{'size'});
				}
			}
			if (exists $OVERALL_STATS{'database'}{$db}{'nbackend'}) {
				if (!exists $overall_stat_databases{'nbackend'} || ($OVERALL_STATS{'database'}{$db}{'nbackend'} > $overall_stat_databases{'nbackend'}[1])) {
					@{$overall_stat_databases{'nbackend'}} = ($db, $OVERALL_STATS{'database'}{$db}{'nbackend'});
				}
			}
			if (exists $OVERALL_STATS{'database'}{$db}{'returned'}) {
				if (!exists $overall_stat_databases{'returned'} || $OVERALL_STATS{'database'}{$db}{'returned'} > $overall_stat_databases{'returned'}[1]) {
					@{$overall_stat_databases{'returned'}} = ($db, $OVERALL_STATS{'database'}{$db}{'returned'});
				}
			}
			if (exists $OVERALL_STATS{'database'}{$db}{'temp_files'}) {
				if (!exists $overall_stat_databases{'temp_files'} || $OVERALL_STATS{'database'}{$db} {'temp_files'} > $overall_stat_databases{'temp_files'}[1]) {
					@{$overall_stat_databases{'temp_files'}} = ($db, $OVERALL_STATS{'database'}{$db}{'temp_files'});
				}
			}
			if (exists $OVERALL_STATS{'database'}{$db}{'temp_bytes'}) {
				if (!exists $overall_stat_databases{'temp_bytes'} || $OVERALL_STATS{'database'}{$db}{'temp_bytes'} > $overall_stat_databases{'temp_bytes'}[1]) {
					@{$overall_stat_databases{'temp_bytes'}} = ($db, $OVERALL_STATS{'database'}{$db}{'temp_bytes'});
				}
			}
			if (exists $OVERALL_STATS{'database'}{$db}{'deadlocks'}) {
				if (!exists $overall_stat_databases{'deadlocks'} || $OVERALL_STATS{'database'}{$db}{'deadlocks'} > $overall_stat_databases{'deadlocks'}[1]) {
					@{$overall_stat_databases{'deadlocks'}} = ($db, $OVERALL_STATS{'database'}{$db}{'deadlocks'});
				}
			}
			if (exists $OVERALL_STATS{'database'}{$db}{'cache_ratio'}) {
				if (!exists $overall_stat_databases{'cache_ratio'} || $OVERALL_STATS{'database'}{$db}{'cache_ratio'} < $overall_stat_databases{'cache_ratio'}[1]) {
					@{$overall_stat_databases{'cache_ratio'}} = ($db, $OVERALL_STATS{'database'}{$db}{'cache_ratio'});
				}
			}
		}
		@{$overall_stat_databases{'size'}} = ('unknown', 0) if (!exists $overall_stat_databases{'size'});
		if (exists $overall_stat_databases{'size'}) {
			$overall_stat_databases{'size'}[1] = &pretty_print_size($overall_stat_databases{'size'}[1]);
		}
		if (exists $overall_stat_databases{'temp_bytes'}) {
			$overall_stat_databases{'temp_bytes'}[1] = &pretty_print_size($overall_stat_databases{'temp_bytes'}[1]);
		}
	}

	my %overall_system_stats = ();
	if (!$DISABLE_SAR) {
		if (!exists $OVERALL_STATS{'system'}{'cpu'}) {
			@{$OVERALL_STATS{'system'}{'cpu'}} = ('unknown', 0);
		} elsif (${$OVERALL_STATS{'system'}{'cpu'}}[0] !~ /\D/) {
			${$OVERALL_STATS{'system'}{'cpu'}}[0] = localtime(${$OVERALL_STATS{'system'}{'cpu'}}[0]/1000);
		}
		if (!exists $OVERALL_STATS{'system'}{'load'}) {
			@{$OVERALL_STATS{'system'}{'load'}} = ('unknown', 0);
		} elsif (${$OVERALL_STATS{'system'}{'load'}}[0] !~ /\D/) {
			${$OVERALL_STATS{'system'}{'load'}}[0] = localtime(${$OVERALL_STATS{'system'}{'load'}}[0]/1000);
		}
		if (!exists $OVERALL_STATS{'system'}{'kbcached'}) {
			@{$OVERALL_STATS{'system'}{'kbcached'}} = ('unknown', 0);
		} elsif (${$OVERALL_STATS{'system'}{'kbcached'}}[0] !~ /\D/) {
			${$OVERALL_STATS{'system'}{'kbcached'}}[0] = localtime(${$OVERALL_STATS{'system'}{'kbcached'}}[0]/1000);
		}
		if (!exists $OVERALL_STATS{'system'}{'bread'}) {
			@{$OVERALL_STATS{'system'}{'bread'}} = ('unknown', 0);
		} elsif (${$OVERALL_STATS{'system'}{'bread'}}[0] !~ /\D/) {
			${$OVERALL_STATS{'system'}{'bread'}}[0] = localtime(${$OVERALL_STATS{'system'}{'bread'}}[0]/1000);
		}
		if (!exists $OVERALL_STATS{'system'}{'bwrite'}) {
			@{$OVERALL_STATS{'system'}{'bwrite'}} = ('unknown', 0);
		} elsif (${$OVERALL_STATS{'system'}{'bwrite'}}[0] !~ /\D/) {
			${$OVERALL_STATS{'system'}{'bwrite'}}[0] = localtime(${$OVERALL_STATS{'system'}{'bwrite'}}[0]/1000);
		}
		if (!exists $OVERALL_STATS{'system'}{'svctm'}) {
			@{$OVERALL_STATS{'system'}{'svctm'}} = ('unknown', 0, 'unknown');
		} elsif (${$OVERALL_STATS{'system'}{'svctm'}}[0] !~ /\D/) {
			${$OVERALL_STATS{'system'}{'svctm'}}[0] = localtime(${$OVERALL_STATS{'system'}{'svctm'}}[0]/1000);
		}
		if (exists $OVERALL_STATS{'system'}{'devices'}) {
			foreach my $d (keys %{$OVERALL_STATS{'system'}{'devices'}}) {
				if (! exists $overall_system_stats{read} || ($overall_system_stats{read}[1] < $OVERALL_STATS{'system'}{'devices'}{$d}{read})) {
					@{$overall_system_stats{read}} = ($d, $OVERALL_STATS{'system'}{'devices'}{$d}{read});
				}
				if (! exists $overall_system_stats{write} || ($overall_system_stats{write}[1] < $OVERALL_STATS{'system'}{'devices'}{$d}{write})) {
					@{$overall_system_stats{write}} = ($d, $OVERALL_STATS{'system'}{'devices'}{$d}{write});
				}
				if (! exists $overall_system_stats{tps} || ($overall_system_stats{tps}[1] < $OVERALL_STATS{'system'}{'devices'}{$d}{tps})) {
					@{$overall_system_stats{tps}} = ($d, $OVERALL_STATS{'system'}{'devices'}{$d}{tps});
				}
			}
		}
		if (!exists $overall_system_stats{read}) {
			@{$overall_system_stats{read}} = ('unknown', 0);
		}
		if (!exists $overall_system_stats{write}) {
			@{$overall_system_stats{write}} = ('unknown', 0);
		}
		if (!exists $overall_system_stats{tps}) {
			@{$overall_system_stats{tps}} = ('unknown', 0);
		}
		$overall_system_stats{tps}[1] = ($overall_system_stats{tps}[1]||0);
		$overall_system_stats{read}[1] = &pretty_print_size($overall_system_stats{read}[1]);
		$overall_system_stats{write}[1] = &pretty_print_size($overall_system_stats{write}[1]);
		@{$overall_system_stats{kbcached}} =  ($OVERALL_STATS{'system'}{'kbcached'}[0], &pretty_print_size($OVERALL_STATS{'system'}{'kbcached'}[1]));
		@{$overall_system_stats{bread}} =  ($OVERALL_STATS{'system'}{'bread'}[0], &pretty_print_size($OVERALL_STATS{'system'}{'bread'}[1]));
		@{$overall_system_stats{bwrite}} =  ($OVERALL_STATS{'system'}{'bwrite'}[0], &pretty_print_size($OVERALL_STATS{'system'}{'bwrite'}[1]));

	}

	my $numcol = 4;
	if ($DISABLE_SAR) {
		$numcol = 6;
	} elsif (!exists $OVERALL_STATS{'system'}) {
		$numcol = 12;
	}
	print $fh <<EOF;
<ul id="slides">
<li class="slide active-slide" id="home-slide">
    <div id="home"><br/><br/><br/><br/></div>
EOF
	my $tz = ((0-$STATS_TIMEZONE)*3600);
	if (exists $OVERALL_STATS{'start_date'}) {
		$OVERALL_STATS{'start_date'} = ($OVERALL_STATS{'start_date'}/1000) + $tz;
		$OVERALL_STATS{'end_date'}   = ($OVERALL_STATS{'end_date'}/1000) + $tz;
	}
	my $start_date = gmtime($OVERALL_STATS{'start_date'}||0) || 'Unknown start date';
	my $end_date = gmtime($OVERALL_STATS{'end_date'}||0) || 'Unknown end date';
	if (exists $OVERALL_STATS{'sar_start_date'}) {
		$OVERALL_STATS{'sar_start_date'} = ($OVERALL_STATS{'sar_start_date'}/1000) + $tz;
		$OVERALL_STATS{'sar_end_date'}   = ($OVERALL_STATS{'sar_end_date'}/1000) + $tz;
	}
	my $sar_start_date = gmtime($OVERALL_STATS{'sar_start_date'}||0) || 'Unknown start date';
	my $sar_end_date = gmtime($OVERALL_STATS{'sar_end_date'}||0) || 'Unknown end date';

	if (exists $OVERALL_STATS{'cluster'}) {
		$OVERALL_STATS{'cluster'}{'size'} ||= 0;
		$OVERALL_STATS{'cluster'}{'nbackend'} ||= 0;
		$OVERALL_STATS{'cluster'}{'returned'} ||= 0;
		$OVERALL_STATS{'cluster'}{'cache_ratio'} ||= 0;
		$OVERALL_STATS{'cluster'}{'temp_files'} ||= 0;
		$OVERALL_STATS{'cluster'}{'temp_bytes'} ||= 0;
		$OVERALL_STATS{'cluster'}{'deadlocks'} ||= 0;
		my $temp_file_info = '';
		if ($OVERALL_STATS{'cluster'}{'temp_files'}) {
			$temp_file_info = qq{
		<li><span class="figure">$OVERALL_STATS{'cluster'}{'temp_files'}</span> <span class="figure-label">Temporary files</span></li>
		<li><span class="figure">$OVERALL_STATS{'cluster'}{'temp_bytes'}</span> <span class="figure-label">Temporary files size</span></li>
};
		}
		my $deadlock_info = '';
		if (exists $OVERALL_STATS{'cluster'}{'deadlocks'}) {
			$deadlock_info = qq{
		<li><span class="figure">$OVERALL_STATS{'cluster'}{'deadlocks'}</span> <span class="figure-label">Deadlocks</span></li>
};
		}
		my $extnum = $#{$OVERALL_STATS{'cluster'}{'extensions'}} + 1;
		my $extensions_info = '';
		if ($extnum) {
			my $extlist = join(', ', @{$OVERALL_STATS{'cluster'}{'extensions'}});
			$extensions_info = qq{<li><span class="figure">$extnum</span> <span class="figure-label">Extensions ($extlist)</span></li>};
		}
		$sysinfo{PGVERSION}{'full_version'} ||= '';
		$sysinfo{PGVERSION}{'uptime'} ||= '';
		my $database_number = scalar keys %{$OVERALL_STATS{'database'}};
		$OVERALL_STATS{'cluster'}{'size'} ||= '-';
		$OVERALL_STATS{'cluster'}{'nbackend'} ||= '-';
		$OVERALL_STATS{'cluster'}{'returned'} ||= '-';
		$OVERALL_STATS{'cluster'}{'cache_ratio'} ||= '-';
		my $bgwriter_reset = '';
		if (exists $OVERALL_STATS{'bgwriter'}{stats_reset}) {
			$bgwriter_reset = "<li><span class=\"figure\"> $OVERALL_STATS{'bgwriter'}{stats_reset}</span> <span class=\"figure-label\">Last bgwriter stats reset</span></li>";
		}
		my $cluster_size = &pretty_print_size($OVERALL_STATS{'cluster'}{'size'});
		$OVERALL_STATS{'cluster'}{invalid_indexes} ||= 0;
		my $invalid_dblist = '';
		if (exists $OVERALL_STATS{'cluster'}{invalid_indexes_db}) {
			$invalid_dblist = ' (' . join(', ', @{$OVERALL_STATS{'cluster'}{invalid_indexes_db}}) . ')';
		}
		$OVERALL_STATS{'cluster'}{hash_indexes} ||= 0;
		my $hash_dblist = '';
		if (exists $OVERALL_STATS{'cluster'}{hash_indexes_db}) {
			$hash_dblist = ' (' . join(', ', @{$OVERALL_STATS{'cluster'}{hash_indexes_db}}) . ')';
		}
		print $fh <<EOF;
      <div class="row">
            <div class="col-md-$numcol">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-cogs fa-2x pull-left fa-border"></i><h2>Cluster</h2>
              </div>
              <div class="panel-body panel-xlheight">
		<div class="key-figures">
		<span class="figure-date">$start_date to $end_date</span>
		<ul>
		<li></li>
		<li><span class="figure">$cluster_size</span> <span class="figure-label">Cluster size</span></li>
		<li><span class="figure">$database_number</span> <span class="figure-label">Databases</span></li>
		<li><span class="figure">$OVERALL_STATS{'cluster'}{'nbackend'}</span> <span class="figure-label">Connections</span></li>
		<li><span class="figure">$OVERALL_STATS{'cluster'}{'returned'}</span> <span class="figure-label">Tuples returned</span></li>
		<li><span class="figure">$OVERALL_STATS{'cluster'}{'cache_ratio'}</span> <span class="figure-label">Hit cache ratio</span></li>
		<li><span class="figure">$OVERALL_STATS{'cluster'}{'invalid_indexes'}</span> <span class="figure-label">Invalid indexes$invalid_dblist</span></li>
		<li><span class="figure">$OVERALL_STATS{'cluster'}{'hash_indexes'}</span> <span class="figure-label">Hash indexes$hash_dblist</span></li>
		$temp_file_info
		$deadlock_info
		$extensions_info
		$bgwriter_reset
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
EOF
		# Perform some initialization in case
		print $fh <<EOF;
            <div class="col-md-$numcol">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-th fa-2x pull-left fa-border"></i><h2>Databases</h2>
              </div>
              <div class="panel-body panel-xlheight">
		<div class="key-figures">
		<ul>
		<li></li>
EOF
		if (exists $overall_stat_databases{'size'}) {
			print $fh <<EOF;
		<li><span class="figure">$overall_stat_databases{'size'}[1]</span> <span class="figure-label">Largest database</span><br/><span class="figure-date">($overall_stat_databases{'size'}[0])</span></li>
EOF
		}
		if (exists $overall_stat_databases{'nbackend'}) {
			print $fh <<EOF;
		<li><span class="figure">$overall_stat_databases{'nbackend'}[1]</span> <span class="figure-label">Most connections</span><br/><span class="figure-date">($overall_stat_databases{'nbackend'}[0])</span></li>
EOF
		}
		if (exists $overall_stat_databases{'returned'}) {
			print $fh qq{<li><span class="figure">$overall_stat_databases{'returned'}[1]</span> <span class="figure-label">Most tuples returned</span><br/><span class="figure-date">($overall_stat_databases{'returned'}[0])</span></li>
};
		}
		if (exists $overall_stat_databases{'cache_ratio'}) {
			push(@{$overall_stat_databases{'cache_ratio'}}, '-', '-') if ($#{$overall_stat_databases{'cache_ratio'}} < 0);
			print $fh <<EOF;
		<li><span class="figure">$overall_stat_databases{'cache_ratio'}[1]%</span> <span class="figure-label">Worst cache utilization</span><br/><span class="figure-date">($overall_stat_databases{'cache_ratio'}[0])</span></li>
EOF
		}
		if (exists $overall_stat_databases{'temp_files'} && $overall_stat_databases{'temp_files'}[1]) {
			print $fh <<EOF;
		<li><span class="figure">$overall_stat_databases{'temp_files'}[1]</span> <span class="figure-label">Most temporary files</span><br/><span class="figure-date">($overall_stat_databases{'temp_files'}[0])</span></li>
EOF
		}
		if (exists $overall_stat_databases{'temp_bytes'} && $overall_stat_databases{'temp_bytes'}[1]) {
			print $fh <<EOF;
		<li><span class="figure">$overall_stat_databases{'temp_bytes'}[1]</span> <span class="figure-label">Most temporary bytes</span><br/><span class="figure-date">($overall_stat_databases{'temp_bytes'}[0])</span></li>
EOF
		}
		if (exists $overall_stat_databases{'deadlocks'} && $overall_stat_databases{'deadlocks'}[1]) {
			print $fh <<EOF;
		<li><span class="figure">$overall_stat_databases{'deadlocks'}[1]</span> <span class="figure-label">Most deadlocks</span><br/><span class="figure-date">($overall_stat_databases{'deadlocks'}[0])</span></li>
EOF
		}
		print $fh <<EOF;
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
EOF

	}
	if (!$DISABLE_SAR) {
		if (!exists $OVERALL_STATS{'cluster'}) {
			print $fh <<EOF;
      <div class="row">
EOF
		}
		print $fh <<EOF;
            <div class="col-md-$numcol">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-desktop fa-2x pull-left fa-border"></i><h2>System</h2>
              </div>
              <div class="panel-body panel-xlheight">
		<div class="key-figures">
		<span class="figure-date">$sar_start_date to $sar_end_date</span>
		<ul>
		<li></li>
		<li><span class="figure">$OVERALL_STATS{'system'}{'cpu'}[1]%</span> <span class="figure-label">Highest CPU utilization</span><br/><span class="figure-date">($OVERALL_STATS{'system'}{'cpu'}[0])</span></li>
		<li><span class="figure">$OVERALL_STATS{'system'}{'load'}[1]</span> <span class="figure-label">Highest system load</span><br/><span class="figure-date">($OVERALL_STATS{'system'}{'load'}[0])</span></li>
		<li><span class="figure">$OVERALL_STATS{'system'}{'svctm'}[1] ms</span> <span class="figure-label">Highest device service time</span><br/><span class="figure-date">($OVERALL_STATS{'system'}{'svctm'}[0] on device $OVERALL_STATS{'system'}{'svctm'}[2])</span></li>
		<li><span class="figure">$overall_system_stats{kbcached}[1]</span> <span class="figure-label">Lowest system cache</span><br/><span class="figure-date">($overall_system_stats{kbcached}[0])</span></li>
		<!-- li><span class="figure">$overall_system_stats{bread}[1]</span> <span class="figure-label">Highest block read</span><br/><span class="figure-date">($overall_system_stats{bread}[0])</span></li -->
		<!-- li><span class="figure">$overall_system_stats{bwrite}[1]</span> <span class="figure-label">Highest block write</span><br/><span class="figure-date">($overall_system_stats{bwrite}[0])</span> </li -->
		<li><span class="figure">$overall_system_stats{read}[1]</span> <span class="figure-label">Most read device</span><br/><span class="figure-date"> ($overall_system_stats{read}[0])</span></li>
		<li><span class="figure">$overall_system_stats{write}[1]</span> <span class="figure-label">Most written device</span><br/><span class="figure-date">($overall_system_stats{write}[0])</span></li>
		<li><span class="figure">$overall_system_stats{tps}[1]</span> <span class="figure-label">Highest tps on device</span><br/><span class="figure-date">($overall_system_stats{tps}[0])</span></li>
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
EOF
	}
	if (exists $OVERALL_STATS{'cluster'} || (!$DISABLE_SAR)) {
		print $fh <<EOF;
      </div>
EOF
	}

       if (exists $sysinfo{PGVERSION}) {
		my $uptime = '';
		$uptime = "<li><span class=\"figure-label\">Up since $sysinfo{PGVERSION}{'uptime'}</span></li>" if ($sysinfo{PGVERSION}{'uptime'});
		print $fh <<EOF;
      <div class="row">
	    <div class="col-md-12">
	      <div class="panel panel-default">
	      <div class="panel-body">
	       <div class="key-figures">
	       <ul>
	       <li></li>
	       <li><span class="figure-label">$sysinfo{PGVERSION}{'full_version'}</span></li>
		$uptime
	       </ul>
	       </div>
	      </div>
	      </div>
	    </div><!--/span-->
	</div>
EOF
       }

	if (exists $OVERALL_STATS{'archiver'}) {
		my $archiver_infos = '';
		if (exists $OVERALL_STATS{'archiver'}{last_archived_wal}) {
			$archiver_infos = qq{<li><span class="figure">$OVERALL_STATS{'archiver'}{last_archived_wal}</span> <span class="figure-label">Last archived wal</span></li>};
			$archiver_infos .= qq{<li><span class="figure">$OVERALL_STATS{'archiver'}{last_archived_time}</span> <span class="figure-label">Last archived time</span></li>};
		}
		if (exists $OVERALL_STATS{'archiver'}{last_failed_wal}) {
			$archiver_infos .= qq{<li><span class="figure">$OVERALL_STATS{'archiver'}{last_failed_wal}</span> <span class="figure-label">Last failed wal</span></li>};
			$archiver_infos .= qq{<li><span class="figure">$OVERALL_STATS{'archiver'}{last_failed_time}</span> <span class="figure-label">Last failed time</span></li>};
		}
		if (exists $OVERALL_STATS{'archiver'}{stats_reset}) {
			$archiver_infos .= qq{<li><span class="figure">$OVERALL_STATS{'archiver'}{stats_reset}</span> <span class="figure-label">Last stats reset</span></li>};
		}

		# Perform some initialization in case
		print $fh <<EOF;
      <div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-archive fa-2x pull-left fa-border"></i><h2>Archiver</h2>
              </div>
              <div class="panel-body">
		<div class="key-figures">
		<ul>
		<li></li>
		$archiver_infos
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
	</row>
EOF
	}

	print $fh <<EOF;
</li>

<li class="slide" id="about-slide">

	<div id="about"><br/><br/><br/><br/><br/></div>
	<div class="jumbotron">
	<h1>About $PROGRAM</h1>
	<p>$PROGRAM is a Perl program used to perform a full audit of a PostgreSQL Cluster. It is divided in two parts, a collector used to grab statistics on the PostgreSQL cluster using psql and sysstat, a grapher that will generate all HTML output. It is fully open source and free of charge.</p>
	</div>
	<div class="row">
            <div class="col-md-4">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-chain-broken fa-2x pull-left fa-border"></i><h2>License</h2>
              </div>
              <div class="panel-body panel-height">
              <p>$PROGRAM is licenced under the PostgreSQL Licence a liberal Open Source license, similar to the BSD or MIT licenses.</p>
	      <p>That mean that all parts of the program are open source and free of charge.</p>
	      <p>This is the case for both, the collector and the grapher programs.</p>
              </div>
              </div>
            </div><!--/span-->
            <div class="col-md-4">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-download fa-2x pull-left fa-border"></i><h2>Download</h2>
              </div>
              <div class="panel-body panel-height">
              <p>Official releases at SourceForge:<br/>
	      [ <a href="http://sourceforge.net/projects/pgcluu/">http://sourceforge.net/projects/pgcluu/</a> ].</p>
	      <p>Source code at github:<br/>
	      [ <a href="https://github.com/darold/pgcluu">https://github.com/darold/pgcluu</a> ].</p>
	      <p>ChangeLog can be read on-line on GitHub repository <a href="https://github.com/darold/pgcluu/blob/master/ChangeLog">here</a>
	      <p>Offical web site is hosted at <a href="http://pgcluu.darold.net/">pgcluu.darold.net</a>
              </div>
              </div>
            </div><!--/span-->
            <div class="col-md-4">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-wrench fa-2x pull-left fa-border"></i><h2>Authors</h2>
              </div>
              <div class="panel-body panel-height">
	      <p>$PROGRAM is an original development of <a href="http://www.darold.net/">Gilles Darold</a>.</p>
	      <p>Some parts of the collector are taken from <a href="https://github.com/gleu/pgstats">pgstats</a> a C program writen by Guillaume Lelarge and especially the SQL queries including the compatibility with all PostgreSQL versions.</p>
	      <p>Btw $PROGRAM grapher is compatible with files generated by pgstats, sar and sadc so you can use it independently to graph those data. Some part of the sar output parser are taken from <a href="http://sysusage.darold.net/">SysUsage</a></p>
              </div>
              </div>
            </div><!--/span-->
	</div>
</li>

EOF

	if ( (-e "$in_dir/sysinfo.txt") || (-e "$in_dir/sysinfo.txt.gz") || (-e "$in_dir/sys_cache.bin") ) {
		$sysinfo{UPTIME}{'uptime'} = '-' if (!exists $sysinfo{UPTIME}{'uptime'});
		my $release_version = '';
		if ($sysinfo{RELEASE}{'version'}) {
			$release_version = qq{<li><span class="figure">$sysinfo{RELEASE}{'version'}</span> <span class="figure-label">Version</span></li>};
		}

		my $sysctl_info = '';
		my $hugepage_info = '';
		foreach my $k (sort keys %{$sysinfo{SYSTEM}}) {
			next if ($k =~ /^kernel/);
			if ($k =~ /transparent_hugepage/) {
				my $k2 = $k;
				$k2 =~ s/\/sys\/kernel\/mm\/transparent_hugepage\///;
				$sysinfo{SYSTEM}{$k} =~ s/.*\[(.*)\].*/$1/;
				$hugepage_info .= <<EOF;
		<li><span class="figure-label" data-toggle="tooltip" data-placement="top" title="$k">$k2</span> <span class="figure">$sysinfo{SYSTEM}{$k}</span></li>
EOF
			} else {
				$sysctl_info .= "<li><span class=\"figure-label\">$k</span> <span class=\"figure\">$sysinfo{SYSTEM}{$k}</span></li>\n";
			}
		}
		my $core_info = '';
		if (exists $sysinfo{CPU}{'cpu cores'}) {
			my $nsockets = $sysinfo{CPU}{'processor'}/($sysinfo{CPU}{'cpu cores'}||1);
			$core_info = qq{
	      <li><span class="figure">$nsockets</span> <span class="figure-label">Sockets</span></li>
	      <li><span class="figure">$sysinfo{CPU}{'cpu cores'}</span> <span class="figure-label">Cores per CPU</span></li>
};
		}

		if ($hugepage_info) {
			$hugepage_info = <<EOF;
               <span class="figure-label"><b>/sys/kernel/mm/transparent_hugepage/</b></span>
               <ul>
               <li></li>
		$hugepage_info
		</ul>
EOF
		}
		if (exists $sysinfo{KERNEL}{'kernel'} || exists  $sysinfo{CPU}{'processor'}) {
			print $fh <<EOF;
<li class="slide" id="info-slide">

	<div id="info"><br/><br/><br/><br/><br/></div>
	<div class="row">
            <div class="col-md-3">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-desktop fa-2x pull-left fa-border"></i><h2>System</h2>
              </div>
              <div class="panel-body panel-xlheight">
		<div class="key-figures">
              <span class="figure-label"><b>OS information</b></span>
		<ul>
		<li></li>
	      <li><span class="figure">$sysinfo{UPTIME}{'uptime'}</span> <span class="figure-label">Uptime</span></li>
	      <li><span class="figure">$sysinfo{KERNEL}{'hostname'}</span> <span class="figure-label">Hostname</span></li>
	      <li><span class="figure">$sysinfo{KERNEL}{'kernel'}</span> <span class="figure-label">Kernel</span></li>
	      <li><span class="figure">$sysinfo{KERNEL}{'arch'}</span> <span class="figure-label">Arch</span></li>
	      <li><span class="figure">$sysinfo{RELEASE}{'name'}</span> <span class="figure-label">Distribution</span></li>
               $release_version
               </ul>
               </div>
              </div>
              </div>
            </div><!--/span-->
            <div class="col-md-3">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-gear fa-2x pull-left fa-border"></i><h2>Kernel</h2>
              </div>
              <div class="panel-body panel-xlheight">
               <div class="key-figures">
		$hugepage_info
                <span class="figure-label"><b>sysctl parameters</b></span>
                <ul>
                <li></li>
                $sysctl_info
                </ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
            <div class="col-md-3">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-tachometer fa-2x pull-left fa-border"></i><h2>CPU</h2>
              </div>
              <div class="panel-body panel-xlheight">
		<div class="key-figures">
              <span class="figure-label"><b>CPUs information</b></span>
		<ul>
		<li></li>
	      <li><span class="figure">$sysinfo{CPU}{'model name'}</span></li>
	      <li><span class="figure">$sysinfo{CPU}{'cpu MHz'}</span> <span class="figure-label">Speed</span></li>
	      <li><span class="figure">$sysinfo{CPU}{'cache size'}</span> <span class="figure-label">Cache</span></li>
	      $core_info
	      <li><span class="figure">$sysinfo{CPU}{'processor'}</span> <span class="figure-label">Cores</span></li>
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
            <div class="col-md-3">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-tasks fa-2x pull-left fa-border"></i><h2>Memory</h2>
              </div>
              <div class="panel-body panel-xlheight">
		<div class="key-figures">
              <span class="figure-label"><b>Memory information</b></span>
		<ul>
		<li></li>
	      <li><span class="figure">$sysinfo{MEMORY}{'memtotal'}</span> <span class="figure-label">Total memory</span></li>
	      <li><span class="figure">$sysinfo{MEMORY}{'memfree'}</span> <span class="figure-label">Free memory</span></li>
	      <li><span class="figure">$sysinfo{MEMORY}{'buffers'}</span> <span class="figure-label">Buffers</span></li>
	      <li><span class="figure">$sysinfo{MEMORY}{'cached'}</span> <span class="figure-label">Cached</span></li>
	      <li><span class="figure">$sysinfo{MEMORY}{'swaptotal'}</span> <span class="figure-label">Total swap</span></li>
	      <li><span class="figure">$sysinfo{MEMORY}{'swapfree'}</span> <span class="figure-label">Free swap</span></li>
EOF
		if (exists $sysinfo{MEMORY}{'shmem'}) {
			print $fh <<EOF;
	      <li><span class="figure">$sysinfo{MEMORY}{'shmem'}</span> <span class="figure-label">Shared memory</span></li>
EOF
		}
		if (exists $sysinfo{MEMORY}{'commitlimit'}) {
			print $fh <<EOF;
	      <li><span class="figure">$sysinfo{MEMORY}{'commitlimit'}</span> <span class="figure-label">Commit limit</span></li>
	      <li><span class="figure">$sysinfo{MEMORY}{'committed_as'}</span> <span class="figure-label">Committed</span></li>
EOF
		}
		if (exists $sysinfo{SYSTEM}{'kernel.shmmax'} and exists $sysinfo{SYSTEM}{'kernel.shmall'}) {
		  $sysinfo{SYSTEM}{'kernel.shmmax'} = pretty_print_size($sysinfo{SYSTEM}{'kernel.shmmax'});
		  $sysinfo{SYSTEM}{'kernel.shmall'} = pretty_print_size($sysinfo{SYSTEM}{'kernel.shmall'} * 1024 * 4);
		  print $fh <<EOF;
               </ul>
               <span class="figure-label"><b>sysctl parameters</b></span>
               <ul>
               <li></li>
            <li><span class="figure">$sysinfo{SYSTEM}{'kernel.shmmax'}</span> <span class="figure-label">kernel.shmmax</span></li>
            <li><span class="figure">$sysinfo{SYSTEM}{'kernel.shmall'}</span> <span class="figure-label">kernel.shmall</span></li>
EOF
		}
                my @df_infos = ();
                push(@df_infos, @{$sysinfo{DF}}) if (exists $sysinfo{DF});
                my @mount_infos = ();
                push(@mount_infos, @{$sysinfo{MOUNT}}) if (exists $sysinfo{MOUNT});
		print $fh <<EOF;
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
	</div>

	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-hdd-o fa-2x pull-left fa-border"></i><h2>Filesystem</h2>
              </div>
              <div class="panel-body panel-lheight">
		<div class="key-figures">
		<ul>
		<li></li>
		<li>
		<table>
		<tr><th>Filesystem</th><th>Size</th><th>Used</th><th>Free</th><th>Use%</th><th>Mount</th></tr>
		@df_infos
		</table>
		</li>
		<li>
		<table>
		<tr><th>Filesystem</th><th>Mount</th><th>type</th><th>Options</th></tr>
		@mount_infos
		</table>
		</li>
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
	</div>
EOF
		} else {
			print $fh <<EOF;
<li class="slide" id="info-slide">

	<div id="info"><br/><br/><br/><br/><br/></div>
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-desktop fa-2x pull-left fa-border"></i><h2>System</h2>
              </div>
              <div class="panel-body panel-xlheight">
		<div class="key-figures">
              <span class="figure-label"><b>No data collected</b></span>
               </div>
              </div>
              </div>
            </div><!--/span-->
	</div>
  </li>
EOF
		}
		if (exists $sysinfo{PROCESS}) {
			print $fh <<EOF;
	<div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
              <i class="fa fa-hdd-o fa-2x pull-left fa-border"></i><h2>Process list</h2>
              </div>
              <div class="panel-body panel-lheight">
		<div class="key-figures">
		<ul>
		<li></li>
		<li>
		<table>
		<tr><th>USER</th><th>PID</th><th>%CPU</th><th>%MEM</th><th>VSZ</th><th>RSS</th><th>TTY</th><th>STAT</th><th>START</th><th>TIME</th><th>COMMAND</th></tr>
		@{$sysinfo{PROCESS}}
		</table>
		</li>
		</ul>
		</div>
              </div>
              </div>
            </div><!--/span-->
	</div>
  </li>
EOF
		}
	}

	print $fh <<EOF;
</ul> <!-- end of slides -->
EOF
        &html_footer($fh);
        $fh->close;
}

sub html_header
{
	my $fh = shift();
	my $base = shift();
	$base ||= '.';

	my @db_list = @_;

	my $pgcluu_ico =
        'data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAACAAAAAjCAYAAAD17ghaAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A
/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB98GCwcGIvGIhhwAAAOBSURBVFjD
vZdZiI1hGMd/55gFM/Ylss4YGsuQLDP2C3uWGyVzI1mypOxSCAmFO2WJUJaoKReDIhcmSbYaaphG
msgWMXZmmPnc/L96ejvfd86ZOeOp03e+733e9/m/z/5EaBxFgWFAgd6fAg+BBv4D9QBuAj8BT79f
wG2gT3MK7gSs0y09PSt1+z8GzBagY6qFFwNvjZCfwEygNdAKmAJ8NOvvgOWpEFwAXDEH1wAngPQA
vzjsALlu/CQp6gKcBr6bwy4A+Qns7QucNPt+AGeBrokIjgArgM/mgCpgcpx9LbTX0ljgsTnnG7Aa
yAhTd7XZ8BfYKtW6NA7oad63yB9iAVsD1JpzXwDDXcZlhqEWOAfkhdx4krM+QsKCqJd8x4buGn+x
P/BVH8uBIQG3bipFBPqeMclwhMQDKgK82/fwZMIqO05SqpDM9VEgRx/vyO5B6N843yaHAM4HRoUA
KNczN2psVx+yoR4oNe9zgRvAfr2XKgf49AAoCTnP8520sbZeoudAmXA2sFL5I+mqlij1BLYBWUCd
STo9DE8bIA2Yn0oAUfnAUWA3sA+4q7VvwC3DWyNfuggcSAWAlsBi3Wy0bFcInAEuSyOl8odF8qfB
4lsBdIgHIC3Oegbw0omGzsobc8z3qXrmGAfLVP6vaYoGvqqi/XDU/gvoJjDdgXZae69MGgFeOeAb
7QPZ0tRSYK1ufkz9QTXwGngO7BXQkbL/GAGNS4ektmMxKlqGOp4nxlyzTEfkOb+DCTr/WfEfiaeB
PKCfwi1fTnXcJC3PPD2F34BU5oHnakrSJLxMNo8ap/TM/17A/URDMBEAtcAl4JNKboEERozwiDGd
J5/ZCCxIFoAXwLNR9b/I4fUMCM/RBMCEBGqBl6YOFpXPaIyiVCPvznHUHolhBktVIZf2a8YHgIkq
w3VqwVoEbLrmeP8LYDOwU+HmrzXIZO0DAGwAfmuWmOYe7insxscIyaEaRL6oNyg0azNMI9ugAcal
IuCRkVNm+4kosMss1mv8cm+RrvTaOiBki6VRV3tXnelpR1AZGKUhs84wrwLaNqJnyFaB8s+pUydU
GG9jujqeCrO5MsmecKGj7ipgngpUUrTTaaXLgUEh/Lmaku1UtKep7XRv4Lwzip9yzJIJHJFAn69E
gFJG04FnRsAnYDuwyRlIq9UjNgu1Uof0OkYlfKMuKCuZA/8B+QsSxkN8YYwAAAAASUVORK5CYII=
';
        my $date = localtime(time);
        print $fh qq{
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="Content-Type" content="text/html; charset=$charset" />
    <meta name="robots" content="noindex,nofollow">
    <meta http-equiv="Expires" content="$date">
    <meta http-equiv="Generator" content="pgCluu v$VERSION">
    <meta http-equiv="Date" content="$date">

    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="shortcut icon" href="$pgcluu_ico" />

    <title>$PROGRAM</title>
<link href="$base/jquery.jqplot.min.css" rel="stylesheet">
 <script type="text/javascript" src="$base/jquery.min.js"></script>
 <script type="text/javascript" src="$base/jquery.jqplot.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.pieRenderer.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.barRenderer.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.dateAxisRenderer.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.canvasTextRenderer.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.categoryAxisRenderer.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.canvasAxisTickRenderer.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.highlighter.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.highlighter.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.cursor.min.js"></script>
 <script type="text/javascript" src="$base/jqplot.pointLabels.min.js"></script>
 <script type="text/javascript" src="$base/bean.js"></script>
 <script type="text/javascript" src="$base/underscore.js"></script>
 <link href="$base/bootstrap.min.css" rel="stylesheet">
 <link href="$base/font-awesome.min.css" rel="stylesheet">
 <script type="text/javascript" src="$base/bootstrap.min.js"></script>
    <link href="$base/pgcluu.css" rel="stylesheet">
    <link href="$base/datetimepicker.css" rel="stylesheet">
    <script src="$base/pgcluu.js"></script>
    <script src="$base/pgcluu_slide.js"></script>
    <script src="$base/sorttable.js"></script>
    <script src="$base/bootstrap-datetimepicker.js"></script>

  </head>

 <body>

<!-- Load navbar -->
<div id="navigation"></div>

<div class="container" id="main-container">
};

}

sub html_footer
{
	my $fh = shift();
	my $db = shift();

        print $fh qq{

      <hr>

      <footer>
        <p>&copy; Gilles Darold 2012-2015</p>
	<p>Report generated by <a href="http://pgcluu.darold.net/">$PROGRAM</a> $VERSION.</p>
      </footer>

    </div><!--/.container-->
  </body>
</html>
};

}

sub generate_html_menu
{
	my ($in_dir, $out_dir) = @_;

        my $date = localtime(time);

	my $pgcluu_logo =
        'data:image/png;base64,
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
AAAASUVORK5CYII=';

        my $menu_str = qq{
    <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
      <a class="navbar-brand" href="http://pgcluu.darold.net/">
      <img src="$pgcluu_logo" title="$PROGRAM"></a>
      <div class="container mainmenu">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
        </div>
        <div class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
              <li id="menu-home" class="dropdown"><a href="index.html#home">Home</a></li>
};
	if ( (-e "$in_dir/sysinfo.txt") || (-e "$in_dir/sysinfo.txt.gz") || (-e "$in_dir/sys_cache.bin") ) {
		$menu_str .= qq{
              <li id="menu-info" class="dropdown"><a href="index.html#info">SysInfo</a></li>
} if (exists $sysinfo{KERNEL}{'kernel'} || exists  $sysinfo{CPU}{'processor'});
	}

	opendir(ODIR, "$OUTPUT_DIR") || die "FATAL: can't opendir $OUTPUT_DIR: $!";
	my @database_list = grep { !/^database-(all|queries-.*|fct-.*).html$/ && s/^database-(.*)\.html$/$1/; } readdir(ODIR);
	closedir(ODIR);
	if ($#database_list >= 0) {
		my $disable_size = ' class="disabled"';
		my $disable_tablespace = ' class="disabled"';
		my $disable_backend = ' class="disabled"';
		my $disable_conntype = ' class="disabled"';
		my $disable_connection = ' disabled';
		my $disable_cache = ' class="disabled"';
		my $disable_deadlock = ' class="disabled"';
		my $disable_buffercache = ' class="disabled"';
		my $disable_buffer = ' disabled';
		my $disable_bgwriter = ' class="disabled"';
		my $disable_bgwriter_count = ' class="disabled"';
		my $disable_writer = ' disabled';
		my $disable_tempfile = ' class="disabled"';
		my $disable_tempfile_bytes = ' class="disabled"';
		my $disable_temporary = ' disabled';
		my $disable_wal = ' disabled';
		my $disable_xlog_files = ' class="disabled"';
		my $disable_xlog = ' class="disabled"';
		my $disable_checkpoints = ' class="disabled"';
		my $disable_checkpointwrite = ' class="disabled"';
		my $disable_archive = ' class="disabled"';
		my $disable_rw_ratio = ' disabled';
		my $disable_read_ratio = ' class="disabled"';
		my $disable_write_ratio = ' class="disabled"';
		my $disable_write_query = ' class="disabled"';
		my $disable_commit = ' class="disabled"';
		my $disable_conflicts = ' class="disabled"';
		my $disable_canceled = ' class="disabled"';
		my $disable_replication = ' class="disabled"';
		my $disable_allrepli = ' disabled';
		my $disable_conf = ' disabled';
		my $disable_pgconf = ' class="disabled"';
		my $disable_alterconf = ' class="disabled"';
		my $disable_recoveryconf = ' class="disabled"';
		my $disable_pghba = ' class="disabled"';
		my $disable_pgident = ' class="disabled"';
		my $disable_pgsettings = ' class="disabled"';
		my $disable_pgnondefaultsettings = ' class="disabled"';
		my $disable_pgdb_role_setting = ' class="disabled"';
		my $disable_pgbouncer = ' class="disabled"';
		if (open(IN, "$OUTPUT_DIR/cluster.html")) {
			while (<IN>) {
				if (/<div id="cluster-size">/) {
					$disable_size = '';
				} elsif (/<div id="tablespace-cluster-size">/) {
					$disable_tablespace = '';
				} elsif (/<div id="cluster-backends">/) {
					$disable_backend = '';
					$disable_connection = '';
				} elsif (/<div id="cluster-connections">/) {
					$disable_conntype = '';
					$disable_connection = '';
				} elsif (/<div id="cluster-cache_ratio">/) {
					$disable_cache = '';
				} elsif (&backend_minimum_version(9.2) && (/<div id="cluster-deadlocks">/)) {
					$disable_deadlock = '';
				} elsif (/<div id="cluster-buffersused">/) {
					$disable_buffercache = '';
					$disable_buffer = '';
				} elsif (/<div id="cluster-bgwriter">/) {
					$disable_bgwriter = "";
					$disable_writer = "";
				} elsif (/<div id="cluster-bgwriter_count">/) {
					$disable_bgwriter_count = "";
					$disable_writer = "";
				} elsif (&backend_minimum_version(9.2) && (/<div id="cluster-temporary_files">/)) {
					$disable_tempfile = "";
					$disable_temporary = "";
				} elsif (&backend_minimum_version(9.2) && (/<div id="cluster-temporary_bytes">/)) {
					$disable_tempfile_bytes = "";
					$disable_temporary = "";
				} elsif (/<div id="cluster-xlog_files">/) {
					$disable_xlog_files = '';
					$disable_wal = '';
				} elsif (/<div id="cluster-xlog">/) {
					$disable_xlog = '';
					$disable_wal = '';
				} elsif (/<div id="cluster-checkpoints">/) {
					$disable_checkpoints = '';
					$disable_wal = '';
				} elsif (/<div id="cluster-checkpoints">/) {
					$disable_checkpointwrite = '';
					$disable_wal = '';
				} elsif (/<div id="cluster-archive">/) {
					$disable_archive = '';
					$disable_wal = '';
				} elsif (/<div id="cluster-read_ratio">/) {
					$disable_read_ratio = "";
					$disable_rw_ratio = "";
				} elsif (/<div id="cluster-write_ratio">/) {
					$disable_write_ratio = "";
					$disable_rw_ratio = "";
				} elsif (/<div id="cluster-read_write_query">/) {
					$disable_write_query = "";
					$disable_rw_ratio = "";
				} elsif (/<div id="cluster-commits_rollbacks">/) {
					$disable_commit = "";
					$disable_rw_ratio = "";
				} elsif (/<div id="cluster-conflicts">/) {
					$disable_conflicts = "";
					$disable_allrepli = "";
				} elsif (/<div id="cluster-canceled_queries">/) {
					$disable_canceled = "";
					$disable_allrepli = "";
				} elsif (/<div id="cluster-replication">/) {
					$disable_replication = "";
					$disable_allrepli = "";
				} elsif (/<div id="cluster-pgconf">/) {
					$disable_conf = '';
					$disable_pgconf = '';
				} elsif (/<div id="cluster-settings">/) {
					$disable_conf = '';
					$disable_pgsettings = '';
				} elsif (/<div id="cluster-nondefault-settings">/) {
					$disable_conf = '';
					$disable_pgnondefaultsettings = '';
				} elsif (/<div id="cluster-dbrolesetting">/) {
					$disable_conf = '';
					$disable_pgdb_role_setting = '';
				} elsif (/<div id="cluster-alterconf">/) {
					$disable_conf = '';
					$disable_alterconf = '';
				} elsif (/<div id="cluster-recoveryconf">/) {
					$disable_conf = '';
					$disable_recoveryconf = '';
				} elsif (/<div id="cluster-pghba">/) {
					$disable_conf = '';
					$disable_pghba = '';
				} elsif (/<div id="cluster-pgident">/) {
					$disable_conf = '';
					$disable_pgident = ''
				} elsif (/<div id="cluster-pgbouncer">/) {
					$disable_conf = '';
					$disable_pgbouncer = '';
				}
			}
			close(IN);
		}

		$menu_str .= qq{
              <li id="menu-cluster" class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">Cluster <b class="caret"></b></a>
                <ul class="dropdown-menu">
		      <li id="menu-cluster-size"$disable_size><a href="cluster.html#cluster-size">Databases sizes</a></li>
		      <li id="menu-tablespace-cluster-size"$disable_tablespace><a href="cluster.html#tablespace-cluster-size">Tablespaces sizes</a></li>
};
		if (!$CAPTURE) {
			$menu_str .= qq{
			<li id="menu-connectionbackend" class="dropdown-submenu$disable_connection">
			   <a href="#" tabindex="-1">Connections </a>
			      <ul class="dropdown-menu">
			      <li id="menu-cluster-backends"$disable_backend><a href="cluster.html#cluster-backends">Connections</a></li>
			      <li id="menu-cluster-connections"$disable_conntype><a href="cluster.html#cluster-connections">Connections by type</a></li>
			      </ul>
			</li>
		      <li id="menu-cluster-deadlocks"$disable_deadlock><a href="cluster.html#cluster-deadlocks">Deadlocks</a></li>
		      <li class="divider"></li>
		       <li id="menu-cluster-cache_ratio"$disable_cache><a href="cluster.html#cluster-cache_ratio">Cache utilization</a></li>
			<li id="menu-pgbuffercache" class="dropdown-submenu$disable_buffer">
			   <a href="#" tabindex="-1">Shared buffers statistics </a>
			      <ul class="dropdown-menu">
			      <li id="menu-cluster-buffersused"$disable_buffercache><a href="cluster.html#cluster-buffersused">Shared buffers utilization</a></li>
			      <li id="menu-cluster-databaseloaded"$disable_buffercache><a href="cluster.html#cluster-databaseloaded">Database in shared buffers</a></li>
			      <li id="menu-cluster-usagecount"$disable_buffercache><a href="cluster.html#cluster-usagecount">Usagecount in shared buffers</a></li>
			      <li id="menu-cluster-isdirty"$disable_buffercache><a href="cluster.html#cluster-isdirty">Usagecount in dirty buffers</a></li>
			      </ul>
			</li>
		      <li class="divider"></li>
			<li id="menu-backgroundwriter" class="dropdown-submenu $disable_writer">
			   <a href="#" tabindex="-1">Background writer </a>
			      <ul class="dropdown-menu">
			      <li id="menu-cluster-bgwriter"$disable_bgwriter><a href="cluster.html#cluster-bgwriter">Background writer buffers</a></li>
			      <li id="menu-cluster-bgwriter_count"$disable_bgwriter_count><a href="cluster.html#cluster-bgwriter_count">Background writer counters</a></li>
			      </ul>
		        </li>
			<li id="menu-temporaryfiles" class="dropdown-submenu$disable_temporary">
			   <a href="#" tabindex="-1">Temporary files </a>
			      <ul class="dropdown-menu">
			      <li id="menu-cluster-temporary_files"$disable_tempfile><a href="cluster.html#cluster-temporary_files">Temporary files</a></li>
			      <li id="menu-cluster-temporary_bytes"$disable_tempfile_bytes><a href="cluster.html#cluster-temporary_bytes">Temporary files size</a></li>
			      </ul>
		        </li>
			<li id="menu-walcheckpoint" class="dropdown-submenu$disable_wal">
			   <a href="#" tabindex="-1">Wal / Checkpoint </a>
			      <ul class="dropdown-menu">
			      <li id="menu-cluster-xlog_files"$disable_xlog_files><a href="cluster.html#cluster-xlog_files">Wal files</a></li>
			      <li id="menu-cluster-xlog"$disable_xlog><a href="cluster.html#cluster-xlog">Wal bytes written</a></li>
			      <li id="menu-cluster-checkpoints"$disable_checkpoints><a href="cluster.html#cluster-checkpoints">Checkpoints counter</a></li>
			      <li id="menu-cluster-checkpoints_time"$disable_checkpointwrite><a href="cluster.html#cluster-checkpoints">Checkpoints write time</a></li>
			      <li id="menu-cluster-archive"$disable_archive><a href="cluster.html#cluster-archive">Archiver stats</a></li>
			      </ul>
		        </li>
			<li id="menu-rw" class="dropdown-submenu$disable_rw_ratio">
			   <a href="#" tabindex="-1">Queries Reads / Writes </a>
			      <ul class="dropdown-menu">
			      <li id="menu-cluster-read_ratio"$disable_read_ratio><a href="cluster.html#cluster-read_ratio">Read tuples</a></li>
			      <li id="menu-cluster-write_ratio"$disable_write_ratio><a href="cluster.html#cluster-write_ratio">Write ratio</a></li>
			      <li id="menu-cluster-read_write_query"$disable_write_query><a href="cluster.html#cluster-read_write_query">Read vs Write queries</a></li>
			      <li id="menu-cluster-commits_rollbacks"$disable_commit><a href="cluster.html#cluster-commits_rollbacks">Commits vs Rollbacks</a></li>
			      </ul>
		        </li>
		      <li class="divider"></li>
			<li id="menu-replication" class="dropdown-submenu$disable_allrepli">
			   <a href="#" tabindex="-1">Replication statistics </a>
			      <ul class="dropdown-menu">
			      <li id="menu-cluster-replication"$disable_replication><a href="cluster.html#cluster-replication">Replication lag</a></li>
			      <li id="menu-cluster-canceled_queries"$disable_canceled><a href="cluster.html#cluster-canceled_queries">Canceled queries</a></li>
			      <li id="menu-cluster-conflicts"$disable_conflicts><a href="cluster.html#cluster-conflicts">Conflicts</a></li>
			      </ul>
		        </li>
};
		} else {
			$menu_str .= qq{
		      <li class="divider"></li>
		      <li id="menu-cluster-replication"$disable_replication><a href="cluster.html#cluster-replication">Replication statistics</a></li>
};
		}
		$menu_str .= qq{
		      <li class="divider"></li>
			<li id="menu-configuration" class="dropdown-submenu$disable_conf">
			   <a href="#" tabindex="-1">Configurations </a>
			      <ul class="dropdown-menu">
			      <li id="menu-cluster-pgconf"$disable_pgconf><a href="cluster.html#cluster-pgconf">PostgreSQL configuration</a></li>
			      <li id="menu-cluster-settings"$disable_pgsettings><a href="cluster.html#cluster-settings">PostgreSQL settings</a></li>
			      <li id="menu-cluster-nondefault-settings"$disable_pgnondefaultsettings><a href="cluster.html#cluster-nondefault-settings">PostgreSQL non default settings</a></li>
			      <li id="menu-cluster-dbrolesetting"$disable_pgdb_role_setting><a href="cluster.html#cluster-dbrolesetting">Database/Roles settings</a></li>
			      <li id="menu-cluster-alterconf"$disable_alterconf><a href="cluster.html#cluster-alterconf">PostgreSQL ALTER SYSTEM configuration</a></li>
			      <li id="menu-cluster-recoveryconf"$disable_recoveryconf><a href="cluster.html#cluster-recoveryconf">PostgreSQL recovery configuration</a></li>
			      <li id="menu-cluster-pghba"$disable_pghba><a href="cluster.html#cluster-pghba">PostgreSQL authorization</a></li>
			      <li id="menu-cluster-pgident"$disable_pgident><a href="cluster.html#cluster-pgident">User Name Maps</a></li>
			      <li id="menu-cluster-pgbouncer"$disable_pgbouncer><a href="cluster.html#cluster-pgbouncer">Pgbouncer settings</a></li>
			     </ul>
			</li>
                </ul>
              </li>
};
	}

	if ($CAPTURE) {
		@database_list = ();
	} else {
		if ($#database_list >= 0) {
			$menu_str .= qq{
              <li id="menu-database" class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">Databases <b class="caret"></b></a>
                <ul class="dropdown-menu">
};
		}
	}

	my $dbidx = 0;
	my $l = 0;
	foreach my $db (sort @database_list) {
		next if (($db ne 'all') && ($#INCLUDE_DB >= 0) && (!grep($db =~ /^$_$/, @INCLUDE_DB)));
		if ($#database_list >= 10) {
			my $md = $l % 10;
			if ($md == 0) {
				$dbidx++;
				if ($l > 0) {
					$menu_str .= qq{
                    </ul>
                  </li>
};
				}
				my $lbl = '';
				$lbl = " (part $dbidx)" if ($#database_list >= 10);
				$menu_str .= qq{
                  <li id="menu-device$dbidx" class="dropdown-submenu">
                     <a href="#" tabindex="-1">Database $lbl</a>
                      <ul class="dropdown-menu">
};
			}
			$l++;
		}

		$menu_str .= qq{
		<li id="menu-$db" class="dropdown-submenu">
		   <a href="#" tabindex="-1">$db </a>
		      <ul class="dropdown-menu">
};
		if ( (-e "$in_dir/sysinfo.txt") || (-e "$in_dir/sysinfo.txt.gz") || (-e "$in_dir/sys_cache.bin") ) {
			$menu_str .= qq{
		      <li id="menu-database-info"><a href="database-$db.html#database-info">Database info</a></li>
};
		}

		my %data_info = %{$DB_GRAPH_INFOS{'pg_stat_all_tables.csv'}};
		my $table_str = '';
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^table-/);
			$table_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_class_size.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^table-/);
			$table_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_statio_all_tables.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^statio-/);
			$table_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		my $disable_table = ' disabled';
		$disable_table = '' if ($table_str);
		$menu_str .= qq{
			<li id="menu-$db-table" class="dropdown-submenu $disable_table">
			   <a href="#" tabindex="-1">Tables statistics </a>
			      <ul class="dropdown-menu">
				$table_str
			  </ul>
		      </li>
};
		$table_str = '';

		my $idx_str = '';
		%data_info = %{$DB_GRAPH_INFOS{'pg_stat_all_indexes.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^index-/);
			$idx_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_class_size.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^index-/);
			$idx_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_stat_invalid_indexes.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^index-/);
			$idx_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_stat_hash_indexes.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^index-/);
			$idx_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_statio_all_indexes.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /^statio-/);
			$idx_str .= qq{
				      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
	} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_stat_unused_indexes.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			$idx_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_stat_redundant_indexes.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			$idx_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_stat_missing_fkindexes.csv'}};
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			$idx_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		%data_info = %{$DB_GRAPH_INFOS{'pg_stat_count_indexes.csv'}};
		my $idx = &get_data_id('count-index', %data_info);
		$idx_str .= qq{
			      <li id="menu-database-$data_info{$idx}{name}"><a href="$db-$data_info{$idx}{name}.html">Number of indexes</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$idx}{name}.html");
		my $disable_idx = ' disabled';
		$disable_idx = '' if ($idx_str);
		$menu_str .= qq{
			<li id="menu-$db-table" class="dropdown-submenu $disable_idx">
			   <a href="#" tabindex="-1">Indexes statistics </a>
				<ul class="dropdown-menu">
				$idx_str
				</ul>
			</li>
};
		$idx_str = '';

		if (-e "$OUTPUT_DIR/database-fct-$db.html") {
			$menu_str .= qq{
			<li id="menu-database-functions"><a href="database-fct-$db.html#database-functions">Functions statistics</a></li>
};
		}

		%data_info = %{$DB_GRAPH_INFOS{'pg_relation_buffercache.csv'}};
		my $buffer_str = '';
		foreach my $id (sort {$a <=> $b} keys %data_info) {
			next if ($data_info{$id}{name} !~ /buffercache/);
			$buffer_str .= qq{
			      <li id="menu-database-$data_info{$id}{name}"><a href="$db-$data_info{$id}{name}.html">$data_info{$id}{menu}</a></li>
} if (-e "$OUTPUT_DIR/$db-$data_info{$id}{name}.html");
		}
		my $disable_buffer = ' disabled';
		$disable_buffer = '' if ($buffer_str);
		$menu_str .= qq{
			<li id="menu-$db-buffercache-relation" class="dropdown-submenu $disable_buffer">
			   <a href="#" tabindex="-1">Buffercache Statistics </a>
			      <ul class="dropdown-menu">
				$buffer_str
			  </ul>
		      </li>
};
		$buffer_str = '';

		if (-e "$OUTPUT_DIR/database-queries-$db.html") {
			$menu_str .= qq{
		      <li id="menu-database-queries"><a href="database-queries-$db.html#database-queries">Statements statistics</a></li>
};
		}

		my $disable_size = ' class="disabled"';
		my $disable_backend = ' class="disabled"';
		my $disable_conntype = ' class="disabled"';
		my $disable_connection = ' disabled';
		my $disable_lock = ' class="disabled"';
		my $disable_locks = ' disabled';
		my $disable_cache = ' class="disabled"';
		my $disable_rw_ratio = ' disabled';
		my $disable_read_ratio = ' class="disabled"';
		my $disable_write_ratio = ' class="disabled"';
		my $disable_write_query = ' class="disabled"';
		my $disable_commit = ' class="disabled"';
		my $disable_canceled = ' class="disabled"';
		my $disable_conflicts = ' class="disabled"';
		my $disable_temporary = ' disabled';
		my $disable_tempbytes = ' class="disabled"';
		my $disable_tempfile = ' class="disabled"';
		my $disable_deadlock = ' class="disabled"';
		if (open(IN, "$OUTPUT_DIR/database-$db.html")) {
			while (<IN>) {
				if (/<div id="database-size">/) {
					$disable_size = '';
				} elsif (/<div id="database-backends">/) {
					$disable_backend = '';
					$disable_connection = '';
				} elsif (/<div id="database-connections">/) {
					$disable_conntype = '';
					$disable_connection = '';
				} elsif (/<div id="database-lock-types">/) {
					$disable_lock = '';
					$disable_locks = "";
				} elsif (/<div id="database-cache_ratio">/) {
					$disable_cache = '';
				} elsif (/<div id="database-read_ratio">/) {
					$disable_read_ratio = "";
					$disable_rw_ratio = "";
				} elsif (/<div id="database-write_ratio">/) {
					$disable_write_ratio = "";
					$disable_rw_ratio = "";
				} elsif (/<div id="database-read_write_query">/) {
					$disable_write_query = "";
					$disable_rw_ratio = "";
				} elsif (/<div id="database-commits_rollbacks">/) {
					$disable_commit = "";
					$disable_rw_ratio = "";
				} elsif (/<div id="database-conflicts">/) {
					$disable_conflicts = "";
				} elsif (/<div id="database-canceled_queries">/) {
					$disable_canceled = "";
				} elsif (/<div id="database-deadlocks">/) {
					$disable_deadlock = "";
					$disable_locks = "";
				} elsif (/<div id="database-temporary_files">/) {
					$disable_tempfile = "";
					$disable_temporary = "";
				} elsif (/<div id="database-temporary_bytes">/) {
					$disable_tempbytes = "";
					$disable_temporary = "";
				}
			}
			close(IN);
		}
		$menu_str .= qq{
		      <li class="divider"></li>
		      <li id="menu-database-size"$disable_size><a href="database-$db.html#database-size">Database size</a></li>
		      <li id="menu-${db}_connections" class="dropdown-submenu$disable_connection">
			<a href="#" tabindex="-1">Connections </a>
			  <ul class="dropdown-menu">
			      <li id="menu-database-backends"$disable_backend><a href="database-$db.html#database-backends">Connections</a></li>
			      <li id="menu-database-connections"$disable_conntype><a href="database-$db.html#database-connections">Connections by type</a></li>
			  </ul>
		      </li>
		      <li id="menu-database-cache_ratio"$disable_cache><a href="database-$db.html#database-cache_ratio">Cache utilization</a></li>
		      <li class="divider"></li>
		      <li id="menu-${db}_locks" class="dropdown-submenu $disable_locks">
			<a href="#" tabindex="-1">Locks </a>
			  <ul class="dropdown-menu">
			      <li id="menu-database-deadlocks"$disable_deadlock><a href="database-$db.html#database-deadlocks">Deadlocks</a></li>
			      <li id="menu-database-lock-types"$disable_lock><a href="database-$db.html#database-lock-types">Locks per types</a></li>
			      <li id="menu-database-lock-modes"$disable_lock><a href="database-$db.html#database-lock-modes">Locks per modes</a></li>
			      <li id="menu-database-lock-granted"$disable_lock><a href="database-$db.html#database-lock-granted">Locks granted or not</a></li>
			  </ul>
		      </li>
		      <li class="divider"></li>
		      <li id="menu-${db}_temporaryfiles" class="dropdown-submenu $disable_temporary">
			<a href="#" tabindex="-1">Temporary files </a>
			  <ul class="dropdown-menu">
			      <li id="menu-database-temporary_files"$disable_tempfile><a href="database-$db.html#database-temporary_files">Temporary files</a></li>
			      <li id="menu-database-temporary_bytes"$disable_tempbytes><a href="database-$db.html#database-temporary_bytes">Temporary files size</a></li>
			  </ul>
		      </li>
		      <li id="menu-${db}_rw" class="dropdown-submenu $disable_rw_ratio">
			<a href="#" tabindex="-1">Queries Reads / Writes </a>
			  <ul class="dropdown-menu">
			      <li id="menu-database-read_ratio"$disable_read_ratio><a href="database-$db.html#database-read_ratio">Read tuples</a></li>
			      <li id="menu-database-write_ratio"$disable_write_ratio><a href="database-$db.html#database-write_ratio">Write ratio</a></li>
			      <li id="menu-database-read_write_query"$disable_write_query><a href="database-$db.html#database-read_write_query">Read vs Write queries</a></li>
			      <li id="menu-database-commits_rollbacks"$disable_commit><a href="database-$db.html#database-commits_rollbacks">Commits vs Rollbacks</a></li>
			  </ul>
		      </li>
		      <li class="divider"></li>
		      <li id="menu-database-canceled_queries"$disable_canceled><a href="database-$db.html#database-canceled_queries">Canceled queries</a></li>
		      <li id="menu-database-conflicts"$disable_conflicts><a href="database-$db.html#database-conflicts">Conflicts</a></li>
                      </ul>
                </li>
};
	}
	if ($#database_list >= 0) {
		if ($#database_list >= 10) {
			$menu_str .= qq{
                    </ul>
                  </li>
};
		}
                $menu_str .= qq{
                </ul>
              </li>
};
	}

	opendir(ODIR, "$OUTPUT_DIR") || die "FATAL: can't opendir $OUTPUT_DIR: $!";
	my @pgbouncer_list = grep { !/^pgbouncer-all.html$/ && s/^pgbouncer-(.*).html$/$1/; } readdir(ODIR);
	closedir(ODIR);
	if ($#pgbouncer_list >= 0) {
		$menu_str .= qq{
              <li id="menu-database" class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">pgBouncer <b class="caret"></b></a>
                <ul class="dropdown-menu">
};
		foreach my $db (sort @pgbouncer_list) {
			$menu_str .= qq{
			<li id="menu-$db" class="dropdown-submenu">
			   <a href="#" tabindex="-1">$db </a>
			      <ul class="dropdown-menu">
			      <li id="menu-pgbouncer-connections"><a href="pgbouncer-$db.html#pgbouncer-connections">Clients / servers connections</a></li>
			      <li id="menu-pgbouncer-duration"><a href="pgbouncer-$db.html#pgbouncer-duration">Average queries duration</a></li>
			      <li id="menu-pgbouncer-number"><a href="pgbouncer-$db.html#pgbouncer-number">Queries per second</a></li>
                             </ul>
                        </li>
};
		}
		$menu_str .= qq{
                </ul>
              </li>
};
	}

	if (!$DISABLE_SAR) {
		$menu_str .= qq{
              <li id="menu-system" class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">System <b class="caret"></b></a>
                <ul class="dropdown-menu">
		  <li id="menu-system-cpu"><a href="system.html#system-cpu">Cpu</a></li>
                  <li class="divider"></li>
                  <li id="menu-system-memory"><a href="system.html#system-memory">Memory</a></li>
                  <li id="menu-system-swap"><a href="system.html#system-swap">Swap</a></li>
                  <li class="divider"></li>
                  <li id="menu-system-load"><a href="system.html#system-load">Load</a></li>
                  <li id="menu-system-process"><a href="system.html#system-process">Task list</a></li>
                  <li id="menu-system-runqueue"><a href="system.html#system-runqueue">Run queue</a></li>
                  <li id="menu-system-cswch"><a href="system.html#system-cswch">Context switches</a></li>
                  <li id="menu-system-pcrea"><a href="system.html#system-pcrea">Tasks created per second</a></li>
                  <li class="divider"></li>
                  <li id="menu-system-block"><a href="system.html#system-block">Blocks</a></li>
                  <li id="menu-system-tps"><a href="system.html#system-tps">Transfers per second</a></li>
                  <li id="menu-system-page"><a href="system.html#system-page">Pages</a></li>
                  <li class="divider"></li>
};
		my $idx = 0;
		for (my $i = 0; $i <= $#DEVICE_LIST; $i++) {
			next if (!&device_in_report($DEVICE_LIST[$i]));
			my $md = $i % 10;
			if ($md == 0) {
				$idx++;
				if ($i > 0) {
					$menu_str .= qq{
		    </ul>
		  </li>
};
				}
				my $lbl = '';
				$lbl = " (part $idx)" if ($#DEVICE_LIST >= 10);
				$menu_str .= qq{
		  <li id="menu-device$idx" class="dropdown-submenu">
		     <a href="#" tabindex="-1">Devices $lbl</a>
		      <ul class="dropdown-menu">
};
			}
			$menu_str .= qq{
			  <li id="menu-device$i" class="dropdown-submenu">
			     <a href="#" tabindex="-1">$DEVICE_LIST[$i] </a>
			      <ul class="dropdown-menu">
			      <li id="menu-device-cpu"><a href="system-device$i.html#device-cpu">Cpu utilization</a></li>
			      <li id="menu-device-read_write"><a href="system-device$i.html#device-read_write">Read/write bytes per second</a></li>
			      <li id="menu-device-tps"><a href="system-device$i.html#device-tps">Transfert per second</a></li>
			      <li id="menu-device-service_time"><a href="system-device$i.html#device-service_time">Average service time</a></li>
			      </ul>
			  </li>
};
		}
		$menu_str .= qq{
		    </ul>
		  </li>
		  <li id="menu-network" class="dropdown-submenu">
		     <a href="#" tabindex="-1">Network </a>
		      <ul class="dropdown-menu">
};
		for (my $i = 0; $i <= $#IFACE_LIST; $i++) {
			next if (!&interface_in_report($IFACE_LIST[$i]));
			$menu_str .= qq{
			  <li id="menu-device$i" class="dropdown-submenu">
			     <a href="#" tabindex="-1">$IFACE_LIST[$i] </a>
			      <ul class="dropdown-menu">
			      <li id="menu-network-utilization"><a href="network-device$i.html#network-utilization">Network utilization</a></li>
			      <li id="menu-network-error"><a href="network-device$i.html#network-error">Network errors</a></li>
			      </ul>
			  </li>
};
		}
		$menu_str .= qq{
		    </ul>
		  </li>
                </ul>
              </li>
};
	}
	$menu_str .= qq{
              <li id="menu-about" class="dropdown"><a href="index.html#about">About</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </div>

};

	return $menu_str;
}

sub device_in_report
{
	my $device = shift;

	return 1 if ($#INCLUDE_DEV == -1);

	foreach my $g (@INCLUDE_DEV) {
		return 1 if (grep(/^$g$/, $device));
	}
	return 0;
}

sub interface_in_report
{
	my $device = shift;

	return 1 if ($#INCLUDE_IFACE == -1);

	foreach my $g (@INCLUDE_IFACE) {
		return 1 if (grep(/^$g$/, $device));
	}
	return 0;
}

sub compute_cpu_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);
		# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle
		# hostname;interval;timestamp;CPU;%usr;%nice;%sys;%iowait;%steal;%irq;%soft;%guest;%idle

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));

		map { s/,/\./ } @data ;
		# we only store all cpu statistics
		if ($data[3] eq 'all') {
			my $total_cpu = ($data[6]||0) + ($data[4]||0);
			$sar_cpu_stat{$data[2]}{$data[3]}{total}  = $total_cpu;
			$sar_cpu_stat{$data[2]}{$data[3]}{system} = ($data[6]||0);
			$sar_cpu_stat{$data[2]}{$data[3]}{user}   = ($data[4]||0);
			$sar_cpu_stat{$data[2]}{$data[3]}{iowait} = ($data[7]||0);
			$sar_cpu_stat{$data[2]}{$data[3]}{idle}   = ($data[-1]||0);
		}
	}
}

sub compute_cpu_report
{
	my $data_info = shift();

	my %cpu_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_cpu_stat) {
		foreach my $cpu (keys %{$sar_cpu_stat{$t}}) {
			
			if ($cpu eq 'all') {
				if (!exists $OVERALL_STATS{'system'}{'cpu'} || ($OVERALL_STATS{'system'}{'cpu'}[1] < $sar_cpu_stat{$t}{$cpu}{total})) {
					@{$OVERALL_STATS{'system'}{'cpu'}} = ($t, $sar_cpu_stat{$t}{$cpu}{total});
				}
			}
			$cpu_stat{$cpu}{total}  .= '[' . $t . ',' . $sar_cpu_stat{$t}{$cpu}{total} . '],';
			$cpu_stat{$cpu}{system} .= '[' . $t . ',' . $sar_cpu_stat{$t}{$cpu}{system} . '],';
			$cpu_stat{$cpu}{user}   .= '[' . $t . ',' . $sar_cpu_stat{$t}{$cpu}{user} . '],';
			$cpu_stat{$cpu}{iowait} .= '[' . $t . ',' . $sar_cpu_stat{$t}{$cpu}{iowait} . '],';
			$cpu_stat{$cpu}{idle}   .= '[' . $t . ',' . $sar_cpu_stat{$t}{$cpu}{idle} . '],';
		}
		$OVERALL_STATS{'system'}{'ncpu'} = (scalar keys %{$sar_cpu_stat{$t}}) - 1;
		$OVERALL_STATS{'sar_start_date'} = $t if (!$OVERALL_STATS{'sar_start_date'} || ($OVERALL_STATS{'sar_start_date'} gt $t));
		$OVERALL_STATS{'sar_end_date'} = $t if (!$OVERALL_STATS{'sar_end_date'} || ($OVERALL_STATS{'sar_end_date'} lt $t));
	}
	%sar_cpu_stat = ();

	if (scalar keys %cpu_stat > 0) {
		$cpu_stat{'all'}{total} =~ s/,$//;
		$cpu_stat{'all'}{system} =~ s/,$//;
		$cpu_stat{'all'}{user} =~ s/,$//;
		$cpu_stat{'all'}{iowait} =~ s/,$//;
		$cpu_stat{'all'}{idle} =~ s/,$//;

		print $FH &jqplot_linegraph_array($IDX++, 'system-cpu', $data_info, 'all', $cpu_stat{'all'}{total}, $cpu_stat{'all'}{system}, $cpu_stat{'all'}{user}, $cpu_stat{'all'}{iowait});
	}

}

sub compute_load_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;runq-sz;plist-sz;ldavg-1;ldavg-5;ldavg-15
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));

		map { s/,/\./ } @data ;
		$sar_load_stat{$data[2]}{'ldavg-1'}  = ($data[5]||0);
		$sar_load_stat{$data[2]}{'ldavg-5'}  = ($data[6]||0);
		$sar_load_stat{$data[2]}{'ldavg-15'} = ($data[7]||0);
	}
}

sub compute_load_report
{
	my $data_info = shift();

	my %load_stat = ();
	foreach my $t (sort { $a <=> $b } keys %sar_load_stat) {
		if (!exists $OVERALL_STATS{'system'}{'load'} || ($OVERALL_STATS{'system'}{'load'}[1] < $sar_load_stat{$t}{'ldavg-1'})) {
			@{$OVERALL_STATS{'system'}{'load'}} = ($t, $sar_load_stat{$t}{'ldavg-1'});
		}
		$load_stat{'ldavg-1'}  .= '[' . $t . ',' . $sar_load_stat{$t}{'ldavg-1'} . '],';
		$load_stat{'ldavg-5'}  .= '[' . $t . ',' . $sar_load_stat{$t}{'ldavg-5'} . '],';
		$load_stat{'ldavg-15'} .= '[' . $t . ',' . $sar_load_stat{$t}{'ldavg-15'} . '],';
	}
	%sar_load_stat = ();

	if (scalar keys %load_stat > 0) {
		$load_stat{'ldavg-1'} =~ s/,$//;
		$load_stat{'ldavg-5'} =~ s/,$//;
		$load_stat{'ldavg-15'} =~ s/,$//;
		print $FH &jqplot_linegraph_array($IDX++, 'system-load', $data_info, '', $load_stat{'ldavg-1'}, $load_stat{'ldavg-5'}, $load_stat{'ldavg-15'});
	}
}

sub compute_process_stat
{

	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;runq-sz;plist-sz;ldavg-1;ldavg-5;ldavg-15
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));

		map { s/,/\./ } @data ;
		$sar_process_stat{$data[2]}{'plist-sz'} = ($data[4]||0);
		$sar_process_stat{$data[2]}{'runq-sz'} .= ($data[3]||0);
	}
}

sub compute_process_report
{
	my $data_info = shift();

	my %process_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_process_stat) {
		if (!exists $OVERALL_STATS{'system'}{'process'} || ($OVERALL_STATS{'system'}{'process'}[1] < $sar_process_stat{$t}{'plist-sz'})) {
			@{$OVERALL_STATS{'system'}{'process'}} = ($t, $sar_process_stat{$t}{'plist-sz'});
		}
		$process_stat{'plist-sz'} .= '[' . $t . ',' . $sar_process_stat{$t}{'plist-sz'} . '],' if (exists $sar_process_stat{$t}{'plist-sz'});
		$process_stat{'runq-sz'}  .= '[' . $t . ',' . $sar_process_stat{$t}{'runq-sz'} . '],' if (exists $sar_process_stat{$t}{'runq-sz'});
	}
	if (scalar keys %process_stat > 0) {
		if ($data_info->{name} eq 'system-process') {
			$process_stat{'plist-sz'} =~ s/,$//;
			print $FH &jqplot_linegraph_array($IDX++, 'system-process', $data_info, '', $process_stat{'plist-sz'});
		} elsif ($data_info->{name} eq 'system-runqueue') {
			$process_stat{'runq-sz'} =~ s/,$//;
			print $FH &jqplot_linegraph_array($IDX++, 'system-runqueue', $data_info, '', $process_stat{'runq-sz'});
		}
	}
}

sub compute_context_stat
{

	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;proc;cswch
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));

		map { s/,/\./ } @data ;
		$sar_context_stat{$data[2]}{'cswch'}  = ($data[4]||0);
		$sar_context_stat{$data[2]}{'pcrea'}  = ($data[3]||0);
	}
}

sub compute_context_report
{
	my $data_info = shift();

	my %context_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_context_stat) {
		if (!exists $OVERALL_STATS{'system'}{'cswch'} || ($OVERALL_STATS{'system'}{'cswch'}[1] < $sar_context_stat{$t}{'cswch'})) {
			@{$OVERALL_STATS{'system'}{'cswch'}} = ($t, $sar_context_stat{$t}{'cswch'});
		}
		if ($data_info->{name} eq 'system-cswch') {
			$context_stat{'cswch'}  .= '[' . $t . ',' . $sar_context_stat{$t}{'cswch'} . '],';
		} elsif ($data_info->{name} eq 'system-pcrea') {
			$context_stat{'pcrea'}   .= '[' . $t . ',' . $sar_context_stat{$t}{'pcrea'} . '],';
		}
	}
	if (scalar keys %context_stat > 0) {
		if ($data_info->{name} eq 'system-cswch') {
			$context_stat{'cswch'} =~ s/,$//;
			print $FH &jqplot_linegraph_array($IDX++, 'system-cswch', $data_info, '', $context_stat{'cswch'});
		} elsif ($data_info->{name} eq 'system-pcrea') {
			$context_stat{'pcrea'} =~ s/,$//;
			print $FH &jqplot_linegraph_array($IDX++, 'system-pcrea', $data_info, '', $context_stat{'pcrea'});
		}
	}
}

sub compute_memory_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;kbmemfree;kbmemused;%memused;kbbuffers;kbcached;kbcommit;%commit
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));

		map { s/,/\./ } @data ;
		my $kbcached = ($data[7]*1024) || 0;
		$sar_memory_stat{$data[2]}{'kbcached'}  = $kbcached;
		$sar_memory_stat{$data[2]}{'kbbuffers'} = ($data[6]*1024)||0;
		$sar_memory_stat{$data[2]}{'kbmemfree'} = ($data[3]*1024)||0;
	}
}

sub compute_memory_report
{
	my $data_info = shift();

	my %memory_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_memory_stat) {
		if (!exists $OVERALL_STATS{'system'}{'kbcached'} || ($OVERALL_STATS{'system'}{'kbcached'}[1] > $sar_memory_stat{$t}{'kbcached'})) {
			@{$OVERALL_STATS{'system'}{'kbcached'}} = ($t, $sar_memory_stat{$t}{'kbcached'});
		}
		$memory_stat{'kbcached'}  .= '[' . $t . ',' . $sar_memory_stat{$t}{'kbcached'} . '],';
		$memory_stat{'kbbuffers'} .= '[' . $t . ',' . $sar_memory_stat{$t}{'kbbuffers'} . '],';
		$memory_stat{'kbmemfree'} .= '[' . $t . ',' . $sar_memory_stat{$t}{'kbmemfree'} . '],';
	}
	%sar_memory_stat = ();
	if (scalar keys %memory_stat > 0) {
		$memory_stat{'kbcached'} =~ s/,$//;
		$memory_stat{'kbbuffers'} =~ s/,$//;
		$memory_stat{'kbmemfree'} =~ s/,$//;
		print $FH &jqplot_linegraph_array($IDX++, 'system-memory', $data_info, '', $memory_stat{'kbcached'}, $memory_stat{'kbbuffers'}, $memory_stat{'kbmemfree'});
	}
}

sub compute_swap_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;pswpin/s;pswpout/s
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));

		map { s/,/\./ } @data ;
		$sar_swap_stat{$data[2]}{'pswpin/s'}  = ($data[3]||0);
		$sar_swap_stat{$data[2]}{'pswpout/s'} = ($data[4]||0);
	}
}

sub compute_swap_report
{
	my $data_info = shift();

	my %swap_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_swap_stat) {
		if (!exists $OVERALL_STATS{'system'}{'pswpin'} || ($OVERALL_STATS{'system'}{'pswpin'}[1] < $sar_swap_stat{$t}{'pswpin/s'})) {
			@{$OVERALL_STATS{'system'}{'pswpin'}} = ($t, $sar_swap_stat{$t}{'pswpin/s'});
		}
		if (!exists $OVERALL_STATS{'system'}{'pswpout'} || ($OVERALL_STATS{'system'}{'pswpout'}[1] < $sar_swap_stat{$t}{'pswpout/s'})) {
			@{$OVERALL_STATS{'system'}{'pswpout'}} = ($t, $sar_swap_stat{$t}{'pswpout/s'});
		}
		$swap_stat{'pswpin/s'}  .= '[' . $t . ',' . $sar_swap_stat{$t}{'pswpin/s'} . '],';
		$swap_stat{'pswpout/s'} .= '[' . $t . ',' . $sar_swap_stat{$t}{'pswpout/s'} . '],';
	}
	%sar_swap_stat = ();
	if (scalar keys %swap_stat > 0) {
		$swap_stat{'pswpin/s'} =~ s/,$//;
		$swap_stat{'pswpout/s'} =~ s/,$//;
		print $FH &jqplot_linegraph_array($IDX++, 'system-swap', $data_info, '', $swap_stat{'pswpin/s'}, $swap_stat{'pswpout/s'});
	}
}

sub compute_page_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;pgpgin/s;pgpgout/s;fault/s;majflt/s;pgfree/s;pgscank/s;pgscand/s;pgsteal/s;%vmeff
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));

		map { s/,/\./ } @data ;
		$sar_pageswap_stat{$data[2]}{'pgpgin/s'}  = ($data[3]||0);
		$sar_pageswap_stat{$data[2]}{'pgpgout/s'} = ($data[4]||0);
		$sar_pageswap_stat{$data[2]}{'majflt/s'}  = ($data[6]||0);
	}
}

sub compute_page_report
{
	my $data_info = shift();

	my %pageswap_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_pageswap_stat) {
		if (!exists $OVERALL_STATS{'system'}{'pgpgin'} || ($OVERALL_STATS{'system'}{'pgpgin'}[1] < $sar_pageswap_stat{$t}{'pgpgin/s'})) {
			@{$OVERALL_STATS{'system'}{'pgpgin'}} = ($t, $sar_pageswap_stat{$t}{'pgpgin/s'});
		}
		if (!exists $OVERALL_STATS{'system'}{'pgpgout'} || ($OVERALL_STATS{'system'}{'pgpgout'}[1] < $sar_pageswap_stat{$t}{'pgpgout/s'})) {
			@{$OVERALL_STATS{'system'}{'pgpgout'}} = ($t, $sar_pageswap_stat{$t}{'pgpgout/s'});
		}
		if (!exists $OVERALL_STATS{'system'}{'majflt'} || ($OVERALL_STATS{'system'}{'majflt'}[1] < $sar_pageswap_stat{$t}{'majflt/s'})) {
			@{$OVERALL_STATS{'system'}{'majflt'}} = ($t, $sar_pageswap_stat{$t}{'majflt/s'});
		}
		$pageswap_stat{'pgpgin/s'}  .= '[' . $t . ',' . $sar_pageswap_stat{$t}{'pgpgin/s'} . '],';
		$pageswap_stat{'pgpgout/s'} .= '[' . $t . ',' . $sar_pageswap_stat{$t}{'pgpgout/s'} . '],';
		$pageswap_stat{'majflt/s'}  .= '[' . $t . ',' . $sar_pageswap_stat{$t}{'majflt/s'} . '],';
	}
	%sar_pageswap_stat = ();
	if (scalar keys %pageswap_stat > 0) {
		$pageswap_stat{'pgpgin/s'} =~ s/,$//;
		$pageswap_stat{'pgpgout/s'} =~ s/,$//;
		$pageswap_stat{'majflt/s'} =~ s/,$//;
		print $FH &jqplot_linegraph_array($IDX++, 'system-page', $data_info, '', $pageswap_stat{'pgpgin/s'}, $pageswap_stat{'pgpgout/s'}, $pageswap_stat{'majflt/s'});
	}
}

sub compute_block_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;tps;rtps;wtps;bread/s;bwrtn/s
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));

		map { s/,/\./ } @data;
		$sar_block_stat{$data[2]}{'bread/s'} = ($data[6]||0);
		$sar_block_stat{$data[2]}{'bwrtn/s'} = ($data[7]||0);
		$sar_block_stat{$data[2]}{'tps'} = ($data[3]||0);
		$sar_block_stat{$data[2]}{'rtps'} = ($data[4]||0);
		$sar_block_stat{$data[2]}{'wtps'} = ($data[5]||0);
	}
}

sub compute_block_report
{
	my $data_info = shift();

	my %block_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_block_stat) {
		if (!exists $OVERALL_STATS{'system'}{'bread'} || ($OVERALL_STATS{'system'}{'bread'}[1] < $sar_block_stat{$t}{'bread/s'})) {
			@{$OVERALL_STATS{'system'}{'bread'}} = ($t, $sar_block_stat{$t}{'bread/s'});
		}
		if (!exists $OVERALL_STATS{'system'}{'bwrite'} || ($OVERALL_STATS{'system'}{'bwrite'}[1] < $sar_block_stat{$t}{'bwrtn/s'})) {
			@{$OVERALL_STATS{'system'}{'bwrite'}} = ($t, $sar_block_stat{$t}{'bwrtn/s'});
		}
		$block_stat{'bread/s'} .= '[' . $t . ',' . $sar_block_stat{$t}{'bread/s'} . '],';
		$block_stat{'bwrtn/s'} .= '[' . $t . ',' . $sar_block_stat{$t}{'bwrtn/s'} . '],';
		$block_stat{'tps'} .= '[' . $t . ',' . $sar_block_stat{$t}{'tps'} . '],';
		$block_stat{'rtps'} .= '[' . $t . ',' . $sar_block_stat{$t}{'rtps'} . '],';
		$block_stat{'wtps'} .= '[' . $t . ',' . $sar_block_stat{$t}{'wtps'} . '],';
	}
	if (scalar keys %block_stat > 0) {
		if ($data_info->{name} eq 'system-block') {
			%sar_block_stat = ();
			$block_stat{'bread/s'} =~ s/,$//;
			$block_stat{'bwrtn/s'} =~ s/,$//;
			print $FH &jqplot_linegraph_array($IDX++, 'system-block', $data_info, '', $block_stat{'bread/s'}, $block_stat{'bwrtn/s'});
		} elsif ($data_info->{name} eq 'system-tps') {
			$block_stat{'tps'} =~ s/,$//;
			$block_stat{'rtps'} =~ s/,$//;
			$block_stat{'wtps'} =~ s/,$//;
			print $FH &jqplot_linegraph_array($IDX++, 'system-tps', $data_info, '', $block_stat{'tps'}, $block_stat{'rtps'}, $block_stat{'wtps'});
		}
	}
}

sub compute_srvtime_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;DEV;tps;rd_sec/s;wr_sec/s;avgrq-sz;avgqu-sz;await;svctm;%util
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));
		next if (!&device_in_report($data[3]));

		map { s/,/\./ } @data ;
		$sar_srvtime_stat{$data[2]}{$data[3]}{'await'} = ($data[9]||0);
		$sar_srvtime_stat{$data[2]}{$data[3]}{'svctm'} = ($data[10]||0);
	}
}

sub compute_srvtime_report
{
	my $data_info = shift();
	my $src_base = shift();

	my %srvtime_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_srvtime_stat) {
		foreach my $dev (keys %{$sar_srvtime_stat{$t}}) {
			if (!exists $OVERALL_STATS{'system'}{'svctm'} || ($OVERALL_STATS{'system'}{'svctm'}[1] < $sar_srvtime_stat{$t}{$dev}{'svctm'})) {
				@{$OVERALL_STATS{'system'}{'svctm'}} = ($t, $sar_srvtime_stat{$t}{$dev}{'svctm'}, $dev);
			}
			$srvtime_stat{$dev}{'await'} .= '[' . $t . ',' . $sar_srvtime_stat{$t}{$dev}{'await'} . '],';
			$srvtime_stat{$dev}{'svctm'} .= '[' . $t . ',' . $sar_srvtime_stat{$t}{$dev}{'svctm'} . '],';
		}
	}
	%sar_srvtime_stat = ();
	if (scalar keys %srvtime_stat > 0) {
		foreach my $n (sort { $a cmp $b } keys %srvtime_stat) {
			if (!exists $DEVFH{$n}) {
				push(@DEVICE_LIST, $n);
				&init_device_output($#DEVICE_LIST, $src_base);
			}
			$srvtime_stat{$n}{'await'} =~ s/,$//;
			$srvtime_stat{$n}{'svctm'} =~ s/,$//;
			$DEVFH{$n}->print( &jqplot_linegraph_array($IDX++, 'device-service_time', $data_info, $n, $srvtime_stat{$n}{'svctm'}, $srvtime_stat{$n}{'await'}) );
		}
	}
}

sub compute_rw_device_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;DEV;tps;rd_sec/s;wr_sec/s;avgrq-sz;avgqu-sz;await;svctm;%util
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));
		next if (!&device_in_report($data[3]));

		map { s/,/\./ } @data ;
		$sar_rw_devices_stat{$data[2]}{$data[3]}{'rd_sec/s'} = ($data[5]*512);
		$sar_rw_devices_stat{$data[2]}{$data[3]}{'wr_sec/s'} = ($data[6]*512);
		$sar_rw_devices_stat{$data[2]}{$data[3]}{'tps'}      = ($data[4]||0);
	}
}

sub compute_rw_device_report
{
	my $data_info = shift();
	my $src_base = shift();

	my %devices_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_rw_devices_stat) {
		foreach my $dev (keys %{$sar_rw_devices_stat{$t}}) {
			if ($data_info->{name} eq 'system-device') { 
				$OVERALL_STATS{'system'}{'devices'}{$dev}{read} += $sar_rw_devices_stat{$t}{$dev}{'rd_sec/s'};
				$OVERALL_STATS{'system'}{'devices'}{$dev}{write} += $sar_rw_devices_stat{$t}{$dev}{'wr_sec/s'};
				$devices_stat{$dev}{'rd_sec/s'} .= '[' . $t . ',' . $sar_rw_devices_stat{$t}{$dev}{'rd_sec/s'} . '],';
				$devices_stat{$dev}{'wr_sec/s'} .= '[' . $t . ',' . $sar_rw_devices_stat{$t}{$dev}{'wr_sec/s'} . '],';
			} elsif ($data_info->{name} eq 'system-tpsdevice') {
				$devices_stat{$dev}{'tps'}      .= '[' . $t . ',' . $sar_rw_devices_stat{$t}{$dev}{'tps'} . '],';
				$OVERALL_STATS{'system'}{'devices'}{$dev}{tps} = $sar_rw_devices_stat{$t}{$dev}{'tps'} if (!$OVERALL_STATS{'system'}{'devices'}{$dev}{tps} || ($OVERALL_STATS{'system'}{'devices'}{$dev}{tps} < $sar_rw_devices_stat{$t}{$dev}{'tps'}));
			}
		}
	}

	if (scalar keys %devices_stat > 0) {
		foreach my $n (sort { $a cmp $b } keys %devices_stat) {
			if (!exists $DEVFH{$n}) {
				push(@DEVICE_LIST, $n);
				&init_device_output($#DEVICE_LIST, $src_base);
			}
			if ($data_info->{name} eq 'system-device') { 
				$devices_stat{$n}{'rd_sec/s'} =~ s/,$//;
				$devices_stat{$n}{'wr_sec/s'} =~ s/,$//;
				$DEVFH{$n}->print( &jqplot_linegraph_array($IDX++, 'device-read_write', $data_info, $n, $devices_stat{$n}{'rd_sec/s'}, $devices_stat{$n}{'wr_sec/s'}) );
			} elsif ($data_info->{name} eq 'system-tpsdevice') {
				$devices_stat{$n}{'tps'} =~ s/,$//;
				$DEVFH{$n}->print( &jqplot_linegraph_array($IDX++, 'device-tps', $data_info, $n, $devices_stat{$n}{'tps'}) );
			}
		}
	}
}

sub compute_util_device_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;DEV;tps;rd_sec/s;wr_sec/s;avgrq-sz;avgqu-sz;await;svctm;%util
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));
		next if (!&device_in_report($data[3]));

		map { s/,/\./ } @data ;
		$sar_util_devices_stat{$data[2]}{$data[3]}{'%util'} = ($data[11]||0);
	}
}

sub compute_util_device_report
{
	my $data_info = shift();
	my $src_base = shift();

	my %devices_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_util_devices_stat) {
		foreach my $dev (keys %{$sar_util_devices_stat{$t}}) {
			$devices_stat{$dev}{'%util'} .= '[' . $t . ',' . $sar_util_devices_stat{$t}{$dev}{'%util'} . '],';
		}
	}
	%sar_util_devices_stat = ();
	if (scalar keys %devices_stat > 0) {
		foreach my $n (sort { $a cmp $b } keys %devices_stat) {
			if (!exists $DEVFH{$n}) {
				push(@DEVICE_LIST, $n);
				&init_device_output($#DEVICE_LIST, $src_base);
			}
			$devices_stat{$n}{'%util'} =~ s/,$//;
			$DEVFH{$n}->print( &jqplot_linegraph_array($IDX++, 'device-cpu', $data_info, $n, $devices_stat{$n}{'%util'}) );
		}
	}
}

sub compute_network_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;IFACE;rxpck/s;txpck/s;rxkB/s;txkB/s;rxcmp/s;txcmp/s;rxmcst/s
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));
		next if (!&interface_in_report($data[3]));

		map { s/,/\./ } @data ;
		$sar_networks_stat{$data[2]}{$data[3]}{'rxkB/s'} = ($data[6]*1024);
		$sar_networks_stat{$data[2]}{$data[3]}{'txkB/s'} = ($data[7]*1024);
	}
}

sub compute_network_report
{
	my $data_info = shift();
	my $src_base = shift();

	my %networks_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_networks_stat) {
		foreach my $dev (keys %{$sar_networks_stat{$t}}) {
			$networks_stat{$dev}{'rxkB/s'} .= '[' . $t . ',' . $sar_networks_stat{$t}{$dev}{'rxkB/s'} . '],';
			$networks_stat{$dev}{'txkB/s'} .= '[' . $t . ',' . $sar_networks_stat{$t}{$dev}{'txkB/s'} . '],';
		}
	}
	%sar_networks_stat = ();
	
	if (scalar keys %networks_stat > 0) {
		foreach my $n (sort { $a cmp $b } keys %networks_stat) {
			if (!exists $DEVFH{$n}) {
				push(@DEVICE_LIST, $n);
				&init_device_output($#DEVICE_LIST, $src_base);
			}
			$networks_stat{$n}{'rxkB/s'} =~ s/,$//;
			$networks_stat{$n}{'txkB/s'} =~ s/,$//;
			$DEVFH{$n}->print( &jqplot_linegraph_array($IDX++, 'network-utilization', $data_info, $n, $networks_stat{$n}{'rxkB/s'}, $networks_stat{$n}{'txkB/s'}) ) if (exists $DEVFH{$n});
		}
	}
}

sub compute_network_error_stat
{
	for (my $i = 0; $i <= $#_; $i++) {
		# hostname;interval;timestamp;IFACE;rxerr/s;txerr/s;coll/s;rxdrop/s;txdrop/s;txcarr/s;rxfram/s;rxfifo/s;txfifo/s
		my @data = split(/;/, $_[$i]);
		next if ($data[2] !~ /^\d+/);

		# Skip unwanted lines
		next if ($BEGIN && ($data[2] < $BEGIN));
		next if ($END   && ($data[2] > $END));
		next if (!&interface_in_report($data[3]));

		map { s/,/\./ } @data ;
		$sar_neterror_stat{$data[2]}{$data[3]}{'rxerr/s'} = $data[4] || 0;
		$sar_neterror_stat{$data[2]}{$data[3]}{'txerr/s'} = $data[5] || 0;
		$sar_neterror_stat{$data[2]}{$data[3]}{'coll/s'}  = $data[6] || 0;
	}
}

sub compute_network_error_report
{
	my $data_info = shift();
	my $src_base = shift();

	my %errors_stat = ();
	foreach my $t (sort {$a <=> $b} keys %sar_networks_stat) {
		foreach my $dev (keys %{$sar_networks_stat{$t}}) {
			$errors_stat{$dev}{'rxerr/s'} .= '[' . $t . ',' . $sar_neterror_stat{$t}{$dev}{'rxerr/s'} . '],';
			$errors_stat{$dev}{'txerr/s'} .= '[' . $t . ',' . $sar_neterror_stat{$t}{$dev}{'txerr/s'} . '],';
			$errors_stat{$dev}{'coll/s'}  .= '[' . $t . ',' . $sar_neterror_stat{$t}{$dev}{'coll/s'} . '],';
		}
	}
	if (scalar keys %errors_stat > 0) {
		foreach my $n (sort { $a cmp $b } keys %errors_stat) {
			if (!exists $DEVFH{$n}) {
				push(@DEVICE_LIST, $n);
				&init_device_output($#DEVICE_LIST, $src_base);
			}
			$errors_stat{$n}{'rxerr/s'} =~ s/,$//;
			$errors_stat{$n}{'txerr/s'} =~ s/,$//;
			$errors_stat{$n}{'coll/s'} =~ s/,$//;
			$DEVFH{$n}->print( &jqplot_linegraph_array($IDX++, 'network-error', $data_info, $n, $errors_stat{$n}{'rxerr/s'}, $errors_stat{$n}{'txerr/s'}, $errors_stat{$n}{'coll/s'}) ) if (exists $DEVFH{$n});
		}
	}
}

sub compute_sarstat_stats
{
	my ($file, %data_info) = @_;

	####
	# Get CPU utilization
	####
	if ($data_info{name} eq 'system-cpu') {
		my $command = "$SADF_PROG -t -P ALL -D $file";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute cpu statistics
		&compute_cpu_stat(@content);
	}

	####
	# Get load average
	####
	if ($data_info{name} eq 'system-load') {
		my $command = "$SADF_PROG -t -D $file -- -q";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute load statistics
		&compute_load_stat(@content);
	}

	####
	# Get process number
	####
	if ($data_info{name} eq 'system-process') {
		my $command = "$SADF_PROG -t -D $file -- -q";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute process statistics
		&compute_process_stat(@content);
	}

	####
	# Get run queue length
	####
	if ($data_info{name} eq 'system-runqueue') {
		my $command = "$SADF_PROG -t -D $file -- -q";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute runqueue statistics
		&compute_process_stat(@content);
	}

	####
	# Get context swiches
	####
	if ($data_info{name} eq 'system-cswch') {
		my $command = "$SADF_PROG -t -D $file -- -w";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute context switches statistics
		&compute_context_stat(@content);
	}

	####
	# Get tasks created per second
	####
	if ($data_info{name} eq 'system-pcrea') {
		my $command = "$SADF_PROG -t -D $file -- -w";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute process creation statistics
		&compute_context_stat(@content);
	}


	####
	# Get memory utilization
	####
	if ($data_info{name} eq 'system-memory') {
		my $command = "$SADF_PROG -t -D $file -- -r";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute graphs for memory statistics
		&compute_memory_stat(@content);
	}

	####
	# Get swap utilization
	####
	if ($data_info{name} eq 'system-swap') {
		my $command = "$SADF_PROG -t -D $file -- -W";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute swap statistics
		&compute_swap_stat(@content);
	}

	####
	# Get page utilization
	####
	if ($data_info{name} eq 'system-page') {
		my $command = "$SADF_PROG -t -D $file -- -B";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute page swap statistics
		&compute_page_stat(@content);
	}

	####
	# Get block in/out
	####
	if ($data_info{name} eq 'system-block') {
		my $command = "$SADF_PROG -t -D $file -- -b";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute block statistics
		&compute_block_stat(@content);
	}

	####
	# Get TPS
	####
	if ($data_info{name} eq 'system-tps') {
		my $command = "$SADF_PROG -t -D $file -- -b";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute block statistics
		&compute_block_stat(@content);
	}

	####
	# Get Device service time
	####
	if ($data_info{name} eq 'system-srvtime') {
		my $command = "$SADF_PROG -t -P ALL -D $file -- -d -p";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute service time per devices statistics
		&compute_srvtime_stat(@content);
	}


	####
	# Get Device block read/write utilization
	####
	if ($data_info{name} eq 'system-device') {
		my $command = "$SADF_PROG -t -P ALL -D $file -- -d -p";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute I/O per devices statistics
		&compute_rw_device_stat(@content);
	}

	####
	# Get per device TPS utilization
	####
	if ($data_info{name} eq 'system-tpsdevice') {
		my $command = "$SADF_PROG -t -P ALL -D $file -- -d -p";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute I/O per devices statistics
		&compute_rw_device_stat(@content);
	}

	####
	# Get Device utilization
	####
	if ($data_info{name} eq 'system-cpudevice') {
		my $command = "$SADF_PROG -t -P ALL -D $file -- -d -p";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute cpu utilization per devices statistics
		&compute_util_device_stat(@content);
	}


	####
	# Get network interface utilization
	####
	if ($data_info{name} eq 'network-utilization') {
		my $command = "$SADF_PROG -t -P ALL -D $file -- -n DEV";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute network statistics
		&compute_network_stat(@content);
	}

	####
	# Get network errors utilization
	####
	if ($data_info{name} eq 'network-error') {
		my $command = "$SADF_PROG -t -P ALL -D $file -- -n EDEV";
		print "DEBUG: running $command'\n" if ($DEBUG);
		# Load data from file
		if (!open(IN, "$command |")) {
			die "FATAL: can't read output from command ($command): $!\n";
		}
		my @content = <IN>;
		close(IN);
		chomp(@content);

		# Compute network errors statistics
		&compute_network_error_stat(@content);
	}
}

sub find_report_type
{
	my $data = shift;
	my $type = '';

	if ($data =~ m#cswch/s#) {
		$type = 'cswch';
	} elsif ($data =~ m#proc/s#) {
		$type = 'pcrea';
	} elsif ($data =~ m#CPU\s+i\d+#) {
		$type = 'ncpu';
	} elsif ($data =~ m#CPU\s+M#) {
		$type = 'scpu';
	} elsif ($data =~ m#CPU\s+w#) {
		$type = 'wcpu';
	} elsif ($data =~ m#CPU\s+#) {
		$type = 'cpu';
	} elsif ($data =~ m#INTR\s+#) {
		$type = 'intr';
	} elsif ($data =~ m#pgpgin/s\s+#) {
		$type = 'page';
	} elsif ($data =~ m#pswpin/s\s+#) {
		$type = 'pswap';
	} elsif ( ($data =~ m#tps\s+#) && ($data !~ m#DEV\s+#) ) {
		$type = 'io';
	} elsif ($data =~ m#frmpg/s\s+#) {
		$type = 'mpage';
	} elsif ($data =~ m#TTY\s+#) {
		$type = 'tty';
	} elsif ($data =~ m#IFACE\s+rxpck/s\s+#) {
		$type = 'net';
	} elsif ($data =~ m#IFACE\s+rxerr/s\s+#) {
		$type = 'err';
	} elsif ($data =~ m#DEV\s+#) {
		$type = 'dev';
	} elsif ($data =~ m#kbmemfree\s+#) {
		$type = 'mem';
	# New in sysstat 8.1.5
	} elsif ($data =~ m#kbswpfree\s+#) {
		$type = 'swap';
	} elsif ($data =~ m#dentunusd\s+#) {
		$type = 'file';
	} elsif ($data =~ m#totsck\s+#) {
		$type = 'sock';
	} elsif ($data =~ m#runq-sz\s+#) {
		$type = 'load';
	# New in 8.1.7
	} elsif ($data =~ m#active\/s\s+#) {
		$type = 'tcp';
	}

	return $type;
}

sub compute_sarfile_stats
{
	my ($file, %data_info) = @_;

	my $interval = 0;
	my $hostname = 'unknown';

	# Load data from file
	if (!is_compressed($file)) {
		open(IN, $file) or die "ERROR: can't read file $file, $!\n";
	} else {
		open(IN, "$ZCAT_PROG $file |") or die "ERROR: can't read pipe on command: $ZCAT_PROG $file, $!\n";
	}
	my @content = ();
	while (my $l = <IN>) {
		chomp($l);
		$l =~ s/\r//;
		# Skip kernel header part
		if ( ($l eq '') || ($l =~ /^\d+:\d+:\d+/) || ($l =~ /\d+\/\d+\/\d+/)) {
			push(@content, $l);
		}
	}
	close(IN);

	my $type = '';
	my @headers = ();
	my %fulldata = ();
	my $old_time = 0;
	my $orig_time = 0;

	for (my $i = 0; $i <= $#content; $i++) {

		# Empty line, maybe the end of a report
		if ($content[$i] eq '') {
			$type = '';
			@headers = ();
			$old_time = 0 if ($FROM_SA_FILE);
			next;
		}
		# look for kernel header to find the date
		if ( ($content[$i] !~ /^\d+:\d+:\d+/) && ($content[$i] =~ /(\d+)\/(\d+)\/(\d+)/) ) {
			$sar_month = $1;
			$sar_day = $2;
			$sar_year = $3;
			if (length($sar_year) == 2) {
				$sar_year += 2000;
			}
			if ($REVERT_DATE || ($sar_month > 12)) {
				my $tmp = $sar_day;
				$sar_day = $sar_month;
				$sar_month = $tmp;
			}
			$type = '';
			@headers = ();
			next;
		}
		# Remove average header if any
		if ( ($content[$i] !~ /^\d+:\d+:\d+/) && ($content[$i] =~ /^\D:\s+/) ) {
			$type = '';
			@headers = ();
			next;
		}

		if ($#headers == -1) {
			push(@headers, split(m#\s+#, $content[$i]));
			shift(@headers);
			# Try to find the kind of report
			$type = &find_report_type($content[$i]);
			if (!$type) {
				@headers = ();
			} else {
				push(@{$fulldata{$type}}, "hostname;interval;timestamp;" . join(";", @headers));
			}
			next;
		}

		# Remove AM|PM timestamp information
		my $am_pm = '';
		if ($content[$i] =~ s/^(\d+:\d+:\d+)\s(AM|PM)/$1/) {
			$am_pm = $2;
			shift(@headers) if ($headers[0] =~ /^(AM|PM)$/);
		}
		# Get all values reported
		my @values = ();
		push(@values, split(m#\s+#, $content[$i]));
		# Extract the timestamp of the line
		my $timestamp = shift(@values);

		if ($#values != $#headers) {
			warn "ERROR: Parsing of sar output reports different values than headers allow. ($#values != $#headers)\n";
			die "Header: " . join(';', @headers) . " | Values: " . join(';', @values) . "\n";
		}
		if ($timestamp =~ /(\d+:\d+:\d+)/) {
			$timestamp = &convert_sar_time($1, $old_time, $am_pm);
			$old_time = $timestamp;
		}
		if (!$timestamp) {
			print STDERR "ERROR: unkown time information from sar file.\n";
			print STDERR "HEADER: $timestamp ", join(" ", @headers), "\n";
			die "DATA: $content[$i]\n";
		}

		# Change decimal character to perl
		map { s/,/\./; } @values;
		push(@{$fulldata{$type}}, "$hostname;$interval;$timestamp;" . join(";", @values));
	}
	@content = ();

	####
	# Set CPU utilization
	####
	if ($data_info{name} eq 'system-cpu') {

		# Compute cpu statistics
		&compute_cpu_stat(@{$fulldata{cpu}});

	}

	####
	# Set load average
	####
	if ($data_info{name} eq 'system-load') {

		# Compute load statistics
		&compute_load_stat(@{$fulldata{load}});

	}

	####
	# Set process number
	####
	if ($data_info{name} eq 'system-process') {

		# Compute process statistics
		&compute_process_stat(@{$fulldata{load}});

	}

	####
	# Set run queue length
	####
	if ($data_info{name} eq 'system-runqueue') {

		# Compute runqueue statistics
		&compute_process_stat(@{$fulldata{load}});

	}

	####
	# Set context switches
	####
	if ($data_info{name} eq 'system-cswch') {

		# Compute context switches statistics
		&compute_context_stat(@{$fulldata{cswch}});

	}

	####
	# Set process created per second
	####
	if ($data_info{name} eq 'system-pcrea') {

		# Compute process created per second statistics
		&compute_context_stat(@{$fulldata{cswch}});

	}

	####
	# Set memory utilization
	####
	if ($data_info{name} eq 'system-memory') {

		# Compute memory statistics
		&compute_memory_stat(@{$fulldata{mem}});

	}

	####
	# Set swap utilization
	####
	if ($data_info{name} eq 'system-swap') {

		# Compute swap statistics
		&compute_swap_stat(@{$fulldata{pswap}});

	}

	####
	# Set page utilization
	####
	if ($data_info{name} eq 'system-page') {

		# Compute page swap statistics
		&compute_page_stat(@{$fulldata{page}});

	}

	####
	# Set block in/out
	####
	if ($data_info{name} eq 'system-block') {

		# Compute block statistics
		&compute_block_stat(@{$fulldata{io}});

	}

	####
	# Set TPS
	####
	if ($data_info{name} eq 'system-tps') {

		# Compute block statistics
		&compute_block_stat(@{$fulldata{io}});

	}


	####
	# Set Device service time
	####
	if ($data_info{name} eq 'system-srvtime') {

		# Compute service time per devices statistics
		&compute_srvtime_stat(@{$fulldata{dev}});

	}

	####
	# Set Device read/write utilization
	####
	if ($data_info{name} eq 'system-device') {

		# Compute I/O per devices statistics
		&compute_rw_device_stat(@{$fulldata{dev}});

	}

	####
	# Set Device read/write utilization
	####
	if ($data_info{name} eq 'system-tpsdevice') {

		# Compute I/O per devices statistics
		&compute_rw_device_stat(@{$fulldata{dev}});

	}

	####
	# Set Device utilization
	####
	if ($data_info{name} eq 'system-cpudevice') {

		# Compute cpu utilization per devices statistics
		&compute_util_device_stat(@{$fulldata{dev}});

	}

	####
	# Set network utilization
	####
	if ($data_info{name} eq 'network-utilization') {

		# Compute block statistics
		&compute_network_stat(@{$fulldata{net}});

	}

	####
	# Set network error utilization
	####
	if ($data_info{name} eq 'network-error') {

		# Compute network error statistics
		&compute_network_error_stat(@{$fulldata{err}});

	}

}

sub compute_sar_graph
{
	my ($src_base, %data_info) = @_;

	####
	# Show CPU utilization
	####
	if ($data_info{name} eq 'system-cpu') {

		# Compute graphs for cpu statistics
		&compute_cpu_report(\%data_info);

	}

	####
	# Show load average
	####
	if ($data_info{name} eq 'system-load') {

		# Compute graphs for load statistics
		&compute_load_report(\%data_info);

	}

	####
	# Show process number
	####
	if ($data_info{name} eq 'system-process') {

		# Compute graphs for process statistics
		&compute_process_report(\%data_info);

	}

	####
	# Show run queue length
	####
	if ($data_info{name} eq 'system-runqueue') {

		# Compute graphs for runqueue statistics
		&compute_process_report(\%data_info);

	}

	####
	# Show context switches
	####
	if ($data_info{name} eq 'system-cswch') {

		# Compute graphs for context switches statistics
		&compute_context_report(\%data_info);

	}

	####
	# Show process created per second
	####
	if ($data_info{name} eq 'system-pcrea') {

		# Compute graphs for number of process created per second statistics
		&compute_context_report(\%data_info);

	}

	####
	# Show memory utilization
	####
	if ($data_info{name} eq 'system-memory') {

		# Compute graphs for memory statistics
		&compute_memory_report(\%data_info);

	}

	####
	# Show swap utilization
	####
	if ($data_info{name} eq 'system-swap') {

		# Compute graphs for swap statistics
		&compute_swap_report(\%data_info);

	}

	####
	# Show page utilization
	####
	if ($data_info{name} eq 'system-page') {

		# Compute graphs for page swap statistics
		&compute_page_report(\%data_info);

	}

	####
	# Show block in/out
	####
	if ($data_info{name} eq 'system-block') {

		# Compute graphs for block statistics
		&compute_block_report(\%data_info);

	}

	####
	# Show TPS
	####
	if ($data_info{name} eq 'system-tps') {

		# Compute graphs for block statistics
		&compute_block_report(\%data_info);

	}


	####
	# Show Device service time
	####
	if ($data_info{name} eq 'system-srvtime') {

		# Compute graphs for service time per device statistics
		&compute_srvtime_report(\%data_info, $src_base);

	}

	####
	# Show Device read/write utilization
	####
	if ($data_info{name} eq 'system-device') {

		# Compute graphs for I/O per devices statistics
		&compute_rw_device_report(\%data_info, $src_base);

	}

	####
	# Show per device TPS utilization
	####
	if ($data_info{name} eq 'system-tpsdevice') {

		# Compute graphs for I/O per devices statistics
		&compute_rw_device_report(\%data_info, $src_base);

	}

	####
	# Show Device utilization
	####
	if ($data_info{name} eq 'system-cpudevice') {

		# Compute graphs for cpu utilization per devices statistics
		&compute_util_device_report(\%data_info, $src_base);

	}

	####
	# Show network utilization
	####
	if ($data_info{name} eq 'network-utilization') {

		# Compute graphs for network utilization statistics
		&compute_network_report(\%data_info, $src_base);

	}

	####
	# Show network error utilization
	####
	if ($data_info{name} eq 'network-error') {

		# Compute graphs for network errors statistics
		&compute_network_error_report(\%data_info, $src_base);

	}

}

sub convert_time
{
	my $str = shift;

	# 2012-07-16 12:35:29+02
	if ($str =~ /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/) {
		return &timegm_nocheck($6, $5, $4, $3, $2 - 1, $1 - 1900) * 1000;
	} elsif ($str =~ /(\d+)-(\d+)-(\d+) (\d+):(\d+)/) {
		return &timegm_nocheck(0, $5, $4, $3, $2 - 1, $1 - 1900) * 1000;
	} elsif ($str =~ /(\d+):(\d+):(\d+)/) {
		return &timegm_nocheck($3, $2, $1, $o_day, $o_month - 1, $o_year - 1900) * 1000;
	} elsif ($str !~ /\D/) {
		return $str * 1000;
	}

	return $str;
}

sub convert_sar_time
{
	my ($str, $old_timestamp, $am_pm) = @_;

	my $curdate = '';

	$old_timestamp ||= 0;
	$sar_day ||= $o_day;
	$sar_month ||= $o_month;
	$sar_year ||= $o_year;

	if ($str =~ /(\d+):(\d+):(\d+)/) {
		my $h = $1;
		my $m = $2;
		my $s = $3;
		if ($am_pm && ($am_pm eq 'AM')) {
			$h = 0 if ($h == 12);
		} elsif ($am_pm && ($am_pm eq 'PM')) {
			$h += 12 if ($h < 12);
		}
			
		my $time = ($h*3600)+($m*60)+$s;

		my $tz = ((0-$TIMEZONE)*3600);
		$curdate = &timegm_nocheck(0, 0, 0, $sar_day, $sar_month - 1, $sar_year - 1900) + $tz;
		while ($old_timestamp > (($curdate+$time) * 1000)) {
			$curdate += 86399;
			my @tinf = gmtime($curdate - $tz);
			$sar_month = $tinf[4]+1;
			$sar_day = $tinf[3];
			$sar_year = $tinf[5]+1900;
		}

		return ($curdate + $time) * 1000;
	}

	return 0;
}

sub jqplot_linegraph_array
{
	my ($buttonid, $divid, $infos, $title, @data) = @_;

	my @legend = ();
	my $description = $infos->{description} || '';

	for (my $i = 0; $i <= $#data; $i++) {
		push(@legend, $infos->{legends}[$i] || '');
	}
	if ($title eq 'all') {
		$title = $infos->{all_title};
		$description = $infos->{all_description};
	}
	elsif ($title ne '') {
		$title = sprintf($infos->{title}, $title);
	} else {
		$title = $infos->{title};
	}
	return &jqplot_linegraph($buttonid, $divid, $infos, $title, $description, \@data, \@legend);
}

sub jqplot_linegraph_hash
{
	my ($buttonid, $divid, $infos, $title, %data_h) = @_;

	my @legend = ();
	my @data = ();
	my $i = 1;
	my $description = $infos->{description} || '';

	foreach my $id (sort keys %data_h) {
		$data_h{$id} ||= '';
		push(@data, $data_h{$id});
		push(@legend, $id);
		$i++;
	}
	if ($title ne '') {
		$title = sprintf($infos->{title}, $title);
	} else {
		$title = $infos->{title};
	}

	return &jqplot_linegraph($buttonid, $divid, $infos, $title, $description, \@data, \@legend);
}

sub jqplot_linegraph
{
	my ($buttonid, $divid, $infos, $title, $description, $data, $legend) = @_;

	my $ylabel = $infos->{ylabel} || '';
	my $str = '';
	if (($divid !~ /\+$/) && ($divid !~ /^statio-/)) {
		$str = qq{
<ul id="slides">
<li class="slide active-slide" id="$divid-slide">
      <div id="$divid"><br/><br/><br/><br/></div>
};
	} else {
		$divid =~ s/\+$//;
	}
	$str .= qq{
      <div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
              <h2>$title</h2>
		<p>$description</p>
              </div>
              <div class="panel-body">
};
	my $y2label = $infos->{y2label} || '';

	my $dateTracker_dataopts = '';
        my $options_series = '';
	my $has_data = 0;
	if ($#{$data} >= 0) {
		for (my $i = 0; $i <= $#{$legend}; $i++) {
			next if (!$legend->[$i]);
			if ($legend->[$i] =~ /label: "([^"]+)"/) {
				if (($i == $#{$legend}) && $infos->{y2label}) {
					$options_series .= "{ label: \"$1\", yaxis: 'y2axis' },";
				} else {
					$options_series .= "{ label: \"$1\" },";
				}
			} else {
				if (($i == $#{$legend}) && $infos->{y2label}) {
					$options_series .= "{ label: \"$legend->[$i]\", yaxis: 'y2axis' },";
				} else {
					$options_series .= "{ label: \"$legend->[$i]\" },";
				}
			}
		}
		$options_series =~ s/,$//;

		for (my $i = 0; $i <= $#{$data}; $i++) {
			next if (!$data->[$i]);
			$data->[$i] = "var graph_${buttonid}_d$i = [$data->[$i]];\n";
			$dateTracker_dataopts .= "graph_${buttonid}_d$i,";
			$has_data = 1;
		}
		$dateTracker_dataopts =~ s/,$//;
		$dateTracker_dataopts = "[$dateTracker_dataopts]";
	}

	my $cssgraph = 'linegraph';
	if ($divid =~ /^table-/) {
		$cssgraph = 'smallgraph';
	}
	if ($has_data) {
		$str .= <<EOF;
<div id="$divid$buttonid" class="jqplot-graph $cssgraph"></div>
<script type="text/javascript">
/* <![CDATA[ */
@$data
var series_arr = [ $options_series ];

create_download_button($buttonid, 'btn');
var graph_${buttonid} = create_linegraph('$divid$buttonid', '$title', '$ylabel', series_arr, $dateTracker_dataopts, '$y2label');
add_download_button_event($buttonid, '$divid$buttonid', graph_${buttonid});
/* ]]> */
</script>
              </div>
              </div>
            </div>
      </div>
EOF
	}
	if ($divid !~ /^(pgbouncer|tablespace|statio)/) {
		$str .= qq{
  </li>
</ul>
};
	}

	return $str;
}

sub jqplot_piegraph
{
	my ($buttonid, $divid, $infos, $title, %data) = @_;

        my $datadef = '';
        foreach my $k (sort keys %data) {
                $datadef .= "['$k', $data{$k}],";
        }
	if ($title ne '') {
		$title = sprintf($infos->{title}, $title);
	} else {
		$title = $infos->{title};
	}
	my $description = $infos->{description} || '';
	my $str = qq{
<ul id="slides">
<li class="slide active-slide" id="$divid-slide">
      <div id="$divid"><br/><br/><br/><br/></div>
      <div class="row">
            <div class="col-md-12">
              <div class="panel panel-default">
              <div class="panel-heading">
              <h2>$title</h2>
		<p>$description</p>
              </div>
              <div class="panel-body">

};

	if ($datadef) {
		$str .= <<EOF;
<div id="$divid$buttonid" class="jqplot-graph piegraph"></div>
<script type="text/javascript">
/* <![CDATA[ */
var data_${buttonid} = [ $datadef ];

create_download_button($buttonid, 'btn');
var graph_$buttonid = create_piechart('$divid$buttonid', '$title', data_${buttonid});
add_download_button_event($buttonid, '$divid$buttonid', graph_${buttonid});
/* ]]> */
</script>
EOF
	} else {
		$str .= '<div class="jqplot-graph piegraph"><blockquote><b>NO DATASET</b></blockquote></div>';
	}
	$str .= qq{
              </div>
              </div>
            </div><!--/span-->
      </div>
</li>
</ul>
};

	return $str;
}

sub getNumericalOffset
{
	my $stringofs = shift;

	return 0 if (!$stringofs);

	my @pieces = split /\//, $stringofs;
	die "Invalid offset: $stringofs" unless ($#pieces == 1);


	# First part is logid, second part is record offset
	return (hex("ffffffff") * hex($pieces[0])) + hex($pieces[1]);
}

sub read_sysinfo
{
	my $file = shift;

	if (!is_compressed($file)) {
		open(IN, $file) or die "ERROR: can't read file $file, $!\n";
	} else {
		open(IN, "$ZCAT_PROG $file |") or die "ERROR: can't read pipe on command: $ZCAT_PROG $file, $!\n";
	}
	my %sysinfo = ();
	my $section = '';
	while (my $l = <IN>) {
		chomp($l);
		$l =~ s/\r//;
		if ($l =~ /^\[(.*)\]$/) {
			$section = $1;
			next;
		}
		if ($section eq 'CPU') {
			my ($key, $val) = split(/=/, $l);
			if ($key eq 'hw.ncpu') {
				$sysinfo{$section}{'processor'} = $val;
			} elsif ($key eq 'hw.model') {
				$sysinfo{$section}{'model name'} = $val;
			} elsif ($key eq 'hw.cpuspeed') {
				$sysinfo{$section}{'cpu MHz'} = $val;
			} else {
				$sysinfo{$section}{$key} = $val;
			}
		}
		if ($section eq 'KERNEL') {
			my @kinf = split(/\s+/, $l);
			$sysinfo{$section}{'hostname'} = $kinf[1];
			$sysinfo{$section}{'kernel'} = "$kinf[2] $kinf[3]";
			$sysinfo{$section}{'arch'} = "$kinf[-1]";
		}
		if ($section eq 'UPTIME') {
			$sysinfo{$section}{'all'} = $l;
			if ($l =~ /\s*([^,]+), (.*)/) {
				$sysinfo{$section}{'uptime'} = $1;
				$sysinfo{$section}{'infos'} = $2;
			}
		}
		if ($section eq 'RELEASE') {
			my ($key, $val) = split(/=/, $l);
			if ($val) {
				$val =~ s/"//g;
				$sysinfo{$section}{lc($key)} = $val;
			} else {
				$sysinfo{RELEASE}{'name'} = $key;
				$sysinfo{RELEASE}{'version'} = '';
			}
		}
		if ($section eq 'MEMORY') {
			my ($key, $val) = split(/:\s+/, $l);
			if ($val =~ s/ kB//) {
				$sysinfo{$section}{lc($key)} = &pretty_print_size($val*1000);
			} else {
				$sysinfo{$section}{lc($key)} = $val;
			}
		}
		if ($section eq 'DF') {
			next if ($l !~ /^[\s\/]/);
			if ($l =~ s/^\s+//) {
				$sysinfo{$section}[-1] =~ s/<\/tr>$/<td>/;
				$sysinfo{$section}[-1] .= join('</td><td>', split(/\s+/, $l)) . "</td></tr>";
				next;
			}
			push(@{$sysinfo{$section}}, '<tr><td>' . join('</td><td>', split(/\s+/, $l)) . "</td></tr>");
		}
		if ($section eq 'MOUNT') {
			next if ($l !~ /^\//);
			push(@{$sysinfo{$section}}, '<tr><td>' . join('</td><td>', split(/\s+on\s+|\s+type\s+|\s+/, $l)) . '</td></tr>');
		}
		if ($section eq 'PCI') {
			push(@{$sysinfo{$section}}, "$l\n");
		}
		if ($section eq 'SYSTEM') {
			my ($key, $val) = split(/\s*[=:]\s+/, $l);
			 $sysinfo{$section}{$key} = $val if ($key && defined $val);
		}
		if ($section eq 'PGVERSION') {
			$sysinfo{$section}{full_version} = $l;
			if ($l =~ /^PostgreSQL (\d+)\.(\d+)\.(\d+)/) {
				$sysinfo{$section}{major} = "$1.$2";
				$sysinfo{$section}{minor} = "$1.$2.$3";
			} elsif ($l =~ /^PostgreSQL (\d+)\.(\d+)/) {
				$sysinfo{$section}{major} = "$1.$2";
				$sysinfo{$section}{minor} = "$1.$2.0";
			} elsif ($l =~ /^EnterpriseDB (\d+)\.(\d+)\.(\d+)/) {
				$sysinfo{$section}{major} = "$1.$2";
				$sysinfo{$section}{minor} = "$1.$2.$3";
			} elsif ($l =~ /(\d+)\.(\d+)\.(\d+)/) {
				$sysinfo{$section}{major} = "$1.$2";
				$sysinfo{$section}{minor} = "$1.$2.$3";
			} else {
				$sysinfo{$section}{major} = '';
				$sysinfo{$section}{minor} = '';
			}
		}
		if ($section eq 'PGUPTIME') {
			$sysinfo{PGVERSION}{uptime} = $l;
		}
		if ($section eq 'EXTENSION') {
			my ($db, @vals) = split(/[=,]+/, $l);
			push(@{$sysinfo{$section}{$db}}, @vals);
			foreach my $e (@vals) {
				push(@{$OVERALL_STATS{'cluster'}{'extensions'}}, $e) if (!grep(/^$e$/, @{$OVERALL_STATS{'cluster'}{'extensions'}}));
			}
		}
		if ($section eq 'SCHEMA') {
			my ($db, @vals) = split(/[=,]+/, $l);
			push(@{$sysinfo{$section}{$db}}, @vals);
		}
		if ($section eq 'PROCEDURE') {
			if ($l =~ /^([^=]+)=(\d+)$/) {
				$sysinfo{$section}{$1} = $2;
			} else {
				# Backward compatibility with version 2.4
				my ($db, @vals) = split(/[=,]+/, $l);
				$sysinfo{$section}{$db} = $#vals + 1;
			}
		}
		if ($section eq 'TRIGGER') {
			my ($db, $val) = split(/[=]+/, $l);
			$sysinfo{$section}{$db} = $val;
		}
		if ($section eq 'PROCESS') {
			my ($USER,$PID,$CPU,$MEM,$VSZ,$RSS,$TTY,$STAT,$START,$TIME,$COMMAND) = split(/\s+/, $l, 11);
			push(@{$sysinfo{$section}}, '<tr><td>' . join('</td><td>', $USER,$PID,$CPU,$MEM,$VSZ,$RSS,$TTY,$STAT,$START,$TIME,$COMMAND) . '</td></tr>') if ($l !~/^USER/);
		}
	}
	close(IN);

	return %sysinfo;
}

sub write_resources
{
	# Write resource file to report directory
	my $rscfh;
	while (my $l = <DATA>) {
		if ($l =~ /^WRFILE: (.*)/) {
			$rscfh->close() if (defined $rscfh);
			if (!-e "$OUTPUT_DIR/$1") {
				$rscfh = new IO::File ">$OUTPUT_DIR/$1";
				die "FATAL: can't write file $1\n" if (not defined $rscfh);
			}
			next;
		}
		$rscfh->print($l) if (defined $rscfh);
	}
	$rscfh->close() if (defined $rscfh);
}

# Format duration
sub format_duration
{
	my $time = shift;

	return '0s' if (!$time);

	my $days = int($time / 86400000);
	$time -= ($days * 86400000);
	my $hours = int($time / 3600000);
	$time -= ($hours * 3600000);
	my $minutes = int($time / 60000);
	$time -= ($minutes * 60000);
	my $seconds = sprintf("%0.3f", $time / 1000);

	$days    = $days < 1    ? '' : $days . 'd';
	$hours   = $hours < 1   ? '' : $hours . 'h';
	$minutes = $minutes < 1 ? '' : $minutes . 'm';
	$seconds =~ s/\.\d+$// if ($minutes);
	$time    = $days . $hours . $minutes . $seconds . 's';

	return $time;
}

sub get_data_directories
{
	my @work_dirs = ();

	# Lookup for daily or hourly sub directories to scan
	# Search years / months / days / hours directories
	if (not opendir(DIR, "$INPUT_DIR")) {
		die "FATAL: Can't open directory $INPUT_DIR: $!\n";
	}
	my @years = grep { /^\d+$/ && -d "$INPUT_DIR/$_" } readdir(DIR);
	closedir(DIR);
	if ($#years >= 0) {
		foreach  my $y (sort { $a <=> $b } @years) {
			if (not opendir(DIR, "$INPUT_DIR/$y")) {
				die "FATAL: Can't open directory $INPUT_DIR/$y: $!\n";
			}
			my @months = grep { /^\d+$/ && -d "$INPUT_DIR/$y/$_" } readdir(DIR);
			closedir(DIR);
			foreach  my $m (sort { $a <=> $b } @months) {
				if (not opendir(DIR, "$INPUT_DIR/$y/$m")) {
					die "FATAL: Can't open directory $INPUT_DIR/$y/$m: $!\n";
				}
				my @days = grep { /^\d+$/ && -d "$INPUT_DIR/$y/$m/$_" } readdir(DIR);
				closedir(DIR);
				foreach  my $d (sort { $a <=> $b } @days) {
					if (not opendir(DIR, "$INPUT_DIR/$y/$m/$d")) {
						die "FATAL: Can't open directory $INPUT_DIR/$y/$m/$d: $!\n";
					}
					my @hours = grep { /^\d+$/ && -d "$INPUT_DIR/$y/$m/$d/$_" } readdir(DIR);
					closedir(DIR);
					if ($#hours == -1) {
						push(@work_dirs, "$y/$m/$d");
					} else {
						foreach  my $h (sort { $a <=> $b } @hours) {
							push(@work_dirs, "$y/$m/$d/$h");
						}
					}
				}
			}
		}

	} else {
		# we are not in incremental mode only first level directory will be proceed
		push(@work_dirs, '.');
	}

	return @work_dirs;
}

# Initialise global variables storing PostgreSQL statistics
sub clear_db_stats
{
	print "DEBUG: Cleaning memory from PostgreSQL statistics storages\n" if ($DEBUG);

	foreach my $name (@pg_to_be_stored) {
		if (grep(/^$name$/, 'global_databases', 'global_tbspnames', )) {
			@{$name} = ();
		} else {
			%{$name} = ();
		}
	}		
}


# Initialise global variables storing statistics
sub clear_stats
{
	# Clean PostgreSQL statistics
	&clear_db_stats();

	print "DEBUG: Cleaning memory from all statistics storages\n" if ($DEBUG);
	%OVERALL_STATS = ();
	%sysinfo = ();
	foreach my $name (@sar_to_be_stored) {
		%{$name} = ();
	}		

}

# Dump relevant memory to file for incremental use
sub dump_pg_binary
{
        my ($in_dir, $outfile) = @_;

	foreach my $name (@pg_to_be_stored) {
		my $lfh = new IO::File ">$in_dir/$name.bin";
		if (not defined $lfh) {
			die "FATAL: can't write to $in_dir/$name.bin, $!\n";
		}
		if (grep(/^$name$/, 'global_databases', 'global_tbspnames')) {
			store_fd({ $name => \@{$name} }, $lfh) || die ("Couldn't save binary data to \"$in_dir/$name.bin\"!\n");
		} else {
			store_fd({ $name => \%{$name} }, $lfh) || die ("Couldn't save binary data to \"$in_dir/$name.bin\"!\n");
		}
		$lfh->close;
	}
}

# Dump memory from sar statistics to file for incremental use
sub dump_sar_binary
{
        my ($in_dir, $outfile) = @_;

	foreach my $name (@sar_to_be_stored) {
		my $lfh = new IO::File ">$in_dir/$name.bin";
		if (not defined $lfh) {
			die "FATAL: can't write to $in_dir/$name.bin, $!\n";
		}
		store_fd({ $name => \%{$name} }, $lfh) || die ("Couldn't save binary data to \"$in_dir/$name.bin\"!\n");
		$lfh->close;
	}
}

# Dump memory from system information to file for incremental use
sub dump_sys_binary
{
        my ($in_dir, $outfile) = @_;

	my $lfh = new IO::File ">$in_dir/$outfile";
	if (not defined $lfh) {
		die "FATAL: can't write to $in_dir/$outfile, $!\n";
	}
        store_fd({
		'sysinfo' => \%sysinfo,
        }, $lfh) || die ("Couldn't save binary data to «$in_dir/$outfile»!\n");
	$lfh->close;
}


# Load statistics from pg cache into memory
sub load_pg_binary
{
        my ($in_dir) = @_;

	foreach my $name (@pg_to_be_stored) {

		my $lfh = new IO::File "<$in_dir/$name.bin";
		if (not defined $lfh) {
			die "FATAL: can't write to $in_dir/$name.bin, $!\n";
		}
		my %stats = %{ fd_retrieve($lfh) };
		$lfh->close();

		# Setting global information
		if ($name eq 'global_infos') {

			my %_global_infos = %{$stats{global_infos}} ;
				foreach my $inf (keys %_global_infos) {
				if ($_global_infos{$inf} =~ /ARRAY/) {
					push(@{$inf}, @{$_global_infos{$inf}});
				} else {
					$global_infos{$inf} = $_global_infos{$inf};
				}
			}
			delete $stats{global_infos};

		} elsif (grep(/^$name$/, 'global_databases', 'global_tbspnames', )) {

			# Look for database and tablespace
			foreach my $d (@{$stats{$name}}) {
				push(@{$name}, $d) if (!grep(/^$d$/, @{$name}));
			}
			delete $stats{$name};

		} else {

			# Load other storages
			foreach my $m (keys %stats) {
				foreach my $t (keys %{$stats{$m}}) {
					if ($stats{$m}{$t} =~ /HASH/) {
						foreach my $d (keys %{$stats{$m}{$t}}) {
							if ($stats{$m}{$t}{$d} =~ /HASH/) {
								foreach my $k (keys %{$stats{$m}{$t}{$d}}) {
									${$m}{$t}{$d}{$k} = $stats{$m}{$t}{$d}{$k};
								}
							} elsif ($stats{$m}{$t}{$d} =~ /ARRAY/) {
								push(@{${$m}{$t}{$d}}, @{$stats{$m}{$t}{$d}});
							} else {
								${$m}{$t}{$d} = $stats{$m}{$t}{$d};
							}
						}
					} elsif ($stats{$m}{$t} =~ /ARRAY/) {
						push(@{${$m}{$t}}, @{$stats{$m}{$t}});
					} else {
						${$m}{$t} = $stats{$m}{$t};
					}
				}
			}
		}
	}
}

# Load statistics from sar cache into memory
sub load_sar_binary
{
        my ($in_dir) = @_;

	foreach my $name (@sar_to_be_stored) {

		my $lfh = new IO::File "<$in_dir/$name.bin";
		if (not defined $lfh) {
			die "FATAL: can't write to $in_dir/$name.bin, $!\n";
		}
		my %stats = %{ fd_retrieve($lfh) };
		$lfh->close();
		# Setting global information
		if ($name eq 'global_infos') {

			# Setting global information
			my %_global_infos = %{$stats{global_infos}} ;
			foreach my $inf (keys %_global_infos) {
				if ($_global_infos{$inf} =~ /ARRAY/) {
					push(@{$inf}, @{$_global_infos{$inf}});
				} else {
					$global_infos{$inf} = $_global_infos{$inf};
				}
			}
			delete $stats{global_infos};

		} else {

			# Load other sar storages
			foreach my $m (keys %stats) {
				foreach my $t (keys %{$stats{$m}}) {
					foreach my $d (keys %{$stats{$m}{$t}}) {
						if ($stats{$m}{$t}{$d} =~ /HASH/) {
							foreach my $k (keys %{$stats{$m}{$t}{$d}}) {
								${$m}{$t}{$d}{$k} = $stats{$m}{$t}{$d}{$k};
							}
						} else {
							${$m}{$t}{$d} = $stats{$m}{$t}{$d};
						}
					}
				}
			}
		}
	}
}

# Load statistics from sysinfo cache into memory
sub load_sys_binary
{
        my ($in_dir, $infile) = @_;

	my $lfh = new IO::File "<$in_dir/$infile";
	if (not defined $lfh) {
		die "FATAL: can't write to $in_dir/$infile, $!\n";
	}
	my %stats = %{ fd_retrieve($lfh) };
	$lfh->close();
	my %_sysinfo = %{$stats{sysinfo}};

	# Load other storages
	foreach my $s (keys %_sysinfo) {
		if ($_sysinfo{$s} =~ /HASH/) {
			foreach my $n (keys %{$_sysinfo{$s}}) {
				if ($_sysinfo{$s}{$n} =~ /HASH/) {
					foreach my $k (keys %{$_sysinfo{$s}{$n}}) {
						$sysinfo{$s}{$n}{$k} = $_sysinfo{$s}{$n}{$k};
					}
				} elsif ($_sysinfo{$s}{$n} =~ /ARRAY/) {
					foreach my $k (@{$_sysinfo{$s}{$n}}) {
						push(@{$sysinfo{$s}{$n}}, $k);
					}
				} else {
					$sysinfo{$s}{$n} = $_sysinfo{$s}{$n};
				}
			}
		} elsif ($_sysinfo{$s} =~ /ARRAY/) {
			foreach my $k (@{$_sysinfo{$s}}) {
				push(@{$sysinfo{$s}}, $k);
			}
		}
	}
}

# Compare given version numbers to the server's version
sub backend_minimum_version
{
	my ($numver) = @_;

	return 0 if (!$numver);

	return 1 if (!exists $sysinfo{PGVERSION}{'major'} || ($sysinfo{PGVERSION}{'major'} >= $numver));

	return 0;
}

__DATA__

WRFILE: bean.js

/*
  * bean.js - copyright Jacob Thornton 2011
  * https://github.com/fat/bean
  * MIT License
  * special thanks to:
  * dean edwards: http://dean.edwards.name/
  * dperini: https://github.com/dperini/nwevents
  * the entire mootools team: github.com/mootools/mootools-core
  *//*global module:true, define:true*/
!function(e,t,n){typeof module!="undefined"?module.exports=n(e,t):typeof define=="function"&&typeof define.amd=="object"?define(n):t[e]=n(e,t)}("bean",this,function(e,t){var n=window,r=t[e],i=/over|out/,s=/[^\.]*(?=\..*)\.|.*/,o=/\..*/,u="addEventListener",a="attachEvent",f="removeEventListener",l="detachEvent",c=document||{},h=c.documentElement||{},p=h[u],d=p?u:a,v=Array.prototype.slice,m=/click|mouse|menu|drag|drop/i,g=/^touch|^gesture/i,y={one:1},b=function(e,t,n){for(n=0;n<t.length;n++)e[t[n]]=1;return e}({},("click dblclick mouseup mousedown contextmenu mousewheel DOMMouseScroll mouseover mouseout mousemove selectstart selectend keydown keypress keyup orientationchange focus blur change reset select submit load unload beforeunload resize move DOMContentLoaded readystatechange error abort scroll "+(p?"show input invalid touchstart touchmove touchend touchcancel gesturestart gesturechange gestureend message readystatechange pageshow pagehide popstate hashchange offline online afterprint beforeprint dragstart dragenter dragover dragleave drag drop dragend loadstart progress suspend emptied stalled loadmetadata loadeddata canplay canplaythrough playing waiting seeking seeked ended durationchange timeupdate play pause ratechange volumechange cuechange checking noupdate downloading cached updateready obsolete ":"")).split(" ")),w=function(){function e(e,t){while((t=t.parentNode)!==null)if(t===e)return!0;return!1}function t(t){var n=t.relatedTarget;return n?n!==this&&n.prefix!=="xul"&&!/document/.test(this.toString())&&!e(this,n):n===null}return{mouseenter:{base:"mouseover",condition:t},mouseleave:{base:"mouseout",condition:t},mousewheel:{base:/Firefox/.test(navigator.userAgent)?"DOMMouseScroll":"mousewheel"}}}(),E=function(){var e="altKey attrChange attrName bubbles cancelable ctrlKey currentTarget detail eventPhase getModifierState isTrusted metaKey relatedNode relatedTarget shiftKey srcElement target timeStamp type view which".split(" "),t=e.concat("button buttons clientX clientY dataTransfer fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" ")),n=e.concat("char charCode key keyCode".split(" ")),r=e.concat("touches targetTouches changedTouches scale rotation".split(" ")),s="preventDefault",o=function(e){return function(){e[s]?e[s]():e.returnValue=!1}},u="stopPropagation",a=function(e){return function(){e[u]?e[u]():e.cancelBubble=!0}},f=function(e){return function(){e[s](),e[u](),e.stopped=!0}},l=function(e,t,n){var r,i;for(r=n.length;r--;)i=n[r],!(i in t)&&i in e&&(t[i]=e[i])};return function(p,d){var v={originalEvent:p,isNative:d};if(!p)return v;var y,b=p.type,w=p.target||p.srcElement;v[s]=o(p),v[u]=a(p),v.stop=f(v),v.target=w&&w.nodeType===3?w.parentNode:w;if(d){if(b.indexOf("key")!==-1)y=n,v.keyCode=p.which||p.keyCode;else if(m.test(b)){y=t,v.rightClick=p.which===3||p.button===2,v.pos={x:0,y:0};if(p.pageX||p.pageY)v.clientX=p.pageX,v.clientY=p.pageY;else if(p.clientX||p.clientY)v.clientX=p.clientX+c.body.scrollLeft+h.scrollLeft,v.clientY=p.clientY+c.body.scrollTop+h.scrollTop;i.test(b)&&(v.relatedTarget=p.relatedTarget||p[(b==="mouseover"?"from":"to")+"Element"])}else g.test(b)&&(y=r);l(p,v,y||e)}return v}}(),S=function(e,t){return!p&&!t&&(e===c||e===n)?h:e},x=function(){function e(e,t,n,r,i){this.element=e,this.type=t,this.handler=n,this.original=r,this.namespaces=i,this.custom=w[t],this.isNative=b[t]&&e[d],this.eventType=p||this.isNative?t:"propertychange",this.customType=!p&&!this.isNative&&t,this.target=S(e,this.isNative),this.eventSupport=this.target[d]}return e.prototype={inNamespaces:function(e){var t,n;if(!e)return!0;if(!this.namespaces)return!1;for(t=e.length;t--;)for(n=this.namespaces.length;n--;)if(e[t]===this.namespaces[n])return!0;return!1},matches:function(e,t,n){return this.element===e&&(!t||this.original===t)&&(!n||this.handler===n)}},e}(),T=function(){var e={},t=function(n,r,i,s,o){if(!r||r==="*")for(var u in e)u.charAt(0)==="$"&&t(n,u.substr(1),i,s,o);else{var a=0,f,l=e["$"+r],c=n==="*";if(!l)return;for(f=l.length;a<f;a++)if(c||l[a].matches(n,i,s))if(!o(l[a],l,a,r))return}},n=function(t,n,r){var i,s=e["$"+n];if(s)for(i=s.length;i--;)if(s[i].matches(t,r,null))return!0;return!1},r=function(e,n,r){var i=[];return t(e,n,r,null,function(e){return i.push(e)}),i},i=function(t){return(e["$"+t.type]||(e["$"+t.type]=[])).push(t),t},s=function(n){t(n.element,n.type,null,n.handler,function(t,n,r){return n.splice(r,1),n.length===0&&delete e["$"+t.type],!1})},o=function(){var t,n=[];for(t in e)t.charAt(0)==="$"&&(n=n.concat(e[t]));return n};return{has:n,get:r,put:i,del:s,entries:o}}(),N=p?function(e,t,n,r){e[r?u:f](t,n,!1)}:function(e,t,n,r,i){i&&r&&e["_on"+i]===null&&(e["_on"+i]=0),e[r?a:l]("on"+t,n)},C=function(e,t,r){return function(i){return i=E(i||((this.ownerDocument||this.document||this).parentWindow||n).event,!0),t.apply(e,[i].concat(r))}},k=function(e,t,r,i,s,o){return function(u){if(i?i.apply(this,arguments):p?!0:u&&u.propertyName==="_on"+r||!u)u&&(u=E(u||((this.ownerDocument||this.document||this).parentWindow||n).event,o)),t.apply(e,u&&(!s||s.length===0)?arguments:v.call(arguments,u?0:1).concat(s))}},L=function(e,t,n,r,i){return function(){e(t,n,i),r.apply(this,arguments)}},A=function(e,t,n,r){var i,s,u,a=t&&t.replace(o,""),f=T.get(e,a,n);for(i=0,s=f.length;i<s;i++)f[i].inNamespaces(r)&&((u=f[i]).eventSupport&&N(u.target,u.eventType,u.handler,!1,u.type),T.del(u))},O=function(e,t,n,r,i){var u,a=t.replace(o,""),f=t.replace(s,"").split(".");if(T.has(e,a,n))return e;a==="unload"&&(n=L(A,e,a,n,r)),w[a]&&(w[a].condition&&(n=k(e,n,a,w[a].condition,!0)),a=w[a].base||a),u=T.put(new x(e,a,n,r,f[0]&&f)),u.handler=u.isNative?C(e,u.handler,i):k(e,u.handler,a,!1,i,!1),u.eventSupport&&N(u.target,u.eventType,u.handler,!0,u.customType)},M=function(e,t,n){return function(r){var i,s,o=typeof e=="string"?n(e,this):e;for(i=r.target;i&&i!==this;i=i.parentNode)for(s=o.length;s--;)if(o[s]===i)return t.apply(i,arguments)}},_=function(e,t,n){var r,i,u,a,f,l=A,c=t&&typeof t=="string";if(c&&t.indexOf(" ")>0){t=t.split(" ");for(f=t.length;f--;)_(e,t[f],n);return e}u=c&&t.replace(o,""),u&&w[u]&&(u=w[u].type);if(!t||c){if(a=c&&t.replace(s,""))a=a.split(".");l(e,u,n,a)}else if(typeof t=="function")l(e,null,t);else for(r in t)t.hasOwnProperty(r)&&_(e,r,t[r]);return e},D=function(e,t,n,r,i){var s,o,u,a,f=n,l=n&&typeof n=="string";if(t&&!n&&typeof t=="object")for(s in t)t.hasOwnProperty(s)&&D.apply(this,[e,s,t[s]]);else{a=arguments.length>3?v.call(arguments,3):[],o=(l?n:t).split(" "),l&&(n=M(t,f=r,i))&&(a=v.call(a,1)),this===y&&(n=L(_,e,t,n,f));for(u=o.length;u--;)O(e,o[u],n,f,a)}return e},P=function(){return D.apply(y,arguments)},H=p?function(e,t,r){var i=c.createEvent(e?"HTMLEvents":"UIEvents");i[e?"initEvent":"initUIEvent"](t,!0,!0,n,1),r.dispatchEvent(i)}:function(e,t,n){n=S(n,e),e?n.fireEvent("on"+t,c.createEventObject()):n["_on"+t]++},B=function(e,t,n){var r,i,u,a,f,l=t.split(" ");for(r=l.length;r--;){t=l[r].replace(o,"");if(a=l[r].replace(s,""))a=a.split(".");if(!a&&!n&&e[d])H(b[t],t,e);else{f=T.get(e,t),n=[!1].concat(n);for(i=0,u=f.length;i<u;i++)f[i].inNamespaces(a)&&f[i].handler.apply(e,n)}}return e},j=function(e,t,n){var r=0,i=T.get(t,n),s=i.length;for(;r<s;r++)i[r].original&&D(e,i[r].type,i[r].original);return e},F={add:D,one:P,remove:_,clone:j,fire:B,noConflict:function(){return t[e]=r,this}};if(n[a]){var I=function(){var e,t=T.entries();for(e in t)t[e].type&&t[e].type!=="unload"&&_(t[e].element,t[e].type);n[l]("onunload",I),n.CollectGarbage&&n.CollectGarbage()};n[a]("onunload",I)}return F});

WRFILE: bootstrap.min.css

/*!
 * Bootstrap v3.3.6 (http://getbootstrap.com)
 * Copyright 2011-2015 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
/*# sourceMappingURL=bootstrap.min.css.map */

WRFILE: bootstrap-datetimepicker.js

/* =========================================================
 * bootstrap-datetimepicker.js
 * =========================================================
 * Copyright 2012 Stefan Petre
 * Improvements by Andrew Rowls
 * Improvements by Sébastien Malot
 * Improvements by Yun Lai
 * Improvements by Kenneth Henderick
 * Project URL : http://www.malot.fr/bootstrap-datetimepicker
 *
 * 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.
 * ========================================================= */

/*
 * Improvement by CuGBabyBeaR @ 2013-09-12
 *
 * Make it work in bootstrap v3
 */

!function ($) {

    function elementOrParentIsFixed(element) {
        var $element = $(element);
        var $checkElements = $element.add($element.parents());
        var isFixed = false;
        $checkElements.each(function(){
            if ($(this).css("position") === "fixed") {
                isFixed = true;
                return false;
            }
        });
        return isFixed;
    }

	function UTCDate() {
		return new Date(Date.UTC.apply(Date, arguments));
	}

	function UTCToday() {
		var today = new Date();
		return UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate(), today.getUTCHours(), today.getUTCMinutes(), today.getUTCSeconds(), 0);
	}

	// Picker object

	var Datetimepicker = function (element, options) {
		var that = this;

		this.element = $(element);

		// add container for single page application
		// when page switch the datetimepicker div will be removed also.
		this.container = options.container || 'body';

		this.language = options.language || this.element.data('date-language') || "en";
		this.language = this.language in dates ? this.language : "en";
		this.isRTL = dates[this.language].rtl || false;
		this.formatType = options.formatType || this.element.data('format-type') || 'standard';
		this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType);
		this.isInline = false;
		this.isVisible = false;
		this.isInput = this.element.is('input');
		this.fontAwesome = options.fontAwesome || this.element.data('font-awesome') || false;

		this.bootcssVer = options.bootcssVer || (this.isInput ? (this.element.is('.form-control') ? 3 : 2) : ( this.bootcssVer = this.element.is('.input-group') ? 3 : 2 ));

		this.component = this.element.is('.date') ? ( this.bootcssVer == 3 ? this.element.find('.input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-calendar, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o').parent() : this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar .fa-calendar .fa-clock-o').parent()) : false;
		this.componentReset = this.element.is('.date') ? ( this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-remove, .input-group-addon .fa-times").parent():this.element.find(".add-on .icon-remove, .add-on .fa-times").parent()) : false;
		this.hasInput = this.component && this.element.find('input').length;
		if (this.component && this.component.length === 0) {
			this.component = false;
		}
		this.linkField = options.linkField || this.element.data('link-field') || false;
		this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType);
		this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5;
		this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right';
		this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false;
		this.initialDate = options.initialDate || new Date();
		this.zIndex = options.zIndex || this.element.data('z-index') || undefined;

		this.icons = {
			leftArrow: this.fontAwesome ? 'fa-arrow-left' : (this.bootcssVer === 3 ? 'glyphicon-arrow-left' : 'icon-arrow-left'),
			rightArrow: this.fontAwesome ? 'fa-arrow-right' : (this.bootcssVer === 3 ? 'glyphicon-arrow-right' : 'icon-arrow-right')
		};
		this.icontype = this.fontAwesome ? 'fa' : 'glyphicon';

		this._attachEvents();

		this.formatViewType = "datetime";
		if ('formatViewType' in options) {
			this.formatViewType = options.formatViewType;
		} else if ('formatViewType' in this.element.data()) {
			this.formatViewType = this.element.data('formatViewType');
		}

		this.minView = 0;
		if ('minView' in options) {
			this.minView = options.minView;
		} else if ('minView' in this.element.data()) {
			this.minView = this.element.data('min-view');
		}
		this.minView = DPGlobal.convertViewMode(this.minView);

		this.maxView = DPGlobal.modes.length - 1;
		if ('maxView' in options) {
			this.maxView = options.maxView;
		} else if ('maxView' in this.element.data()) {
			this.maxView = this.element.data('max-view');
		}
		this.maxView = DPGlobal.convertViewMode(this.maxView);

		this.wheelViewModeNavigation = false;
		if ('wheelViewModeNavigation' in options) {
			this.wheelViewModeNavigation = options.wheelViewModeNavigation;
		} else if ('wheelViewModeNavigation' in this.element.data()) {
			this.wheelViewModeNavigation = this.element.data('view-mode-wheel-navigation');
		}

		this.wheelViewModeNavigationInverseDirection = false;

		if ('wheelViewModeNavigationInverseDirection' in options) {
			this.wheelViewModeNavigationInverseDirection = options.wheelViewModeNavigationInverseDirection;
		} else if ('wheelViewModeNavigationInverseDirection' in this.element.data()) {
			this.wheelViewModeNavigationInverseDirection = this.element.data('view-mode-wheel-navigation-inverse-dir');
		}

		this.wheelViewModeNavigationDelay = 100;
		if ('wheelViewModeNavigationDelay' in options) {
			this.wheelViewModeNavigationDelay = options.wheelViewModeNavigationDelay;
		} else if ('wheelViewModeNavigationDelay' in this.element.data()) {
			this.wheelViewModeNavigationDelay = this.element.data('view-mode-wheel-navigation-delay');
		}

		this.startViewMode = 2;
		if ('startView' in options) {
			this.startViewMode = options.startView;
		} else if ('startView' in this.element.data()) {
			this.startViewMode = this.element.data('start-view');
		}
		this.startViewMode = DPGlobal.convertViewMode(this.startViewMode);
		this.viewMode = this.startViewMode;

		this.viewSelect = this.minView;
		if ('viewSelect' in options) {
			this.viewSelect = options.viewSelect;
		} else if ('viewSelect' in this.element.data()) {
			this.viewSelect = this.element.data('view-select');
		}
		this.viewSelect = DPGlobal.convertViewMode(this.viewSelect);

		this.forceParse = true;
		if ('forceParse' in options) {
			this.forceParse = options.forceParse;
		} else if ('dateForceParse' in this.element.data()) {
			this.forceParse = this.element.data('date-force-parse');
		}
		var template = this.bootcssVer === 3 ? DPGlobal.templateV3 : DPGlobal.template;
		while (template.indexOf('{iconType}') !== -1) {
			template = template.replace('{iconType}', this.icontype);
		}
		while (template.indexOf('{leftArrow}') !== -1) {
			template = template.replace('{leftArrow}', this.icons.leftArrow);
		}
		while (template.indexOf('{rightArrow}') !== -1) {
			template = template.replace('{rightArrow}', this.icons.rightArrow);
		}
		this.picker = $(template)
			.appendTo(this.isInline ? this.element : this.container) // 'body')
			.on({
				click:     $.proxy(this.click, this),
				mousedown: $.proxy(this.mousedown, this)
			});

		if (this.wheelViewModeNavigation) {
			if ($.fn.mousewheel) {
				this.picker.on({mousewheel: $.proxy(this.mousewheel, this)});
			} else {
				console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option");
			}
		}

		if (this.isInline) {
			this.picker.addClass('datetimepicker-inline');
		} else {
			this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu');
		}
		if (this.isRTL) {
			this.picker.addClass('datetimepicker-rtl');
			var selector = this.bootcssVer === 3 ? '.prev span, .next span' : '.prev i, .next i';
			this.picker.find(selector).toggleClass(this.icons.leftArrow + ' ' + this.icons.rightArrow);
		}
		$(document).on('mousedown', function (e) {
			// Clicked outside the datetimepicker, hide it
			if ($(e.target).closest('.datetimepicker').length === 0) {
				that.hide();
			}
		});

		this.autoclose = false;
		if ('autoclose' in options) {
			this.autoclose = options.autoclose;
		} else if ('dateAutoclose' in this.element.data()) {
			this.autoclose = this.element.data('date-autoclose');
		}

		this.keyboardNavigation = true;
		if ('keyboardNavigation' in options) {
			this.keyboardNavigation = options.keyboardNavigation;
		} else if ('dateKeyboardNavigation' in this.element.data()) {
			this.keyboardNavigation = this.element.data('date-keyboard-navigation');
		}

		this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false);
		this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false);

		this.weekStart = ((options.weekStart || this.element.data('date-weekstart') || dates[this.language].weekStart || 0) % 7);
		this.weekEnd = ((this.weekStart + 6) % 7);
		this.startDate = -Infinity;
		this.endDate = Infinity;
		this.daysOfWeekDisabled = [];
		this.setStartDate(options.startDate || this.element.data('date-startdate'));
		this.setEndDate(options.endDate || this.element.data('date-enddate'));
		this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled'));
		this.setMinutesDisabled(options.minutesDisabled || this.element.data('date-minute-disabled'));
		this.setHoursDisabled(options.hoursDisabled || this.element.data('date-hour-disabled'));
		this.fillDow();
		this.fillMonths();
		this.update();
		this.showMode();

		if (this.isInline) {
			this.show();
		}
	};

	Datetimepicker.prototype = {
		constructor: Datetimepicker,

		_events:       [],
		_attachEvents: function () {
			this._detachEvents();
			if (this.isInput) { // single input
				this._events = [
					[this.element, {
						focus:   $.proxy(this.show, this),
						keyup:   $.proxy(this.update, this),
						keydown: $.proxy(this.keydown, this)
					}]
				];
			}
			else if (this.component && this.hasInput) { // component: input + button
				this._events = [
					// For components that are not readonly, allow keyboard nav
					[this.element.find('input'), {
						focus:   $.proxy(this.show, this),
						keyup:   $.proxy(this.update, this),
						keydown: $.proxy(this.keydown, this)
					}],
					[this.component, {
						click: $.proxy(this.show, this)
					}]
				];
				if (this.componentReset) {
					this._events.push([
						this.componentReset,
						{click: $.proxy(this.reset, this)}
					]);
				}
			}
			else if (this.element.is('div')) {  // inline datetimepicker
				this.isInline = true;
			}
			else {
				this._events = [
					[this.element, {
						click: $.proxy(this.show, this)
					}]
				];
			}
			for (var i = 0, el, ev; i < this._events.length; i++) {
				el = this._events[i][0];
				ev = this._events[i][1];
				el.on(ev);
			}
		},

		_detachEvents: function () {
			for (var i = 0, el, ev; i < this._events.length; i++) {
				el = this._events[i][0];
				ev = this._events[i][1];
				el.off(ev);
			}
			this._events = [];
		},

		show: function (e) {
			this.picker.show();
			this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
			if (this.forceParse) {
				this.update();
			}
			this.place();
			$(window).on('resize', $.proxy(this.place, this));
			if (e) {
				e.stopPropagation();
				e.preventDefault();
			}
			this.isVisible = true;
			this.element.trigger({
				type: 'show',
				date: this.date
			});
		},

		hide: function (e) {
			if (!this.isVisible) return;
			if (this.isInline) return;
			this.picker.hide();
			$(window).off('resize', this.place);
			this.viewMode = this.startViewMode;
			this.showMode();
			if (!this.isInput) {
				$(document).off('mousedown', this.hide);
			}

			if (
				this.forceParse &&
					(
						this.isInput && this.element.val() ||
							this.hasInput && this.element.find('input').val()
						)
				)
				this.setValue();
			this.isVisible = false;
			this.element.trigger({
				type: 'hide',
				date: this.date
			});
		},

		remove: function () {
			this._detachEvents();
			this.picker.remove();
			delete this.picker;
			delete this.element.data().datetimepicker;
		},

		getDate: function () {
			var d = this.getUTCDate();
			return new Date(d.getTime() + (d.getTimezoneOffset() * 60000));
		},

		getUTCDate: function () {
			return this.date;
		},

		setDate: function (d) {
			this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000)));
		},

		setUTCDate: function (d) {
			if (d >= this.startDate && d <= this.endDate) {
				this.date = d;
				this.setValue();
				this.viewDate = this.date;
				this.fill();
			} else {
				this.element.trigger({
					type:      'outOfRange',
					date:      d,
					startDate: this.startDate,
					endDate:   this.endDate
				});
			}
		},

		setFormat: function (format) {
			this.format = DPGlobal.parseFormat(format, this.formatType);
			var element;
			if (this.isInput) {
				element = this.element;
			} else if (this.component) {
				element = this.element.find('input');
			}
			if (element && element.val()) {
				this.setValue();
			}
		},

		setValue: function () {
			var formatted = this.getFormattedDate();
			if (!this.isInput) {
				if (this.component) {
					this.element.find('input').val(formatted);
				}
				this.element.data('date', formatted);
			} else {
				this.element.val(formatted);
			}
			if (this.linkField) {
				$('#' + this.linkField).val(this.getFormattedDate(this.linkFormat));
			}
		},

		getFormattedDate: function (format) {
			if (format == undefined) format = this.format;
			return DPGlobal.formatDate(this.date, format, this.language, this.formatType);
		},

		setStartDate: function (startDate) {
			this.startDate = startDate || -Infinity;
			if (this.startDate !== -Infinity) {
				this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType);
			}
			this.update();
			this.updateNavArrows();
		},

		setEndDate: function (endDate) {
			this.endDate = endDate || Infinity;
			if (this.endDate !== Infinity) {
				this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType);
			}
			this.update();
			this.updateNavArrows();
		},

		setDaysOfWeekDisabled: function (daysOfWeekDisabled) {
			this.daysOfWeekDisabled = daysOfWeekDisabled || [];
			if (!$.isArray(this.daysOfWeekDisabled)) {
				this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/);
			}
			this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) {
				return parseInt(d, 10);
			});
			this.update();
			this.updateNavArrows();
		},

		setMinutesDisabled: function (minutesDisabled) {
			this.minutesDisabled = minutesDisabled || [];
			if (!$.isArray(this.minutesDisabled)) {
				this.minutesDisabled = this.minutesDisabled.split(/,\s*/);
			}
			this.minutesDisabled = $.map(this.minutesDisabled, function (d) {
				return parseInt(d, 10);
			});
			this.update();
			this.updateNavArrows();
		},

		setHoursDisabled: function (hoursDisabled) {
			this.hoursDisabled = hoursDisabled || [];
			if (!$.isArray(this.hoursDisabled)) {
				this.hoursDisabled = this.hoursDisabled.split(/,\s*/);
			}
			this.hoursDisabled = $.map(this.hoursDisabled, function (d) {
				return parseInt(d, 10);
			});
			this.update();
			this.updateNavArrows();
		},

		place: function () {
			if (this.isInline) return;

			if (!this.zIndex) {
				var index_highest = 0;
				$('div').each(function () {
					var index_current = parseInt($(this).css("zIndex"), 10);
					if (index_current > index_highest) {
						index_highest = index_current;
					}
				});
				this.zIndex = index_highest + 10;
			}

			var offset, top, left, containerOffset;
			if (this.container instanceof $) {
				containerOffset = this.container.offset();
			} else {
				containerOffset = $(this.container).offset();
			}

			if (this.component) {
				offset = this.component.offset();
				left = offset.left;
				if (this.pickerPosition == 'bottom-left' || this.pickerPosition == 'top-left') {
					left += this.component.outerWidth() - this.picker.outerWidth();
				}
			} else {
				offset = this.element.offset();
				left = offset.left;
			}

			if(left+220 > document.body.clientWidth){
            			left = document.body.clientWidth-220;
          		}

			if (this.pickerPosition == 'top-left' || this.pickerPosition == 'top-right') {
				top = offset.top - this.picker.outerHeight();
			} else {
				top = offset.top + this.height;
			}

			top = top - containerOffset.top;
			left = left - containerOffset.left;

            if( !elementOrParentIsFixed(this.element) ){
			    top = top + document.body.scrollTop;
            }

			this.picker.css({
				top:    top,
				left:   left,
				zIndex: this.zIndex
			});
		},

		update: function () {
			var date, fromArgs = false;
			if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {
				date = arguments[0];
				fromArgs = true;
			} else {
				date = (this.isInput ? this.element.val() : this.element.find('input').val()) || this.element.data('date') || this.initialDate;
				if (typeof date == 'string' || date instanceof String) {
				  date = date.replace(/^\s+|\s+$/g,'');
				}
			}

			if (!date) {
				date = new Date();
				fromArgs = false;
			}

			this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType);

			if (fromArgs) this.setValue();

			if (this.date < this.startDate) {
				this.viewDate = new Date(this.startDate);
			} else if (this.date > this.endDate) {
				this.viewDate = new Date(this.endDate);
			} else {
				this.viewDate = new Date(this.date);
			}
			this.fill();
		},

		fillDow: function () {
			var dowCnt = this.weekStart,
				html = '<tr>';
			while (dowCnt < this.weekStart + 7) {
				html += '<th class="dow">' + dates[this.language].daysMin[(dowCnt++) % 7] + '</th>';
			}
			html += '</tr>';
			this.picker.find('.datetimepicker-days thead').append(html);
		},

		fillMonths: function () {
			var html = '',
				i = 0;
			while (i < 12) {
				html += '<span class="month">' + dates[this.language].monthsShort[i++] + '</span>';
			}
			this.picker.find('.datetimepicker-months td').html(html);
		},

		fill: function () {
			if (this.date == null || this.viewDate == null) {
				return;
			}
			var d = new Date(this.viewDate),
				year = d.getUTCFullYear(),
				month = d.getUTCMonth(),
				dayMonth = d.getUTCDate(),
				hours = d.getUTCHours(),
				minutes = d.getUTCMinutes(),
				startYear = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity,
				startMonth = this.startDate !== -Infinity ? this.startDate.getUTCMonth() + 1 : -Infinity,
				endYear = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity,
				endMonth = this.endDate !== Infinity ? this.endDate.getUTCMonth() + 1 : Infinity,
				currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(),
				today = new Date();
			this.picker.find('.datetimepicker-days thead th:eq(1)')
				.text(dates[this.language].months[month] + ' ' + year);
			if (this.formatViewType == "time") {
				var formatted = this.getFormattedDate();
				this.picker.find('.datetimepicker-hours thead th:eq(1)').text(formatted);
				this.picker.find('.datetimepicker-minutes thead th:eq(1)').text(formatted);
			} else {
				this.picker.find('.datetimepicker-hours thead th:eq(1)')
					.text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);
				this.picker.find('.datetimepicker-minutes thead th:eq(1)')
					.text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);
			}
			this.picker.find('tfoot th.today')
				.text(dates[this.language].today)
				.toggle(this.todayBtn !== false);
			this.updateNavArrows();
			this.fillMonths();
			/*var prevMonth = UTCDate(year, month, 0,0,0,0,0);
			 prevMonth.setUTCDate(prevMonth.getDate() - (prevMonth.getUTCDay() - this.weekStart + 7)%7);*/
			var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0),
				day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
			prevMonth.setUTCDate(day);
			prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7);
			var nextMonth = new Date(prevMonth);
			nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
			nextMonth = nextMonth.valueOf();
			var html = [];
			var clsName;
			while (prevMonth.valueOf() < nextMonth) {
				if (prevMonth.getUTCDay() == this.weekStart) {
					html.push('<tr>');
				}
				clsName = '';
				if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() < month)) {
					clsName += ' old';
				} else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() == year && prevMonth.getUTCMonth() > month)) {
					clsName += ' new';
				}
				// Compare internal UTC date with local today, not UTC today
				if (this.todayHighlight &&
					prevMonth.getUTCFullYear() == today.getFullYear() &&
					prevMonth.getUTCMonth() == today.getMonth() &&
					prevMonth.getUTCDate() == today.getDate()) {
					clsName += ' today';
				}
				if (prevMonth.valueOf() == currentDate) {
					clsName += ' active';
				}
				if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate ||
					$.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1) {
					clsName += ' disabled';
				}
				html.push('<td class="day' + clsName + '">' + prevMonth.getUTCDate() + '</td>');
				if (prevMonth.getUTCDay() == this.weekEnd) {
					html.push('</tr>');
				}
				prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);
			}
			this.picker.find('.datetimepicker-days tbody').empty().append(html.join(''));

			html = [];
			var txt = '', meridian = '', meridianOld = '';
			var hoursDisabled = this.hoursDisabled || [];
			for (var i = 0; i < 24; i++) {
				if (hoursDisabled.indexOf(i) !== -1) continue;
				var actual = UTCDate(year, month, dayMonth, i);
				clsName = '';
				// We want the previous hour for the startDate
				if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) {
					clsName += ' disabled';
				} else if (hours == i) {
					clsName += ' active';
				}
				if (this.showMeridian && dates[this.language].meridiem.length == 2) {
					meridian = (i < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);
					if (meridian != meridianOld) {
						if (meridianOld != '') {
							html.push('</fieldset>');
						}
						html.push('<fieldset class="hour"><legend>' + meridian.toUpperCase() + '</legend>');
					}
					meridianOld = meridian;
					txt = (i % 12 ? i % 12 : 12);
					html.push('<span class="hour' + clsName + ' hour_' + (i < 12 ? 'am' : 'pm') + '">' + txt + '</span>');
					if (i == 23) {
						html.push('</fieldset>');
					}
				} else {
					txt = i + ':00';
					html.push('<span class="hour' + clsName + '">' + txt + '</span>');
				}
			}
			this.picker.find('.datetimepicker-hours td').html(html.join(''));

			html = [];
			txt = '', meridian = '', meridianOld = '';
			var minutesDisabled = this.minutesDisabled || [];
			for (var i = 0; i < 60; i += this.minuteStep) {
				if (minutesDisabled.indexOf(i) !== -1) continue;
				var actual = UTCDate(year, month, dayMonth, hours, i, 0);
				clsName = '';
				if (actual.valueOf() < this.startDate || actual.valueOf() > this.endDate) {
					clsName += ' disabled';
				} else if (Math.floor(minutes / this.minuteStep) == Math.floor(i / this.minuteStep)) {
					clsName += ' active';
				}
				if (this.showMeridian && dates[this.language].meridiem.length == 2) {
					meridian = (hours < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);
					if (meridian != meridianOld) {
						if (meridianOld != '') {
							html.push('</fieldset>');
						}
						html.push('<fieldset class="minute"><legend>' + meridian.toUpperCase() + '</legend>');
					}
					meridianOld = meridian;
					txt = (hours % 12 ? hours % 12 : 12);
					//html.push('<span class="minute'+clsName+' minute_'+(hours<12?'am':'pm')+'">'+txt+'</span>');
					html.push('<span class="minute' + clsName + '">' + txt + ':' + (i < 10 ? '0' + i : i) + '</span>');
					if (i == 59) {
						html.push('</fieldset>');
					}
				} else {
					txt = i + ':00';
					//html.push('<span class="hour'+clsName+'">'+txt+'</span>');
					html.push('<span class="minute' + clsName + '">' + hours + ':' + (i < 10 ? '0' + i : i) + '</span>');
				}
			}
			this.picker.find('.datetimepicker-minutes td').html(html.join(''));

			var currentYear = this.date.getUTCFullYear();
			var months = this.picker.find('.datetimepicker-months')
				.find('th:eq(1)')
				.text(year)
				.end()
				.find('span').removeClass('active');
			if (currentYear == year) {
				// getUTCMonths() returns 0 based, and we need to select the next one
                // To cater bootstrap 2 we don't need to select the next one
                var offset = months.length - 12;
				months.eq(this.date.getUTCMonth() + offset).addClass('active');
			}
			if (year < startYear || year > endYear) {
				months.addClass('disabled');
			}
			if (year == startYear) {
				months.slice(0, startMonth + 1).addClass('disabled');
			}
			if (year == endYear) {
				months.slice(endMonth).addClass('disabled');
			}

			html = '';
			year = parseInt(year / 10, 10) * 10;
			var yearCont = this.picker.find('.datetimepicker-years')
				.find('th:eq(1)')
				.text(year + '-' + (year + 9))
				.end()
				.find('td');
			year -= 1;
			for (var i = -1; i < 11; i++) {
				html += '<span class="year' + (i == -1 || i == 10 ? ' old' : '') + (currentYear == year ? ' active' : '') + (year < startYear || year > endYear ? ' disabled' : '') + '">' + year + '</span>';
				year += 1;
			}
			yearCont.html(html);
			this.place();
		},

		updateNavArrows: function () {
			var d = new Date(this.viewDate),
				year = d.getUTCFullYear(),
				month = d.getUTCMonth(),
				day = d.getUTCDate(),
				hour = d.getUTCHours();
			switch (this.viewMode) {
				case 0:
					if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()
						&& month <= this.startDate.getUTCMonth()
						&& day <= this.startDate.getUTCDate()
						&& hour <= this.startDate.getUTCHours()) {
						this.picker.find('.prev').css({visibility: 'hidden'});
					} else {
						this.picker.find('.prev').css({visibility: 'visible'});
					}
					if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()
						&& month >= this.endDate.getUTCMonth()
						&& day >= this.endDate.getUTCDate()
						&& hour >= this.endDate.getUTCHours()) {
						this.picker.find('.next').css({visibility: 'hidden'});
					} else {
						this.picker.find('.next').css({visibility: 'visible'});
					}
					break;
				case 1:
					if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()
						&& month <= this.startDate.getUTCMonth()
						&& day <= this.startDate.getUTCDate()) {
						this.picker.find('.prev').css({visibility: 'hidden'});
					} else {
						this.picker.find('.prev').css({visibility: 'visible'});
					}
					if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()
						&& month >= this.endDate.getUTCMonth()
						&& day >= this.endDate.getUTCDate()) {
						this.picker.find('.next').css({visibility: 'hidden'});
					} else {
						this.picker.find('.next').css({visibility: 'visible'});
					}
					break;
				case 2:
					if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()
						&& month <= this.startDate.getUTCMonth()) {
						this.picker.find('.prev').css({visibility: 'hidden'});
					} else {
						this.picker.find('.prev').css({visibility: 'visible'});
					}
					if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()
						&& month >= this.endDate.getUTCMonth()) {
						this.picker.find('.next').css({visibility: 'hidden'});
					} else {
						this.picker.find('.next').css({visibility: 'visible'});
					}
					break;
				case 3:
				case 4:
					if (this.startDate !== -Infinity && year <= this.startDate.getUTCFullYear()) {
						this.picker.find('.prev').css({visibility: 'hidden'});
					} else {
						this.picker.find('.prev').css({visibility: 'visible'});
					}
					if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()) {
						this.picker.find('.next').css({visibility: 'hidden'});
					} else {
						this.picker.find('.next').css({visibility: 'visible'});
					}
					break;
			}
		},

		mousewheel: function (e) {

			e.preventDefault();
			e.stopPropagation();

			if (this.wheelPause) {
				return;
			}

			this.wheelPause = true;

			var originalEvent = e.originalEvent;

			var delta = originalEvent.wheelDelta;

			var mode = delta > 0 ? 1 : (delta === 0) ? 0 : -1;

			if (this.wheelViewModeNavigationInverseDirection) {
				mode = -mode;
			}

			this.showMode(mode);

			setTimeout($.proxy(function () {

				this.wheelPause = false

			}, this), this.wheelViewModeNavigationDelay);

		},

		click: function (e) {
			e.stopPropagation();
			e.preventDefault();
			var target = $(e.target).closest('span, td, th, legend');
			if (target.is('.' + this.icontype)) {
				target = $(target).parent().closest('span, td, th, legend');
			}
			if (target.length == 1) {
				if (target.is('.disabled')) {
					this.element.trigger({
						type:      'outOfRange',
						date:      this.viewDate,
						startDate: this.startDate,
						endDate:   this.endDate
					});
					return;
				}
				switch (target[0].nodeName.toLowerCase()) {
					case 'th':
						switch (target[0].className) {
							case 'switch':
								this.showMode(1);
								break;
							case 'prev':
							case 'next':
								var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1);
								switch (this.viewMode) {
									case 0:
										this.viewDate = this.moveHour(this.viewDate, dir);
										break;
									case 1:
										this.viewDate = this.moveDate(this.viewDate, dir);
										break;
									case 2:
										this.viewDate = this.moveMonth(this.viewDate, dir);
										break;
									case 3:
									case 4:
										this.viewDate = this.moveYear(this.viewDate, dir);
										break;
								}
								this.fill();
								this.element.trigger({
									type:      target[0].className + ':' + this.convertViewModeText(this.viewMode),
									date:      this.viewDate,
									startDate: this.startDate,
									endDate:   this.endDate
								});
								break;
							case 'today':
								var date = new Date();
								date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);

								// Respect startDate and endDate.
								if (date < this.startDate) date = this.startDate;
								else if (date > this.endDate) date = this.endDate;

								this.viewMode = this.startViewMode;
								this.showMode(0);
								this._setDate(date);
								this.fill();
								if (this.autoclose) {
									this.hide();
								}
								break;
						}
						break;
					case 'span':
						if (!target.is('.disabled')) {
							var year = this.viewDate.getUTCFullYear(),
								month = this.viewDate.getUTCMonth(),
								day = this.viewDate.getUTCDate(),
								hours = this.viewDate.getUTCHours(),
								minutes = this.viewDate.getUTCMinutes(),
								seconds = this.viewDate.getUTCSeconds();

							if (target.is('.month')) {
								this.viewDate.setUTCDate(1);
								month = target.parent().find('span').index(target);
								day = this.viewDate.getUTCDate();
								this.viewDate.setUTCMonth(month);
								this.element.trigger({
									type: 'changeMonth',
									date: this.viewDate
								});
								if (this.viewSelect >= 3) {
									this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
								}
							} else if (target.is('.year')) {
								this.viewDate.setUTCDate(1);
								year = parseInt(target.text(), 10) || 0;
								this.viewDate.setUTCFullYear(year);
								this.element.trigger({
									type: 'changeYear',
									date: this.viewDate
								});
								if (this.viewSelect >= 4) {
									this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
								}
							} else if (target.is('.hour')) {
								hours = parseInt(target.text(), 10) || 0;
								if (target.hasClass('hour_am') || target.hasClass('hour_pm')) {
									if (hours == 12 && target.hasClass('hour_am')) {
										hours = 0;
									} else if (hours != 12 && target.hasClass('hour_pm')) {
										hours += 12;
									}
								}
								this.viewDate.setUTCHours(hours);
								this.element.trigger({
									type: 'changeHour',
									date: this.viewDate
								});
								if (this.viewSelect >= 1) {
									this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
								}
							} else if (target.is('.minute')) {
								minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0;
								this.viewDate.setUTCMinutes(minutes);
								this.element.trigger({
									type: 'changeMinute',
									date: this.viewDate
								});
								if (this.viewSelect >= 0) {
									this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
								}
							}
							if (this.viewMode != 0) {
								var oldViewMode = this.viewMode;
								this.showMode(-1);
								this.fill();
								if (oldViewMode == this.viewMode && this.autoclose) {
									this.hide();
								}
							} else {
								this.fill();
								if (this.autoclose) {
									this.hide();
								}
							}
						}
						break;
					case 'td':
						if (target.is('.day') && !target.is('.disabled')) {
							var day = parseInt(target.text(), 10) || 1;
							var year = this.viewDate.getUTCFullYear(),
								month = this.viewDate.getUTCMonth(),
								hours = this.viewDate.getUTCHours(),
								minutes = this.viewDate.getUTCMinutes(),
								seconds = this.viewDate.getUTCSeconds();
							if (target.is('.old')) {
								if (month === 0) {
									month = 11;
									year -= 1;
								} else {
									month -= 1;
								}
							} else if (target.is('.new')) {
								if (month == 11) {
									month = 0;
									year += 1;
								} else {
									month += 1;
								}
							}
							this.viewDate.setUTCFullYear(year);
							this.viewDate.setUTCMonth(month, day);
							this.element.trigger({
								type: 'changeDay',
								date: this.viewDate
							});
							if (this.viewSelect >= 2) {
								this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
							}
						}
						var oldViewMode = this.viewMode;
						this.showMode(-1);
						this.fill();
						if (oldViewMode == this.viewMode && this.autoclose) {
							this.hide();
						}
						break;
				}
			}
		},

		_setDate: function (date, which) {
			if (!which || which == 'date')
				this.date = date;
			if (!which || which == 'view')
				this.viewDate = date;
			this.fill();
			this.setValue();
			var element;
			if (this.isInput) {
				element = this.element;
			} else if (this.component) {
				element = this.element.find('input');
			}
			if (element) {
				element.change();
				if (this.autoclose && (!which || which == 'date')) {
					//this.hide();
				}
			}
			this.element.trigger({
				type: 'changeDate',
				date: this.date
			});
			if(date == null)
				this.date = this.viewDate;
		},

		moveMinute: function (date, dir) {
			if (!dir) return date;
			var new_date = new Date(date.valueOf());
			//dir = dir > 0 ? 1 : -1;
			new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep));
			return new_date;
		},

		moveHour: function (date, dir) {
			if (!dir) return date;
			var new_date = new Date(date.valueOf());
			//dir = dir > 0 ? 1 : -1;
			new_date.setUTCHours(new_date.getUTCHours() + dir);
			return new_date;
		},

		moveDate: function (date, dir) {
			if (!dir) return date;
			var new_date = new Date(date.valueOf());
			//dir = dir > 0 ? 1 : -1;
			new_date.setUTCDate(new_date.getUTCDate() + dir);
			return new_date;
		},

		moveMonth: function (date, dir) {
			if (!dir) return date;
			var new_date = new Date(date.valueOf()),
				day = new_date.getUTCDate(),
				month = new_date.getUTCMonth(),
				mag = Math.abs(dir),
				new_month, test;
			dir = dir > 0 ? 1 : -1;
			if (mag == 1) {
				test = dir == -1
					// If going back one month, make sure month is not current month
					// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
					? function () {
					return new_date.getUTCMonth() == month;
				}
					// If going forward one month, make sure month is as expected
					// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
					: function () {
					return new_date.getUTCMonth() != new_month;
				};
				new_month = month + dir;
				new_date.setUTCMonth(new_month);
				// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
				if (new_month < 0 || new_month > 11)
					new_month = (new_month + 12) % 12;
			} else {
				// For magnitudes >1, move one month at a time...
				for (var i = 0; i < mag; i++)
					// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
					new_date = this.moveMonth(new_date, dir);
				// ...then reset the day, keeping it in the new month
				new_month = new_date.getUTCMonth();
				new_date.setUTCDate(day);
				test = function () {
					return new_month != new_date.getUTCMonth();
				};
			}
			// Common date-resetting loop -- if date is beyond end of month, make it
			// end of month
			while (test()) {
				new_date.setUTCDate(--day);
				new_date.setUTCMonth(new_month);
			}
			return new_date;
		},

		moveYear: function (date, dir) {
			return this.moveMonth(date, dir * 12);
		},

		dateWithinRange: function (date) {
			return date >= this.startDate && date <= this.endDate;
		},

		keydown: function (e) {
			if (this.picker.is(':not(:visible)')) {
				if (e.keyCode == 27) // allow escape to hide and re-show picker
					this.show();
				return;
			}
			var dateChanged = false,
				dir, day, month,
				newDate, newViewDate;
			switch (e.keyCode) {
				case 27: // escape
					this.hide();
					e.preventDefault();
					break;
				case 37: // left
				case 39: // right
					if (!this.keyboardNavigation) break;
					dir = e.keyCode == 37 ? -1 : 1;
					viewMode = this.viewMode;
					if (e.ctrlKey) {
						viewMode += 2;
					} else if (e.shiftKey) {
						viewMode += 1;
					}
					if (viewMode == 4) {
						newDate = this.moveYear(this.date, dir);
						newViewDate = this.moveYear(this.viewDate, dir);
					} else if (viewMode == 3) {
						newDate = this.moveMonth(this.date, dir);
						newViewDate = this.moveMonth(this.viewDate, dir);
					} else if (viewMode == 2) {
						newDate = this.moveDate(this.date, dir);
						newViewDate = this.moveDate(this.viewDate, dir);
					} else if (viewMode == 1) {
						newDate = this.moveHour(this.date, dir);
						newViewDate = this.moveHour(this.viewDate, dir);
					} else if (viewMode == 0) {
						newDate = this.moveMinute(this.date, dir);
						newViewDate = this.moveMinute(this.viewDate, dir);
					}
					if (this.dateWithinRange(newDate)) {
						this.date = newDate;
						this.viewDate = newViewDate;
						this.setValue();
						this.update();
						e.preventDefault();
						dateChanged = true;
					}
					break;
				case 38: // up
				case 40: // down
					if (!this.keyboardNavigation) break;
					dir = e.keyCode == 38 ? -1 : 1;
					viewMode = this.viewMode;
					if (e.ctrlKey) {
						viewMode += 2;
					} else if (e.shiftKey) {
						viewMode += 1;
					}
					if (viewMode == 4) {
						newDate = this.moveYear(this.date, dir);
						newViewDate = this.moveYear(this.viewDate, dir);
					} else if (viewMode == 3) {
						newDate = this.moveMonth(this.date, dir);
						newViewDate = this.moveMonth(this.viewDate, dir);
					} else if (viewMode == 2) {
						newDate = this.moveDate(this.date, dir * 7);
						newViewDate = this.moveDate(this.viewDate, dir * 7);
					} else if (viewMode == 1) {
						if (this.showMeridian) {
							newDate = this.moveHour(this.date, dir * 6);
							newViewDate = this.moveHour(this.viewDate, dir * 6);
						} else {
							newDate = this.moveHour(this.date, dir * 4);
							newViewDate = this.moveHour(this.viewDate, dir * 4);
						}
					} else if (viewMode == 0) {
						newDate = this.moveMinute(this.date, dir * 4);
						newViewDate = this.moveMinute(this.viewDate, dir * 4);
					}
					if (this.dateWithinRange(newDate)) {
						this.date = newDate;
						this.viewDate = newViewDate;
						this.setValue();
						this.update();
						e.preventDefault();
						dateChanged = true;
					}
					break;
				case 13: // enter
					if (this.viewMode != 0) {
						var oldViewMode = this.viewMode;
						this.showMode(-1);
						this.fill();
						if (oldViewMode == this.viewMode && this.autoclose) {
							this.hide();
						}
					} else {
						this.fill();
						if (this.autoclose) {
							this.hide();
						}
					}
					e.preventDefault();
					break;
				case 9: // tab
					this.hide();
					break;
			}
			if (dateChanged) {
				var element;
				if (this.isInput) {
					element = this.element;
				} else if (this.component) {
					element = this.element.find('input');
				}
				if (element) {
					element.change();
				}
				this.element.trigger({
					type: 'changeDate',
					date: this.date
				});
			}
		},

		showMode: function (dir) {
			if (dir) {
				var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir));
				if (newViewMode >= this.minView && newViewMode <= this.maxView) {
					this.element.trigger({
						type:        'changeMode',
						date:        this.viewDate,
						oldViewMode: this.viewMode,
						newViewMode: newViewMode
					});

					this.viewMode = newViewMode;
				}
			}
			/*
			 vitalets: fixing bug of very special conditions:
			 jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover.
			 Method show() does not set display css correctly and datetimepicker is not shown.
			 Changed to .css('display', 'block') solve the problem.
			 See https://github.com/vitalets/x-editable/issues/37

			 In jquery 1.7.2+ everything works fine.
			 */
			//this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
			this.picker.find('>div').hide().filter('.datetimepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block');
			this.updateNavArrows();
		},

		reset: function (e) {
			this._setDate(null, 'date');
		},

		convertViewModeText:  function (viewMode) {
			switch (viewMode) {
				case 4:
					return 'decade';
				case 3:
					return 'year';
				case 2:
					return 'month';
				case 1:
					return 'day';
				case 0:
					return 'hour';
			}
		}
	};

	var old = $.fn.datetimepicker;
	$.fn.datetimepicker = function (option) {
		var args = Array.apply(null, arguments);
		args.shift();
		var internal_return;
		this.each(function () {
			var $this = $(this),
				data = $this.data('datetimepicker'),
				options = typeof option == 'object' && option;
			if (!data) {
				$this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults, options))));
			}
			if (typeof option == 'string' && typeof data[option] == 'function') {
				internal_return = data[option].apply(data, args);
				if (internal_return !== undefined) {
					return false;
				}
			}
		});
		if (internal_return !== undefined)
			return internal_return;
		else
			return this;
	};

	$.fn.datetimepicker.defaults = {
	};
	$.fn.datetimepicker.Constructor = Datetimepicker;
	var dates = $.fn.datetimepicker.dates = {
		en: {
			days:        ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
			daysShort:   ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
			daysMin:     ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
			months:      ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
			monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
			meridiem:    ["am", "pm"],
			suffix:      ["st", "nd", "rd", "th"],
			today:       "Today"
		}
	};

	var DPGlobal = {
		modes:            [
			{
				clsName: 'minutes',
				navFnc:  'Hours',
				navStep: 1
			},
			{
				clsName: 'hours',
				navFnc:  'Date',
				navStep: 1
			},
			{
				clsName: 'days',
				navFnc:  'Month',
				navStep: 1
			},
			{
				clsName: 'months',
				navFnc:  'FullYear',
				navStep: 1
			},
			{
				clsName: 'years',
				navFnc:  'FullYear',
				navStep: 10
			}
		],
		isLeapYear:       function (year) {
			return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))
		},
		getDaysInMonth:   function (year, month) {
			return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
		},
		getDefaultFormat: function (type, field) {
			if (type == "standard") {
				if (field == 'input')
					return 'yyyy-mm-dd hh:ii';
				else
					return 'yyyy-mm-dd hh:ii:ss';
			} else if (type == "php") {
				if (field == 'input')
					return 'Y-m-d H:i';
				else
					return 'Y-m-d H:i:s';
			} else {
				throw new Error("Invalid format type.");
			}
		},
		validParts:       function (type) {
			if (type == "standard") {
				return /hh?|HH?|p|P|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g;
			} else if (type == "php") {
				return /[dDjlNwzFmMnStyYaABgGhHis]/g;
			} else {
				throw new Error("Invalid format type.");
			}
		},
		nonpunctuation:   /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,
		parseFormat:      function (format, type) {
			// IE treats \0 as a string end in inputs (truncating the value),
			// so it's a bad format delimiter, anyway
			var separators = format.replace(this.validParts(type), '\0').split('\0'),
				parts = format.match(this.validParts(type));
			if (!separators || !separators.length || !parts || parts.length == 0) {
				throw new Error("Invalid date format.");
			}
			return {separators: separators, parts: parts};
		},
		parseDate:        function (date, format, language, type) {
			if (date instanceof Date) {
				var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000);
				dateUTC.setMilliseconds(0);
				return dateUTC;
			}
			if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(date)) {
				format = this.parseFormat('yyyy-mm-dd', type);
			}
			if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(date)) {
				format = this.parseFormat('yyyy-mm-dd hh:ii', type);
			}
			if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(date)) {
				format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type);
			}
			if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(date)) {
				var part_re = /([-+]\d+)([dmwy])/,
					parts = date.match(/([-+]\d+)([dmwy])/g),
					part, dir;
				date = new Date();
				for (var i = 0; i < parts.length; i++) {
					part = part_re.exec(parts[i]);
					dir = parseInt(part[1]);
					switch (part[2]) {
						case 'd':
							date.setUTCDate(date.getUTCDate() + dir);
							break;
						case 'm':
							date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir);
							break;
						case 'w':
							date.setUTCDate(date.getUTCDate() + dir * 7);
							break;
						case 'y':
							date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir);
							break;
					}
				}
				return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), 0);
			}
			var parts = date && date.toString().match(this.nonpunctuation) || [],
				date = new Date(0, 0, 0, 0, 0, 0, 0),
				parsed = {},
				setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'D', 'DD', 'd', 'dd', 'H', 'HH', 'p', 'P'],
				setters_map = {
					hh:   function (d, v) {
						return d.setUTCHours(v);
					},
					h:    function (d, v) {
						return d.setUTCHours(v);
					},
					HH:   function (d, v) {
						return d.setUTCHours(v == 12 ? 0 : v);
					},
					H:    function (d, v) {
						return d.setUTCHours(v == 12 ? 0 : v);
					},
					ii:   function (d, v) {
						return d.setUTCMinutes(v);
					},
					i:    function (d, v) {
						return d.setUTCMinutes(v);
					},
					ss:   function (d, v) {
						return d.setUTCSeconds(v);
					},
					s:    function (d, v) {
						return d.setUTCSeconds(v);
					},
					yyyy: function (d, v) {
						return d.setUTCFullYear(v);
					},
					yy:   function (d, v) {
						return d.setUTCFullYear(2000 + v);
					},
					m:    function (d, v) {
						v -= 1;
						while (v < 0) v += 12;
						v %= 12;
						d.setUTCMonth(v);
						while (d.getUTCMonth() != v)
							if (isNaN(d.getUTCMonth()))
								return d;
							else
								d.setUTCDate(d.getUTCDate() - 1);
						return d;
					},
					d:    function (d, v) {
						return d.setUTCDate(v);
					},
					p:    function (d, v) {
						return d.setUTCHours(v == 1 ? d.getUTCHours() + 12 : d.getUTCHours());
					}
				},
				val, filtered, part;
			setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
			setters_map['dd'] = setters_map['d'];
			setters_map['P'] = setters_map['p'];
			date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
			if (parts.length == format.parts.length) {
				for (var i = 0, cnt = format.parts.length; i < cnt; i++) {
					val = parseInt(parts[i], 10);
					part = format.parts[i];
					if (isNaN(val)) {
						switch (part) {
							case 'MM':
								filtered = $(dates[language].months).filter(function () {
									var m = this.slice(0, parts[i].length),
										p = parts[i].slice(0, m.length);
									return m == p;
								});
								val = $.inArray(filtered[0], dates[language].months) + 1;
								break;
							case 'M':
								filtered = $(dates[language].monthsShort).filter(function () {
									var m = this.slice(0, parts[i].length),
										p = parts[i].slice(0, m.length);
									return m.toLowerCase() == p.toLowerCase();
								});
								val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
								break;
							case 'p':
							case 'P':
								val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem);
								break;
						}
					}
					parsed[part] = val;
				}
				for (var i = 0, s; i < setters_order.length; i++) {
					s = setters_order[i];
					if (s in parsed && !isNaN(parsed[s]))
						setters_map[s](date, parsed[s])
				}
			}
			return date;
		},
		formatDate:       function (date, format, language, type) {
			if (date == null) {
				return '';
			}
			var val;
			if (type == 'standard') {
				val = {
					// year
					yy:   date.getUTCFullYear().toString().substring(2),
					yyyy: date.getUTCFullYear(),
					// month
					m:    date.getUTCMonth() + 1,
					M:    dates[language].monthsShort[date.getUTCMonth()],
					MM:   dates[language].months[date.getUTCMonth()],
					// day
					d:    date.getUTCDate(),
					D:    dates[language].daysShort[date.getUTCDay()],
					DD:   dates[language].days[date.getUTCDay()],
					p:    (dates[language].meridiem.length == 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),
					// hour
					h:    date.getUTCHours(),
					// minute
					i:    date.getUTCMinutes(),
					// second
					s:    date.getUTCSeconds()
				};

				if (dates[language].meridiem.length == 2) {
					val.H = (val.h % 12 == 0 ? 12 : val.h % 12);
				}
				else {
					val.H = val.h;
				}
				val.HH = (val.H < 10 ? '0' : '') + val.H;
				val.P = val.p.toUpperCase();
				val.hh = (val.h < 10 ? '0' : '') + val.h;
				val.ii = (val.i < 10 ? '0' : '') + val.i;
				val.ss = (val.s < 10 ? '0' : '') + val.s;
				val.dd = (val.d < 10 ? '0' : '') + val.d;
				val.mm = (val.m < 10 ? '0' : '') + val.m;
			} else if (type == 'php') {
				// php format
				val = {
					// year
					y: date.getUTCFullYear().toString().substring(2),
					Y: date.getUTCFullYear(),
					// month
					F: dates[language].months[date.getUTCMonth()],
					M: dates[language].monthsShort[date.getUTCMonth()],
					n: date.getUTCMonth() + 1,
					t: DPGlobal.getDaysInMonth(date.getUTCFullYear(), date.getUTCMonth()),
					// day
					j: date.getUTCDate(),
					l: dates[language].days[date.getUTCDay()],
					D: dates[language].daysShort[date.getUTCDay()],
					w: date.getUTCDay(), // 0 -> 6
					N: (date.getUTCDay() == 0 ? 7 : date.getUTCDay()),       // 1 -> 7
					S: (date.getUTCDate() % 10 <= dates[language].suffix.length ? dates[language].suffix[date.getUTCDate() % 10 - 1] : ''),
					// hour
					a: (dates[language].meridiem.length == 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),
					g: (date.getUTCHours() % 12 == 0 ? 12 : date.getUTCHours() % 12),
					G: date.getUTCHours(),
					// minute
					i: date.getUTCMinutes(),
					// second
					s: date.getUTCSeconds()
				};
				val.m = (val.n < 10 ? '0' : '') + val.n;
				val.d = (val.j < 10 ? '0' : '') + val.j;
				val.A = val.a.toString().toUpperCase();
				val.h = (val.g < 10 ? '0' : '') + val.g;
				val.H = (val.G < 10 ? '0' : '') + val.G;
				val.i = (val.i < 10 ? '0' : '') + val.i;
				val.s = (val.s < 10 ? '0' : '') + val.s;
			} else {
				throw new Error("Invalid format type.");
			}
			var date = [],
				seps = $.extend([], format.separators);
			for (var i = 0, cnt = format.parts.length; i < cnt; i++) {
				if (seps.length) {
					date.push(seps.shift());
				}
				date.push(val[format.parts[i]]);
			}
			if (seps.length) {
				date.push(seps.shift());
			}
			return date.join('');
		},
		convertViewMode:  function (viewMode) {
			switch (viewMode) {
				case 4:
				case 'decade':
					viewMode = 4;
					break;
				case 3:
				case 'year':
					viewMode = 3;
					break;
				case 2:
				case 'month':
					viewMode = 2;
					break;
				case 1:
				case 'day':
					viewMode = 1;
					break;
				case 0:
				case 'hour':
					viewMode = 0;
					break;
			}

			return viewMode;
		},
		headTemplate:     '<thead>' +
							  '<tr>' +
							  '<th class="prev"><i class="{iconType} {leftArrow}"/></th>' +
							  '<th colspan="5" class="switch"></th>' +
							  '<th class="next"><i class="{iconType} {rightArrow}"/></th>' +
							  '</tr>' +
			'</thead>',
		headTemplateV3:   '<thead>' +
							  '<tr>' +
							  '<th class="prev"><span class="{iconType} {leftArrow}"></span> </th>' +
							  '<th colspan="5" class="switch"></th>' +
							  '<th class="next"><span class="{iconType} {rightArrow}"></span> </th>' +
							  '</tr>' +
			'</thead>',
		contTemplate:     '<tbody><tr><td colspan="7"></td></tr></tbody>',
		footTemplate:     '<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'
	};
	DPGlobal.template = '<div class="datetimepicker">' +
		'<div class="datetimepicker-minutes">' +
		'<table class=" table-condensed">' +
		DPGlobal.headTemplate +
		DPGlobal.contTemplate +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'<div class="datetimepicker-hours">' +
		'<table class=" table-condensed">' +
		DPGlobal.headTemplate +
		DPGlobal.contTemplate +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'<div class="datetimepicker-days">' +
		'<table class=" table-condensed">' +
		DPGlobal.headTemplate +
		'<tbody></tbody>' +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'<div class="datetimepicker-months">' +
		'<table class="table-condensed">' +
		DPGlobal.headTemplate +
		DPGlobal.contTemplate +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'<div class="datetimepicker-years">' +
		'<table class="table-condensed">' +
		DPGlobal.headTemplate +
		DPGlobal.contTemplate +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'</div>';
	DPGlobal.templateV3 = '<div class="datetimepicker">' +
		'<div class="datetimepicker-minutes">' +
		'<table class=" table-condensed">' +
		DPGlobal.headTemplateV3 +
		DPGlobal.contTemplate +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'<div class="datetimepicker-hours">' +
		'<table class=" table-condensed">' +
		DPGlobal.headTemplateV3 +
		DPGlobal.contTemplate +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'<div class="datetimepicker-days">' +
		'<table class=" table-condensed">' +
		DPGlobal.headTemplateV3 +
		'<tbody></tbody>' +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'<div class="datetimepicker-months">' +
		'<table class="table-condensed">' +
		DPGlobal.headTemplateV3 +
		DPGlobal.contTemplate +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'<div class="datetimepicker-years">' +
		'<table class="table-condensed">' +
		DPGlobal.headTemplateV3 +
		DPGlobal.contTemplate +
		DPGlobal.footTemplate +
		'</table>' +
		'</div>' +
		'</div>';
	$.fn.datetimepicker.DPGlobal = DPGlobal;

	/* DATETIMEPICKER NO CONFLICT
	 * =================== */

	$.fn.datetimepicker.noConflict = function () {
		$.fn.datetimepicker = old;
		return this;
	};

	/* DATETIMEPICKER DATA-API
	 * ================== */

	$(document).on(
		'focus.datetimepicker.data-api click.datetimepicker.data-api',
		'[data-provide="datetimepicker"]',
		function (e) {
			var $this = $(this);
			if ($this.data('datetimepicker')) return;
			e.preventDefault();
			// component click requires us to explicitly show it
			$this.datetimepicker('show');
		}
	);
	$(function () {
		$('[data-provide="datetimepicker-inline"]').datetimepicker();
	});

}(window.jQuery);

WRFILE: bootstrap.min.js

/*!
 * Bootstrap v3.3.6 (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||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(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.6",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.6",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.6",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.6",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(a.Event("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.6",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(a.Event("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.6",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.6",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.6",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.6",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.6",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.6",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);

WRFILE: datetimepicker.css

/*!
 * Datetimepicker for Bootstrap
 *
 * Copyright 2012 Stefan Petre
 * Improvements by Andrew Rowls
 * Improvements by Sébastien Malot
 * Licensed under the Apache License v2.0
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 */
.datetimepicker {
  padding: 4px;
  margin-top: 1px;
  white-space: normal;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  direction: ltr;
}
.datetimepicker.datetimepicker-rtl {
  direction: rtl;
}
.datetimepicker.datetimepicker-rtl table tr td span {
  float: right;
}
.datetimepicker  > div {
  display: none;
}
.datetimepicker.minutes div.datetimepicker-minutes {
  display: block;
}
.datetimepicker.hours div.datetimepicker-hours {
  display: block;
}
.datetimepicker.days div.datetimepicker-days {
  display: block;
}
.datetimepicker.months div.datetimepicker-months {
  display: block;
}
.datetimepicker.years div.datetimepicker-years {
  display: block;
}
.datetimepicker table {
  margin: 0;
}
.datetimepicker table tr td.minute:hover {
  background: #eeeeee;
  cursor: pointer;
}
.datetimepicker table tr td.hour:hover {
  background: #eeeeee;
  cursor: pointer;
}
.datetimepicker table tr td.day:hover {
  background: #eeeeee;
  cursor: pointer;
}
.datetimepicker table tr td span {
  display: block;
  width: 23%;
  height: 54px;
  line-height: 54px;
  float: left;
  margin: 1%;
  cursor: pointer;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
}
.datetimepicker table tr td span:hover {
  background: #eeeeee;
}
.datetimepicker table tr td span.old {
  color: #999999;
}
.datetimepicker .datetimepicker-hours span {
  height: 26px;
  line-height: 26px;
}
.datetimepicker .datetimepicker-minutes span {
  height: 26px;
  line-height: 26px;
}
.datetimepicker th.switch {
  width: 145px;
}
.datetimepicker-inline {
  width: 220px;
}
.datetimepicker-dropdown, .datetimepicker-dropdown-left {
  top: 0;
  left: 0;
}
[class*="datetimepicker-dropdown"]:before {
  content: '';
  display: inline-block;
  border-left: 7px solid transparent;
  border-right: 7px solid transparent;
  border-bottom: 7px solid #ccc;
  border-bottom-color: rgba(0, 0, 0, 0.2);
  position: absolute;
}
[class*="datetimepicker-dropdown"]:after {
  content: '';
  display: inline-block;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-bottom: 6px solid #ffffff;
  position: absolute;
}
[class*="datetimepicker-dropdown-top"]:before {
  content: '';
  display: inline-block;
  border-left: 7px solid transparent;
  border-right: 7px solid transparent;
  border-top: 7px solid #ccc;
  border-top-color: rgba(0, 0, 0, 0.2);
  border-bottom: 0;
}
[class*="datetimepicker-dropdown-top"]:after {
  content: '';
  display: inline-block;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-top: 6px solid #ffffff;
  border-bottom: 0;
}
.datetimepicker-dropdown-bottom-left:before {
  top: -7px;
  right: 6px;
}
.datetimepicker-dropdown-bottom-left:after {
  top: -6px;
  right: 7px;
}
.datetimepicker-dropdown-bottom-right:before {
  top: -7px;
  left: 6px;
}
.datetimepicker-dropdown-bottom-right:after {
  top: -6px;
  left: 7px;
}
.datetimepicker-dropdown-top-left:before {
  bottom: -7px;
  right: 6px;
}
.datetimepicker-dropdown-top-left:after {
  bottom: -6px;
  right: 7px;
}
.datetimepicker-dropdown-top-right:before {
  bottom: -7px;
  left: 6px;
}
.datetimepicker-dropdown-top-right:after {
  bottom: -6px;
  left: 7px;
}
.datetimepicker td, .datetimepicker th {
  text-align: center;
  width: 20px;
  height: 20px;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  border: none;
}
.table-striped .datetimepicker table tr td, .table-striped .datetimepicker table tr th {
  background-color: transparent;
}
.datetimepicker table tr td.old, .datetimepicker table tr td.new {
  color: #999999;
}
.datetimepicker table tr td.disabled, .datetimepicker table tr td.disabled:hover {
  background: none;
  color: #999999;
  cursor: default;
}
.datetimepicker table tr td.today,
.datetimepicker table tr td.today:hover,
.datetimepicker table tr td.today.disabled,
.datetimepicker table tr td.today.disabled:hover {
  background-color: #fde19a;
  background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
  background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
  background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
  background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
  background-image: linear-gradient(to bottom, #fdd49a, #fdf59a);
  background-repeat: repeat-x;
  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
  border-color: #fdf59a #fdf59a #fbed50;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
}
.datetimepicker table tr td.today:hover,
.datetimepicker table tr td.today:hover:hover,
.datetimepicker table tr td.today.disabled:hover,
.datetimepicker table tr td.today.disabled:hover:hover,
.datetimepicker table tr td.today:active,
.datetimepicker table tr td.today:hover:active,
.datetimepicker table tr td.today.disabled:active,
.datetimepicker table tr td.today.disabled:hover:active,
.datetimepicker table tr td.today.active,
.datetimepicker table tr td.today:hover.active,
.datetimepicker table tr td.today.disabled.active,
.datetimepicker table tr td.today.disabled:hover.active,
.datetimepicker table tr td.today.disabled,
.datetimepicker table tr td.today:hover.disabled,
.datetimepicker table tr td.today.disabled.disabled,
.datetimepicker table tr td.today.disabled:hover.disabled,
.datetimepicker table tr td.today[disabled],
.datetimepicker table tr td.today:hover[disabled],
.datetimepicker table tr td.today.disabled[disabled],
.datetimepicker table tr td.today.disabled:hover[disabled] {
  background-color: #fdf59a;
}
.datetimepicker table tr td.today:active,
.datetimepicker table tr td.today:hover:active,
.datetimepicker table tr td.today.disabled:active,
.datetimepicker table tr td.today.disabled:hover:active,
.datetimepicker table tr td.today.active,
.datetimepicker table tr td.today:hover.active,
.datetimepicker table tr td.today.disabled.active,
.datetimepicker table tr td.today.disabled:hover.active {
  background-color: #fbf069 \9;
}
.datetimepicker table tr td.active,
.datetimepicker table tr td.active:hover,
.datetimepicker table tr td.active.disabled,
.datetimepicker table tr td.active.disabled:hover {
  background-color: #006dcc;
  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
  background-repeat: repeat-x;
  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
  border-color: #0044cc #0044cc #002a80;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
  color: #fff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datetimepicker table tr td.active:hover,
.datetimepicker table tr td.active:hover:hover,
.datetimepicker table tr td.active.disabled:hover,
.datetimepicker table tr td.active.disabled:hover:hover,
.datetimepicker table tr td.active:active,
.datetimepicker table tr td.active:hover:active,
.datetimepicker table tr td.active.disabled:active,
.datetimepicker table tr td.active.disabled:hover:active,
.datetimepicker table tr td.active.active,
.datetimepicker table tr td.active:hover.active,
.datetimepicker table tr td.active.disabled.active,
.datetimepicker table tr td.active.disabled:hover.active,
.datetimepicker table tr td.active.disabled,
.datetimepicker table tr td.active:hover.disabled,
.datetimepicker table tr td.active.disabled.disabled,
.datetimepicker table tr td.active.disabled:hover.disabled,
.datetimepicker table tr td.active[disabled],
.datetimepicker table tr td.active:hover[disabled],
.datetimepicker table tr td.active.disabled[disabled],
.datetimepicker table tr td.active.disabled:hover[disabled] {
  background-color: #0044cc;
}
.datetimepicker table tr td.active:active,
.datetimepicker table tr td.active:hover:active,
.datetimepicker table tr td.active.disabled:active,
.datetimepicker table tr td.active.disabled:hover:active,
.datetimepicker table tr td.active.active,
.datetimepicker table tr td.active:hover.active,
.datetimepicker table tr td.active.disabled.active,
.datetimepicker table tr td.active.disabled:hover.active {
  background-color: #003399 \9;
}
.datetimepicker .datetimepicker-hours table tr td span.hour_am, .datetimepicker .datetimepicker-hours table tr td span.hour_pm {
  width: 14.6%;
}
.datetimepicker .datetimepicker-hours fieldset legend, .datetimepicker .datetimepicker-minutes fieldset legend {
  margin-bottom: inherit;
  line-height: 30px;
}
.datetimepicker table tr td span.disabled, .datetimepicker table tr td span.disabled:hover {
  background: none;
  color: #999999;
  cursor: default;
}
.datetimepicker table tr td span.active,
.datetimepicker table tr td span.active:hover,
.datetimepicker table tr td span.active.disabled,
.datetimepicker table tr td span.active.disabled:hover {
  background-color: #006dcc;
  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
  background-repeat: repeat-x;
  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
  border-color: #0044cc #0044cc #002a80;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
  color: #fff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datetimepicker table tr td span.active:hover,
.datetimepicker table tr td span.active:hover:hover,
.datetimepicker table tr td span.active.disabled:hover,
.datetimepicker table tr td span.active.disabled:hover:hover,
.datetimepicker table tr td span.active:active,
.datetimepicker table tr td span.active:hover:active,
.datetimepicker table tr td span.active.disabled:active,
.datetimepicker table tr td span.active.disabled:hover:active,
.datetimepicker table tr td span.active.active,
.datetimepicker table tr td span.active:hover.active,
.datetimepicker table tr td span.active.disabled.active,
.datetimepicker table tr td span.active.disabled:hover.active,
.datetimepicker table tr td span.active.disabled,
.datetimepicker table tr td span.active:hover.disabled,
.datetimepicker table tr td span.active.disabled.disabled,
.datetimepicker table tr td span.active.disabled:hover.disabled,
.datetimepicker table tr td span.active[disabled],
.datetimepicker table tr td span.active:hover[disabled],
.datetimepicker table tr td span.active.disabled[disabled],
.datetimepicker table tr td span.active.disabled:hover[disabled] {
  background-color: #0044cc;
}
.datetimepicker table tr td span.active:active,
.datetimepicker table tr td span.active:hover:active,
.datetimepicker table tr td span.active.disabled:active,
.datetimepicker table tr td span.active.disabled:hover:active,
.datetimepicker table tr td span.active.active,
.datetimepicker table tr td span.active:hover.active,
.datetimepicker table tr td span.active.disabled.active,
.datetimepicker table tr td span.active.disabled:hover.active {
  background-color: #003399 \9;
}
.datetimepicker thead tr:first-child th, .datetimepicker tfoot tr:first-child th {
  cursor: pointer;
}
.datetimepicker thead tr:first-child th:hover, .datetimepicker tfoot tr:first-child th:hover {
  background: #eeeeee;
}
.input-append.date .add-on i, .input-prepend.date .add-on i, .input-group.date .input-group-addon span {
  cursor: pointer;
  width: 14px;
  height: 14px;
}
.datepicker.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  float: left;
  display: none;
  min-width: 160px;
  list-style: none;
  background-color: #ffffff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  -webkit-background-clip: padding-box;
  -moz-background-clip: padding;
  background-clip: padding-box;
  *border-right-width: 2px;
  *border-bottom-width: 2px;
  color: #333333;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  line-height: 18px;
}
.datepicker.dropdown-menu th, .datepicker.dropdown-menu td {
  padding: 4px 5px;
}
.datepicker .prev, .datepicker .next {
  font-style: normal;
}
.datepicker .prev:after {
  content: "«";
}
.datepicker .next:after {
  content: "»";
}

WRFILE: font-awesome.min.css

/* Generated by Font Squirrel (http://www.fontsquirrel.com) on December 18, 2015 */
@font-face {
    font-family: 'FontAwesome';
    src: url(data:font/truetype;charset=utf-8;base64,AAEAAAAPAIAAAwBwRkZUTWooLi0AAAD8AAAAHEdERUYCoQAEAAABGAAAACBPUy8yiyV6kwAAATgAAABgY21hcDjxRK4AAAGYAAACsmN2dCAARAURAAAETAAAAARnYXNw//8AAwAABFAAAAAIZ2x5ZmWSgE0AAARYAAIC4GhlYWQOs0cVAAIHOAAAADZoaGVhESgLbwACB3AAAAAkaG10eHrdGjwAAgeUAAAJ0GxvY2ECQrPIAAIRZAAACdRtYXhwAt0CSQACGzgAAAAgbmFtZTMihcAAAhtYAAADiHBvc3ROZqocAAIe4AAAGJl3ZWJmTS9WdAACN3wAAAAGAAAAAQAAAADMPaLPAAAAAMtQjbAAAAAA0pn9rQABAAAADgAAABgAAAAAAAIAAQABAnMAAQAEAAAAAgAAAAMHJAGQAAUABAUyBM0AAACZBTIEzQAAAs0AAAHCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5cnMAQAAN8pUG2/7bAAAG3AFOAAAAAQAAAAAAAAAAAAAAIAABAAAAAwAAAAMAAAAcAAEAAAAAAawAAwABAAAAHAAEAZAAAABgAEAABQAgAA0AIACgIAogLyBfJfzwDvAe8D7wTvBe8G7wfvCO8J7wrvCy8M7w3vDu8P7xDvEe8S7xPvFO8V7xbvF+8Y7xnvGu8b7xzvHe8e7x/vIO8h7yPvJO8l7ybvJ+8o7ylf//AAAADQAgAKAgACAvIF8l/PAA8BDwIfBA8FDwYPBw8IDwkPCg8LDwwPDQ8ODw8PEA8RDxIPEw8UDxUPFg8XDxgPGQ8aDxsPHA8dDx4PHw8gDyEPIh8kDyUPJg8nDygPKQ////9f/j/2TgBd/h37LaFhATEBIQEBAPEA4QDRAMEAsQChAJEAgP+w/6D/kP+A/3D/YP9Q/0D/MP8g/xD/AP7w/uD+0P7A/rD+oP6Q/oD+cP5g/kD+MP4g/hD+AP3w/eAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGAAABAAAAAAAAAAECAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAURAAAAAf//AAIAAgBEAAACZAVVAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIRElIREhRAIg/iQBmP5oBVX6q0QEzQAAAAEAAAAAAAAAAAADAAA5AwABAGr+2weWBkkAHQAAARQHAREhMhYUBiMhIiY0NjMhEQEmNTQ+ATMhMh4BB5Yx/S0Bbh4rKx78AB4rKx4Bbv0tMSkuGgZKGi4pBgcoMf0t/JMsOywsOywDbQLTMSgaHwkJHwAAAQAA/tsG2wZJACsAAAERFA4CIi4CND4CMzIXEQERFA4CIi4CND4CMzIXETQ2NwE2FzIWBttNd3ZndXdOTnd1NHhj/JJNd3ZndXdOTnd1NHhjLCIDtw4SLj8F2/sAOVkxGBgxWXNZMRgtAmb+8fzWOVkyGBgyWXJZMRgsBFEjOwsBJQUBQAAAAAIAAP7bB24GSQAHACEAAAAQACAAEAAgARQGIyInAQYjIiQmAhASNiQgBBYSFRQHARYFJf7T/ln+1AEsAacDdlc8Pij+eM37o/7V2H9/2AEqAUcBKth/jgGIKwJRAacBLf7T/ln+1P5JO1gsAYeOf9gBKgFHASrYf3/Y/taj+83+eCoAAAMAAP9uCAAFtwAaAD0ATQAAJREGBwQHDgIrAiIuAScmJSYnERQWMyEyNhE8Ai4DIyEiBhUUFxYXHgQ7AjI+Azc2Nz4BNxEUBiMhIiY1ETQ2MyEyFgduJSr+zrU6SX03AQE3fUk6tf7OKiUWDwaSDxYBBgcOCfluDxao3e4HQic+NRcBARc1PidDBu7dPmqSa0z5bktsa0wGkktsJQNtKSLrlzE3ODg2MpfrIin8kw8WFgTAAhUKEwkMBhYPwIWuvAY4HSsUFCsdOAa9rTGnbfslS2xrTATbS2xsAAABAAD/bggABkkAHAAABCInAS4ENTQAITIeAhc+AzMgABUUCQEEHjwU/TcLKVdENgEiAQBHlH5cKSlcfpRHAQABIv76/TiSFAKwCSpscqNM+wEcMVNKKSlKUzH+5fz9/vv9UgAAAQAA/6EHbga3ACIAAAEUBwETFhcUBiMiJwkBBiMiJjU0NxMBJjU0NyUBNjIXAQUWB24e/mFiAQEYFxYY/f/9/xkVGBgCY/5gHUACPgEBFkQWAQECPkAD+Bke/mz9xAgPGCEOAQ7+8g4hGAcQAjwBlB8YKgtTAggvL/34UwsAAAACAAD/oQduBrcACQArAAAJASULAQUBAyUFARQHARMWFxQjIicJAQYjIiY1NDcTASY1NDclATYyFwEFFgUTAV7+HtjY/h4BXVMBsAGvAgge/mFiAQEvFhj9//3/GRUYGAJj/mAdQAI+AQEWRBYBAQI+QAJgAVNHAbX+S0f+rf4f4+MDeRke/mz9xAgPOQ4BDv7yDiEYBxACPAGUHxgqC1MCCC8v/fhTCwACAAD/bgZJBkkAHwAnAAAlFAYjISImNTQ+BTMyHgIyPgIzMh4FABAAIAAQACAGSaeK/BmKpwgYJT1QdEUKTF+YmZhfSwtGc1A+JBgI/pL+//6V/v8BAQFrlomfn4k9c4VzbE0uMjwxMTwyLk1sc4VzBHX+lf7+AQIBawEBAAAAAAsAAP7bCJIGSQAPAB8ALwA/AE8AXwBvAH8AjwCfAK8AAAU1NCYrASIGHQEUFjsBMjYRNTQmKwEiBh0BFBY7ATI2ETU0JisBIgYdARQWOwEyNgERNCYjISIGFREUFjMhMjYBNTQmKwEiBh0BFBY7ATI2ATU0JisBIgYdARQWOwEyNgERNCYjISIGFREUFjMhMjYBNTQmKwEiBh0BFBY7ATI2ETU0JisBIgYdARQWOwEyNhE1NCYrASIGHQEUFjsBMjY3ERQGIyEiJjURNDYzITIWAbcsHZMeKywdkx4rLB2THissHZMeKywdkx4rLB2THisEkise/JIeKywdA24eK/tuLB2THissHZMeKwZJKx6SHiwsHpIeK/5JKx78kh4rLB0Dbh4rAbcrHpIeLCwekh4rKx6SHiwsHpIeKysekh4sLB6SHiuSa0z43Etsa0wHJEtsSZIeKysekh4rKwHVkh4rKx6SHisrAdWSHisrHpIeLCz8sAJJHisrHv23HisrBUKTHissHZMeKyv6+pIeKysekh4rKwOMAkkeKywd/bceLCz+Z5IeKysekh4rKwHVkh4rKx6SHiwsAdSTHissHZMeKyvV+gBLbGxLBgBLbGwABAAAAAAHbgZJAA8AHwAvAD8AAAERFAYjISImNRE0NjMhMhYZARQGIyEiJjURNDYzITIWAREUBiMhIiY1ETQ2MyEyFhkBFAYjISImNRE0NjMhMhYDblc8/bc7V1c7Akk7WFc8/bc7V1c7Akk7WAQAVzz9tztXVzsCSTtYVzz9tztXVzsCSTtYAkn+STtXVzsBtztXVwMz/kk7V1c7Abc7V1f8V/5JO1dXOwG3O1dXAzP+STtXVzsBtztXVwAJAAAAAAgABkkADwAfAC8APwBPAF8AbwB/AI8AAAEVFAYjISImPQE0NjMhMhYRFRQGIyEiJj0BNDYzITIWARUUBiMhIiY9ATQ2MyEyFgEVFAYjISImPQE0NjMhMhYBFRQGIyEiJj0BNDYzITIWARUUBiMhIiY9ATQ2MyEyFgEVFAYjISImPQE0NjMhMhYBFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFgJJQC7+ky5AQC4BbS5AQC7+ky5AQC4BbS5AAtxALv6SLkBALgFuLkD9JEAu/pMuQEAuAW0uQALcQC7+ki5AQC4Bbi5AAttALv6TLkBALgFtLkD9JUAu/pIuQEAuAW4uQALbQC7+ky5AQC4BbS5AQC7+ky5AQC4BbS5AAUnbLkBALtsuQEACG9suQEAu2y5AQP2J2y5AQC7bLkBABGTbLkBALtsuQED9idsuQEAu2y5AQP2J2y5AQC7bLkBABGTbLkBALtsuQED9idsuQEAu2y5AQAIb2y5AQC7bLkBAAAAGAAAAAAgABkkADwAfAC8APwBPAF8AAAEVFAYjISImPQE0NjMhMhYRFRQGIyEiJj0BNDYzITIWARUUBiMhIiY9ATQ2MyEyFgEVFAYjISImPQE0NjMhMhYBFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFgJJQC7+ky5AQC4BbS5AQC7+ky5AQC4BbS5ABbdALvu3LkBALgRJLkD6SUAu/pMuQEAuAW0uQAW3QC77ty5AQC4ESS5AQC77ty5AQC4ESS5AAUnbLkBALtsuQEACG9suQEAu2y5AQP2J2y5AQC7bLkBABGTbLkBALtsuQED9idsuQEAu2y5AQAIb2y5AQC7bLkBAAAAAAQCKABAHdgVeABYAAAAUBwEHBiIvAQEmND8BNjIXCQE2Mh8BB3Yg/MSbIFwgm/5iICCcIFsgAVAC7iBbIJwEglsg/MSbICCbAZ4gXCCbICD+rwLvICCcAAEAfv/rBcsFOQAjAAAAFA8BBiInCQEGIi8BJjQ3CQEmND8BNjIXCQE2Mh8BFhQHCQEFyyCbIFsg/rD+sCBcIJsgIAFQ/rAgIJsgXCABUAFQIFsgmyAg/rABUAEiWyCcICABUP6wICCcIFsgAVABUCBcIJsgIP6wAVAgIJsgXCD+sP6wAAMAAP7bB24GSQAjACsARAAAARUUBiMhERQGKwEiJjURISImPQE0NjMhETQ2OwEyFhURITIWEhAAIAAQACAAFAYjIicBBiMiJCYCEBI2JCAEFhIVFAcBBJIVD/8AFg9JDxb/AA8VFg4BABYPSQ8WAQAPFZP+0/5Z/tQBLAGnA3ZWPT4o/njN+6P+1dh/f9gBKgFHASrYf44BiANJSQ8W/wAPFRYOAQAWD0kPFgEADxUVD/8AFv75AacBLf7T/ln+1P6FeVYsAYeOf9gBKgFHASrYf3/Y/taj+83+eAADAAD+2wduBkkADwAXADAAAAEVFAYjISImPQE0NjMhMhYSEAAgABAAIAAUBiMiJwEGIyIkJgIQEjYkIAQWEhUUBwEEkhUP/W0PFRYOApMPFZP+0/5Z/tQBLAGnA3ZWPT4o/njN+6P+1dh/f9gBKgFHASrYf44BiANJSQ8WFg9JDxYW/vkBpwEt/tP+Wf7U/oV5ViwBh45/2AEqAUcBKth/f9j+1qP7zf54AAAAAgAA/24G2wbbACkANQAAARQCBgQgJCYCNTQSNzYWFxYGBw4BFRQeAjI+AjU0JicuATc+ARcWEgERFAYiJjURNDYyFgbbi+v+u/6b/rzsi7inMXgjJREwcHpcntju2J1denAwEiUjejCnt/0lV3dXV3dXAtuy/rzsi4vsAUSy0AFwfSUQMjB4JFX0i3fXnl1dnth2ivVVJXcwMRElff6QAp79JTtYVzwC2ztXVwAAAAAFAAD/bggABkkADwAfAC8APwBPAAAlFRQGKwEiJj0BNDY7ATIWJREUBisBIiY1ETQ2OwEyFgERFAYrASImNRE0NjsBMhYBERQGKwEiJjURNDY7ATIWAREUBisBIiY1ETQ2OwEyFgElFRDbEBUVENsQFQG2FBDcEBQUENwQFAG3FBDcEBQUENwQFAG3FBDcEBQUENwQFAG3FRDbEBUVENsQFW7cEBQUENwQFBSC/pIQFBQQAW4QFRUBFf1tEBQUEAKTEBQUAab7txAUFBAESRAVFQI6+W0QFBQQBpMQFBQAAAIAAP9uBtsGSQAHAG4AAAA0JiIGFBYyARUUBg8BBgcWFxYUBw4BIyIvAQYHBgcGKwEiJi8BJicHBiMiJyYnJjU0Nz4BNyYvAS4BPQE0Nj8BNjcmJyYnNDc+ATMyHwE2NzY3NjsBMhYfARYXNzYzMhcWFxYVFAcOAQcWHwEeAQSSq/KsrPIC9BIO0xYXKFMLCh+lGQ4PnjI2Eg8IIf4QGAEgOC+hCxIQDJAtCAkRUxQfENEPEhIN1BAdLkwLAQsepRkPD54yNhIPCCH+EBgBIDgvogoRDw6TKQgJEVIVHhHRDxICYvOrq/OrAaH+DhkCID4qOWUOHQsqowp8GhKbOSATD9ISGXsKDYI+Cw8ODBhoHTk4HwIYD/4OGAMgNTRBXQ4NCw8ppAx6GhKbOSATD9ISGXsKDIg6CRAODBhoHTk3IAIYAAYAAP9uBkkGSQAPAB8ALwA7AEMAZwAAAREUBisBIiY1ETQ2OwEyFgURFAYrASImNRE0NjsBMhYFERQGKwEiJjURNDY7ATIWExEhERQeATMhMj4BASEnJichBgcFFRQGKwERFAYjISImNREjIiY9ATQ2MyE3PgEzITIWHwEhMhYCSRQQShAUFBBKEBQBJRUQSRAVFRBJEBUBJBQQSRAVFRBJEBST/AAQEQMDtwMSEP0AAgA3CAz+lgsIA+wUEG5sS/xJS2xtEBUVEAFhUBFZLgFtLlkRUAFiEBQDkv1uEBUVEAKSEBUVEP1uEBUVEAKSEBUVEP1uEBUVEAKSEBUV/LUEO/vFGSsTEysE54UKAwILqkkQFfvFX4qFXwRAFRBJEBW+Kjw7K74VAAAAAAIAHgAAB1AFuwATADUAAAERFAYjIREhESEiJjURNDY1CQEWJQcGByMiJwkBBicmLwEmNjcBNhYXBTU0NjsBMhYVERceAQZJKx7+Sf7c/kkeKwECkQKRAQD/RwkPAw8J/On86Q4NDwlHCQILAzYlZCUBFxQQ3BAU+gsDAm792x4rAbf+SSseAiUBBAICHf3jAkpVCgMIApT9bAkBAgtVCx8JAq0eAR3q3xAVFRD+LtAJHwAAAAMAAP7bBtsG2wATABoAIwAAAR4BFREUBiMhIiY1ETQ2MyEyFhcHESEmJwEmAREhIiY1ESERBo4gLUAt+gAuQEAuBAAubSCXAa4LDv6aDgGW/iUuQPySBSkgbi362y5AQC4HJS4/LSBO/lIhDgFmDvk5BJJALgHb+SUAAAADAAD/bgbbBkkAFAAgACwAAAERFAYjISImPQE0NjMhETQ2OwEyFgAQAiQgBAIQEgQgJAAQAgQgJAIQEiQgBAQAFRD+kxAVFRABABQQSRAVAdum/uL+rv7ip6cBHgFSAR4Bpuv+bf4i/mzr6wGUAd4BkwRu/gAQFRUQSRAUAZMQFBT9tAFTAR2np/7j/q3+46enArX+I/5s6+sBlAHdAZTr6wAAAAIAOQAACFkFtwARAEMAAAE1Ay4BKwEiBgcDFQYWMyEyNgEUIyEyNicDLgEjISIGBwMGFjMhIjU0NwE+ATMhIgYPAQYWOwEyNi8BLgEjITIWFwEWBPYcARcP1A8XARsBFA4BFw4UA2I0/NsPFAEXARcO/skPFwEXARQP/Nw1HgHcCSoXAYMPFwERARQPvg8UAREBFw8BhBcpCQHcHgJpBQFtDxYWD/6TBQ4SEv34UxYPASQPFhYP/twPFlM+RwSpFiAWD9sQFRUQ2w8WIBb7V0cAAAAABAAAAAAHbgbbAAcADwAlAD0AACQ0JiIGFBYyJDQmIgYUFjITERQGIyEiJjURNDYzIRcWMj8BITIWARYHAQYiJwEmNzYXIRE0NjMhMhYVESE2BbcsOysrOwFQKzssLDu+QC75bi5AQC4CE5pCs0KcAhIuQP6MEyP+ABU9Ff4AIxMTMQEkLB4BJB4rASUwvjssLDssLDssLDssAUn+ky5AQC4BbS5Am0BAm0ACXS8h/gAWFgIAIS8tAQIAHisrHv4AAQAAAAMAAP9uBtsGSQAYACQAMAAAARQHAQYiJwEmNzYXMxE0NjsBMhYVETMyFgIgBAIQEgQgJBIQAgQQAgQgJAIQEiQgBAUAC/6TDRsN/pMRCQkZ2xUQ2xAV2xAV6f6u/uKnpwEeAVIBHqamAabr/m3+Iv5s6+sBlAHeAZMCtw4O/pQKCgFuEhYXAQGTEBQUEP5tFAKCp/7j/q3+46enAR0BUwEd2P4j/mzr6wGUAd0BlOvrAAAAAAMAAP9uBtsGSQAYACQAMAAAAQYrAREUBisBIiY1ESMiJjU0NwE2MhcBFgIgBAIQEgQgJBIQAgQQAgQgJAIQEiQgBAT+CRrbFRDbEBXbEBUMAWwNGw0BbhHw/q7+4qenAR4BUgEepqYBpuv+bf4i/mzr6wGUAd4BkwLyF/5uEBQUEAGSFRAODQFtCgr+khICQaf+4/6t/uOnpwEdAVMBHdj+I/5s6+sBlAHdAZTr6wAAAgAAAAAG2wW3AA0AIwAAASEuAScDIQMOAQchFyElERQGIyEiJjURNDcBPgEzITIWFwEWBJEBaQEDAfP81/IBBAEBaW0BbgK2Kx75tx4rHQEQCz0dA7cePAwBEBwCkgMMBAI2/coCDgPbuf3ZHisrHgInR0YCdh0nJx39ikYAAAADAAD/bgbbBkkADwAbACcAAAAUBwEGIyInJjURNDc2FwEWEAIkIAQCEBIEICQAEAIEICQCEBIkIAQFSST9khEUEhIlJSYjAm62pv7i/q7+4qenAR4BUgEeAabr/m3+Iv5s6+sBlAHeAZMDBlUU/pIKCRYqAtsqFhUW/pLoAVMBHaen/uP+rf7jp6cCtf4j/mzr6wGUAd0BlOvrAAABAAD/bgbbBkkAMgAAAREUBiMhIiY/ASYjIg4CFB4CMzI2NzY3Mh8BHgEHBgQjIiQmAhASNiQzMgQXNzYXFgbbKx7+ADAmI56p5nfYnlxcnth3iPJTCBMQDJ0KAQl9/p7Esv677IuL7AFEs6gBOnqVIS8sBbf+AB4rWiKenV2e2O3Ynl13bQsCCp4JHAyXpYvsAUQBZQFE7It/c5MjExMAAgAA/24G2wZJACQARwAAARQHAgAhIiQnBwYiJjURNDYzITIWFA8BHgEzMiQ3Njc2OwEyFhMRFAYjISImND8BJiMiBAcGBwYrASImPQESACEyBBc3NjIWBr8BSf4t/sen/sh6kxY8KyseAgAeKxWdUc5vmQEJUA0wCRnbDxYcKx7+AB4rFp6p5pn+9lANLwkZ5A8VSgHUATunATt6lRY7KwIlBgL+zv6DfXWTFiseAgAeKys8FZ1LU5WCE3MaFQOD/gAeKys8FZ6dlYITcxoVDwgBMgF9f3OTFisAAAgAAAAACAAGSQAPAB8ALwA/AE8AXwBvAH8AAAEVFAYrASImPQE0NjsBMhYRFRQGKwEiJj0BNDY7ATIWERUUBisBIiY9ATQ2OwEyFgEVFAYjISImPQE0NjMhMhYRFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFhMRNCYjISIGFREUFjMhMjYTERQGIyEiJjURNDYzITIWAbcWD0kPFRUPSQ8WFg9JDxUVD0kPFhYPSQ8VFQ9JDxYFJBUP+7cPFhYPBEkPFRUP+7cPFhYPBEkPFRUP+7cPFhYPBEkPFZMWD/luDxYWDwaSDxaSa0z5bktsa0wGkktsAZJJDxUVD0kPFhYBFkkPFhYPSQ8VFQEVSQ8VFQ9JDxYW/ahJDxUVD0kPFhYBFkkPFhYPSQ8VFQEVSQ8VFQ9JDxYW/M0Dtw8VFQ/8SQ8WFgTq+yVLbGtMBNtLbGwAAgAAAAAFJQZJAAcAHwAAASE1NCYiBhUBERQGIyEiJjURNDY7ATU0ACAAHQEzMhYBbgJJrPKrA7dALvu3LkBALiQBLgGlAS0lLkADbtt5rKx5/rf9bi5AQC4Cki5A29IBLv7S0ttAAAACAEn/bggABkkAEQA3AAABFAcRFAYrASImNREmNTQ2MhYFERQGBwYnIi4CIyIFBiMiJjURNDc2NyQzMhYXFjMyPgIzMhYBbkkWD0kPFklWeVYGkh0e9rBGj2mfU9v+yRMTHisjGEIBDtR61JArOj6Ral8PHisFt1Is+lkPFRUPBacrUz1VVYb8mB0fEIUBMjszpworHgNQJRoQIYlCRBYwPDArAAEAAAAAB24GSQBLAAABFA8CDgEjFRQGKwEiJjURNDY7ATIWHQEyFhc3NjU0AiQgBAIVFB8BPgEzNTQ2OwEyFhURFAYrASImPQEiJi8CJjU0EiwBIAwBEgduRRfTGZ1kFRBJEBUVEEkQFVGHJk4hyf6t/oL+rcoiTSeHURUQSRAUFBBJEBVlnBnUFkWZAQABYAF8AWABAJkC576pOCZfeiQQFRUQApIQFBQQJVFEDW1wqQErs7P+1alwbQ1FUCUQFBQQ/W4QFRUQJHpfJjipvq0BP+uLi+v+wQAAAAABAAAAJQNuBZMAEwAAAREUBiInASEiJjURNDYzIQE2HgEDbiw7Fv6E/tQeKyseASwBfBY7LAVJ+yUeKxUBfSseAbceKwF9FgErAAAAAgAAACUFJQWTABMALQAAAREUBiInASEiJjURNDYzIQE2HgEAFAYHBiMiJjU0PgM0LgM1NDYzMhcWA24sOxb+hP7UHisrHgEsAXwWOywBt2JQCxEeKxsnJxsbJycbKx4RC1AFSfslHisVAX0rHgG3HisBfRYBK/3LrZYgBiofGCEYHTVNNRwYIhgfKgYfAAAABAAA/68HbgYIABMALQBJAGsAAAERFAYiJwEhIiY1ETQ2MyEBNh4BABQGBwYjIiY1ND4DNC4DNTQ2MzIXFgQQAgcGIyImNTQ3Njc+ATQmJyYnJjU0NjMyFxYEEAAHBiMiJjU0Nz4BNzY3NhIQAicmJy4BJyY1NDYzMhcWA24sOxb+hP7UHisrHgEsAXwWOywBt2JQCxEeKxsnJxsbJycbKx4RC1ABhsKgDw4fKy1AFlVfX1UXPy0rHg8PoAHn/t3xDw4eLC0IIwg1KY2dnY0pNQgjCC0sHg8O8QVJ+yUeKxUBfSseAbceKwF9FgEr/cutliAGKh8YIRgdNU01HBgiGB8qBh8//qP+2EQGLB4tFiERPrrTuj4RIRcsHisFQ9H98/5IaAYrHikaBQ8EHR5oATcBXQE3aB4cBQ8EGioeKwZoAAAADAAAAAAGSQZJAAMABwALAA8AEwAXABsAHwAjAC8AMwA3AAABFSM1ExUjNSEVIzUBIREhESERIQEhESEBESERARUjNSEVIzUTESE1IxEjESEVMzUBESERIREhEQG3kpKSBACT/AABt/5JAbf+SQNuAbf+Sf7b/SUFJZMBt5KS/kmSkgG3kv0k/SUGSf0lAbeSkgNuk5OTk/tuAbYBtwG3/kkBt/0k/SUC2/23kpKSkgJJ/kqS/kkC25KSA279JQLb/SUC2wAAAAAQAAAAAAgABkkAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAMyMRMxMjETMTIxEzEyMRMxMjETMTIxEzEyMRMxMjETMTIxEzEyMRMxMjETMTIxEzEyMRMxMjETMTIxEzEyMRM0hISEglJWsjI7QkJLNHR5AjI0gjI0gjI7RISLNISJBISJBISGxISNhsbEglJWtISAZJ+bgGSPm4Bkj5uAZI+bgGSPm4Bkj5uAZI+bgGSPm4Bkj5uAZI+bgGSPm4Bkj5uAZI+bgGSPm4Bkj5twZJAAAAAgAA/4YGwwZJAAcAHQAAADQmIgYUFjIBFAcBBiMiJwEuATURNDYzITIWFwEWAgBWeVZWeQUZKv3PLTs9KvzPKz1XOwHcPZIrAzEqBJ95VlZ5Vv4APSr9zioqAzIqkzwB3DtXPCz80C0AAAAAAwAA/4YIegZJAAcAHQA1AAAANCYiBhQWMgEUBwEGIyInAS4BNRE0NjMhMhYXARYFFAcBBiMiJicBNjU0JwEuASMhMhYXARYCAFZ5VlZ5BRkq/c8tOz0q/M8rPVc7Adw9kisDMSoBtyr9zy07KTUiAhkqKvzPK5M8AQA9kSwDMSoEn3lWVnlW/gA9Kv3OKioDMiqTPAHcO1c8LPzQLTs9Kv3OKiAjAhkqPTstAzArPTws/NAtAAAAAAMAC/9uB2YGSQBUAGQAdAAAARYHAQ4BIyEiJicmNzQ2NzYmNz4CNz4BNzYmNz4BNz4BNzYmNz4BNz4BNzYmNz4CNz4GFwc2MyEyFgcBDgEjISIHBhcWMyEyNjcBNicWBQYWMyEyNj8BNiYjISIGBwMGFjMhMjY/ATYmIyEiBgcHUS4Z/sUWg0r74VijIBsYBwEBCQICDhgGGjMJAwUCAyEDGDAFAQgEBSkFFjUFAQkCAhAZBwkUDxUXJiwgASsQA2VVWxn+xylRa/wfHwwNDBuJBB8hPgkBVwgCK/tYBQ4QArcPHQQYBQ4Q/UkPHAV3BQ4QArcPHQQYBQ4Q/UkPHAUEuUFS+/RJY3pZTUQFNBAJHwcNFx8LK3srCy4JDScHKYAnCjUFDygGHoUsCSgKCRceCQ4qJiwdGQEHAwqAVPv0iE8REh9QIx4EaBkoESIPFhYPSQ8WFg/+kg8VFQ9JDxYWDwAAAQAA/4gFtwZJABwAAAEyFx4BFREUBgcGIyInCQEGIyInLgE1ETQ2NzYzBTIaGSYsLSUWHTco/gj+CCk1GhkmLC0lGBsGSQoPQCf6PydADwklAeT+HCYKD0AnBcEnQA8KAAAAAAQAAP9uB24GSQADAAwAFAA8AAApAREhESERIyImPQEhADQmIgYUFjI3ERQGIyEVFAYjISImPQEhIiY1ETQ2OwERNDYzITIWHwEeARURMzIWAbcEAPwABAC3LkD9JQUkKzssLDu+Fg//AEAu+7cuP/8ADxaBWkpALQMALm4grSAuSVqCASUBtgG3QC63/L47Kys7LEn+JQ8Wty4/QC23Fg8B21qCAm0uQC4grSBuLv7cggAAAAMAAP9uCJIG2wAHACEAKQAAACAWEAYgJhABMhYVERQGIyEiJjURNDYzITc+ATMhMhYfAQAgABAAIAAQA8EBEMHB/vDBBG55q6t5+bd5rKt6AQA6FnM9Akk9cxU7/QgBpwEs/tT+Wf7TA9vB/vDBwQEQAp2sefwAeaureQQAeaybOFFROJv62wEtAacBLP7U/lkAAAACAAD/bgduBkkABwBQAAABAzIWMzI3AgE3PgQ3CQE7ARYXExYSFx4BFxYXHgEXFhUUBhUiJCMiBAc0PwEyPgU1NC4BJyUGAhUUHgMzFhUUByIkIyIGIwYDPcMm7UEWK2P8VAIaTDc6LA0BDwFAVjwJBOompy8RYiEXERaeEQcBSP7dSVf+wy0FlQEbCRgKDwZHXgH9/h5zIEMrVwQBAkL+9UIJKwNcBF39/QQCASL79FoIDQsWLCQCwAM7EAj93Fn+ZWwn/UIzDhEiBisXBRQEEhABMSggBgIIBwsOCRK43gQCQv7FHBkkFAsJFiwKFRcJEAAAAwAA/24GSQZJABUAKwBhAAAlFjcgETQnLgQjIgcUBhUUBh4BAxYzMj4CNTQuAiMiBxQWFRQGFRQBNz4BNz4EPAE1ECcuBC8BNiQzMhYzMh4DFRQOAwceARUUDgMjIiYjIgQCelVLAa4vH09LbVNCUyEBAgEJBzBNXotwOkJyhUs5XAkB/ZcCEaAqCAwHBgEZBSk9NDoGBXACKZYaaBpQmI1pQCU0YEc8sOpQhrXAaTLKMnn+NBElAQF+gkwyRSYTBQw98jsJiFVqAz4IHUiFYFB4QyAOOec7H3kdNfvuawUbEQ4iKyA1GDkGBGIyCQ8KBgQBXwIWAR5CYI9WO2NCQiQcKOKqcrZ1TyAHGQAAAAABAAD/bgSSBkkAOQAAFTc+ATc2NzYaASc1LgInNx4CMzI+ATcGBw4BBw4DBwYCBw4DHwEWFwYHIgYjIiYjJiMiBhMHrSkgDwGLegIbRlkWFibHj0I3c6EgBg8ipCoJDgcKAx+KEwIaFBABARPAAw8NMQwhhSCeTTrTkGECLRUoSwgChQJVKB0PDAYDdgIKBgYKAi05CyoRFjYmQg+p/ZRgCnFdYhEUBR8yPwMXAhUAAAIAAP9uB/oGSQAbAH0AACUyFg8BBiIvASY2OwERIyImPwE2Fh8BFgYrAREBFxYzMjYzMhYzITIWPgI/ATIWMxYRFAcGByYnLgInLgMGIyImIgYHBhcUEhUUBhYXHgEXFgcUDwEGJCMiBiMmPQE+Ajc2AzQCPQE0NjQuAScmIyIGBw4CByYnEQfJJhQWkBdDFpAXFCZbWyYUF5AXQheQFxUmW/jvPQ7jMsoyKaQpAU8HIgwYEAowBRYFAgYtIR0gAxMPAQcOFQghAxNxOVokCgEEBQUMLr8qBgEDJ1f+vEs55zoDE2Z7HBYBBwIDBAQNrCaJFxYiJR4wEJIqHrkeHrkeKgSTKh65HgEduR4q+20Fth8GBQEBAQYODQEBgP8AWyIQBDJgClpOAgkKAwMBAQUEXT9r/WC4En9TJRgyEi4LEBEBAhYUOgEKHyUeEDABhXMBznSGAh8aIBcEDhsQD4h2Ah4UAbYAAAIAAP7fBtsGSQBhAJUAABMXFjMyNjMyJAQXFj8BMhYzFhEUBwYHJicuAjUmJyYnIiYiBgcGHwE1FB4BFRQGFhceARcWFRQPAQYkIyIGIyY9AT4CNz4CNCY1NCY1ND4BLgEnJiMiBAcOAgcmJxEBMh4CFxYUBw4DIyIuATQ2NSEUFhQOASMiLgInJjY3PgMzMh4BFAYVITQmND4BXT0O4zLKMlABlAEkiCYaMAUXBAIFLSEdIQMSEAsUBkYikFt8MAoBAQICBgYLLsApBgQnV/68SjnnOwMTZnscCAoEAgUBAQEGBA2tL/7qExYiJR4wEAXZDkQ/SQUeHgVJP0QODxEGBPtuAwYRDw5EP0kFHgEdBUk/RQ0PEQYDBJIEBhEGSB8GBQIBBAEkAQGA/wBbIhAEMmAKWFACDwYCAQIFBV0/rjw/4rlTEn9SJhgxEi4LEBIBAhcVOgIKHyQeEBKFyJrFAwghCghUUl0+BQ4fDA6IdwIeFAG2+kgtMj4DGEAYAz4zLBgpIygDAikjKRgsMz0EGEAYAz4yLRgpJCgCAigkKRgAAAQAAAAACAAGSQAPAB8ALwA/AAAlFRQGIyEiJj0BNDYzITIWARUUBiMhIiY9ATQ2MyEyFgEVFAYjISImPQE0NjMhMhYBFRQGIyEiJj0BNDYzITIWCAArHviSHisrHgduHiv+SSse+kkeKyseBbceKwElLB35JB4rKx4G3B4r/kksHfrbHisrHgUlHivbkh4rKx6SHiwsAZmSHisrHpIeKysBmZIeKysekh4rKwGZkh4rKx6SHisrAAAEAAAAAAgABkkADwAfAC8APwAAJRUUBiMhIiY9ATQ2MyEyFgEVFAYjISImPQE0NjMhMhYBFRQGIyEiJj0BNDYzITIWARUUBiMhIiY9ATQ2MyEyFggAKx74kh4rKx4Hbh4r/kkrHvwAHisrHgQAHisBJSwd+bYeKywdBkoeK/5JLB39JB4rLB0C3B4r25IeKysekh4sLAGZkh4rKx6SHisrAZmSHisrHpIeKysBmZIeKysekh4rKwAABAAAAAAIAAZJAA8AHwAvAD8AACUVFAYjISImPQE0NjMhMhYRFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFhEVFAYjISImPQE0NjMhMhYIACse+JIeKyseB24eKyse+kkeKyseBbceKyse+SQeKywdBtweKyse+tseKywdBSUeK9uSHisrHpIeLCwBmZIeKysekh4rKwGZkh4rKx6SHisrAZmSHisrHpIeKysAAAAABAAAAAAIAAZJAA8AHwAvAD8AACUVFAYjISImPQE0NjMhMhYRFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFhEVFAYjISImPQE0NjMhMhYIACse+JIeKyseB24eKyse+JIeKyseB24eKyse+JIeKyseB24eKyse+JIeKyseB24eK9uSHisrHpIeLCwBmZIeKysekh4rKwGZkh4rKx6SHisrAZmSHisrHpIeKysAAAAACAAAAAAIAAZJAA8AHwAvAD8ATwBfAG8AfwAAARUUBisBIiY9ATQ2OwEyFhEVFAYrASImPQE0NjsBMhYRFRQGKwEiJj0BNDY7ATIWARUUBiMhIiY9ATQ2MyEyFgEVFAYrASImPQE0NjsBMhYBFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFhEVFAYjISImPQE0NjMhMhYBJRYP2w8WFg/bDxYWD9sPFhYP2w8WFg/bDxYWD9sPFgbbFg/6AA8VFg4GAA8W+SUWD9sPFhYP2w8WBtsWD/oADxUWDgYADxYWD/oADxUWDgYADxYWD/oADxUWDgYADxYBANsPFhYP2w8WFgGo3A8VFg7cDxUVAajcDxUVD9wPFRX8g9sPFhYP2w8WFgUW3A8VFQ/cDxUV/IPcDxUWDtwPFRUBqNwPFRUP3A8VFQGo3A8VFQ/cDxUVAAUAAAAACAAGSQAPAB8ALwA/AE8AAAERFAYjIicBJjQ3ATYzMhYBFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFhEVFAYjISImPQE0NjMhMhYRFRQGIyEiJj0BNDYzITIWAbcWDxAK/rcKCgFJChAPFgZJFg/4Sg8WFg8Htg8WFg/7JQ8WFg8E2w8WFg/7JQ8WFg8E2w8WFg/4Sg8WFg8Htg8WBG79bQ8VCgFJCiEKAUkKFfyD2w8WFg/bDxYWAajcDxUWDtwPFRUBqNwPFRUP3A8VFQGo3A8VFQ/cDxUVAAUAAAAACAAGSQAPAB8ALwA/AE8AAAAUBwEGIyImNRE0NjMyFwkBFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFhEVFAYjISImPQE0NjMhMhYRFRQGIyEiJj0BNDYzITIWAZIK/rcKEA8WFg8QCgFJBngWD/hKDxYWDwe2DxYWD/slDxYWDwTbDxYWD/slDxYWDwTbDxYWD/hKDxYWDwe2DxYDNSAL/rcKFg4Ckw8VCv63/cHbDxYWD9sPFhYBqNwPFRYO3A8VFQGo3A8VFQ/cDxUVAajcDxUVD9wPFRUAAAEAAAAACAAFtwAfAAABERQHBiciJwEVFAYjISImNRE0NjMhMhYdAQE2FzIXFggALQ8NHxX+NMGI/NuIwcGIAyWIwQHMFR8ODi0FSfslMBQGARUBzb6IwcGIAyWIwcGIvQHMFgEFFAAABAAA/24IkgZJAAcADgAeAC4AAAAUBiImNDYyAREhNQEXCQEhIgYVERQWMyEyNjURNCYXERQGIyEiJjURNDYzITIWAtuAtoCAtgUT+bcBbbcCSQJJ+NwPFhYPByQPFhaoa0z43Etsa0wHJEtsBKW3gIC3gP1t/gDcAW22AkkBSRYP+pMPFhYPBW0PFiX6k0tsa0wFbUtsbAAEAAD/bgbDBjEABgAUABkAJQAAITcBBxUzFQE0IyIHAQYVFDMyNwE2JwkBIREBFA8BATc2MzIXARYBn2j+82iTAtAaCwj9lQgZCwgCbAg+Adv8Sf4lBsMqvv4lvik+PSsBDCpoAQ1oe5IEJRkI/ZQICxkIAmsJ5v4l/EkB2wNJPSq9Adu9Kyv+9C0AAAIAAP9uBJIGSQAHABcAAAA0JiIGFBYyARQHAQ4BIiYnASY1NAAgAANurPKrq/IB0CX+YBJJUkgR/l8mAVcB5AFXA4fyrKzyrAElfVD8jCYrKyYDdFB98gFX/qkAAgAA/24G2wZJAAcAEwAAJREiBAIQEgQAEAIEICQCEBIkIAQDbqn+4qenAR4EFuv+bf4i/mzr6wGUAd4Bk24E26f+4/6t/uOnA1z+I/5s6+sBlAHdAZTr6wAAAAACAAAAAASSBpIAFQAtAAABNCcuAycmIgcOAwcGFxQWMjYlFAAgADU0Nz4DNz4BMhYXHgMXFgJJFwEhGSAIBScECCAZIQIXAVV5VgJJ/qn+HP6pXQeBZX4gCjk8OgkgfmaBB1wBtykmATEmPxoSEho/JjEBJik9VVXP8v6pAVfyppQKu5/4aiInJyJq+J+6C5EAAAAABQAAAAAH9wZJAAYADgA4AD0ARwAAATcnBxUzFQAmBwEGFjcBExUUBiMhIiY1ETQ2MyEyFx4BDwEGJyYjISIGFREUFjMhMjY9ATQ/ATYWAwkBIREBBwE3NjIfARYUA/eErYVuAkklE/5wEyQUAZBcwYj8SYjBwYgDt0g+EQYNOBAVGhn8SUtsbEsDt0tsCkkRLm4BSv0A/rYE/Gn+t2kgWyCuIAGSha6FQG4DJSQT/nATJRMBkP1/2YjBwYgDt4jBHAgmDjgQBwdsS/xJS2xsS5APCkkREgM0/rf9AAFJAmlpAUlpICCuIFsAAAACAAAAAAduBtsAKwBaAAABERQGIyEiJjURNDYzITEyFhUUBwYHBicjIgYVERQWMyEyNj0BNDc2NzYXFgkBBiMiJyY3NSMgBwYTFgcGIyInLgQ1ND4HOwE1NDc2FzIXARYUBknBiPxJiMHBiAEkDxUeWEALB4BLbGxLA7dLbBQgHhIWGAEP/kkVHg4PLQG3/o+EiDQDGgkFEgwLGUEwKAgYKENZf57PebcsDw4eFQG3FgJx/tiIwcGIA7eIwRYOHwYeJwUBbEv8SUtsbEv1FgsPGxIJCgIg/kkWBhMx25ad/oEaDQIOECd2bpdAOGBtXF9KQi0Z2zAUBgEV/kkWOwAAAgAAAAAHbAZJAC4AQwAAAREUBiMhIiY1ETQ2MyEyFx4BDwEGIyInJiMhIgYVERQWMyEyNjURND8BNjMyFxYJAQYiJwEmND8BNjIXCQE+AR8BFhQGScGI/EmIwcGIA7dIPhEGDTgLDwMIGhn8SUtsbEsDt0tsCkkLEAcGFwEI/F4bTBv+FBsbfhtMGwEtAuMbTBt+GwK1/pSIwcGIA7eIwRwIJg44CwIHbEv8SUtsbEsBIg8LSQsDCQIW/F4bGwHsG0scfhsb/tMC4xsBHH0bTQAAAAABAAD+2wgABtwAQwAAABQHAQYuAT0BIREzMhYUBwEGIicBJjQ2OwERIRUUBiInASY0NwE2MhYdASERIyImNDcBNhYXARYUBisBESE1NDYyFwEIABb+3BY7LP5Jkx4rFv7bFjsV/tsWLB2T/kksOxb+3BYWASQWOywBt5MeKxYBJRY7FQElFiwdkwG3LDsWASQC+TsW/tsWASsekv5JKzwV/tsWFgElFjsrAbeSHisVASUWOxYBJBYrHpIBtys7FgElFgEV/tsWOyv+SZIeKxb+3AAAAAEAAP9tBJIGSQAdAAABNhYVERQGJwEmJxEUBisBIiY1ETQ2OwEyFhURNjcEXxYdHRb81AoELB6SHisrHpIeLAUJBjoWDh35bR4NFgMrCgz8+R4rKx4GSR4rKx78+Q0JAAEAAP9tCAAGSQArAAABNhYVERQGJwEmJxEUBicBJicRFAYrASImNRE0NjsBMhYVETY3ATYWFRE2NwfNFh0eFfzUCgUdFvzUCgQsHpIeKysekh4sBQkDLBYdBQoGOhYOHfltHg0WAysKDPzUHg0WAysKDPz5HisrHgZJHisrHvz5DQkDKxYOHfzUDQkAAQCL/20HbgZJABkAAAE2FhURFAYnASYnERQGJwEmNDcBNhYVETY3BzoWHh4W/NUJBh4V/NQWFgMsFh0GCQY6Fg4d+W0eDRYDKwoM/NQeDRYDKxY7FgMrFg4d/NQNCQAAAQAA/2kGSAZOAAsAAAkBBiY1ETQ2FwEWFAYu+hIaJiYaBe4aArj8tQ8XHQaTHhYP/LUPKQAAAAACAAD/bgbbBkkADwAfAAABERQGIyEiJjURNDYzITIWBREUBiMhIiY1ETQ2MyEyFgbbKx79tx4rKx4CSR4r/AArHv23HisrHgJJHisGAPm3HisrHgZJHisrHvm3HisrHgZJHisrAAAAAAEAAP9uBtsGSQAPAAABERQGIyEiJjURNDYzITIWBtsrHvm3HisrHgZJHisGAPm3HisrHgZJHisrAAAAAAEAAP9uBuMGSgAZAAAXBiY1ETQ2FwEWFxE0NhcBFgYHAQYmNREGBzMWHR4VAywJBh0WAywWARX81BYdBgmDFg4dBpMeDRb81QkNAyweDRb81RY7FvzVFg4dAywLCwAAAAEAAP9uCAAGSgArAAAXBiY1ETQ2FwEWFxE0NhcBFhcRNDY7ATIWFREUBisBIiY1EQYHAQYmNREGBzMWHR4VAywJBh0WAywJBSwekh4rKx6SHiwGCPzUFh0GCYMWDh0Gkx4NFvzVCQ0DLB4NFvzVCQ0DBx4rKx75tx4rKx4DBwsL/NUWDh0DLAsLAAAAAQAA/24EkgZKAB0AABcGJjURNDYXARYXETQ2OwEyFhURFAYrASImNREGBzMWHR4VAywJBisekh4rKx6SHisGCYMWDh0Gkx4NFvzVCQ0DBx4rKx75tx4rKx4DBwsLAAAAAgABAAAG3QW+AAsAGwAAEwE2MhcBFgYjISImASEiJjURNDYzITIWFREUBhADKxY8FQMsFg4e+W4eDgaZ+bceKywdBkkeLCwCfQMrFhb81RYeHv2ZKx4BJR4rLB3+2x4rAAAAAAEAsP+LBVAGvgAUAAAJAhYUDwEGIicBJjQ3ATYyHwEWFAU6/aECXxYWvRY8FfywFhYDUBY7Fr0WBYP9ov2hFjsWvhYWA1AWOxYDUBYWvhY7AAAAAAEAZ/+LBQcGvgAUAAAJAQYiLwEmNDcJASY0PwE2MhcBFhQE8fywFjsWvRYWAl79ohYWvRY7FgNQFgLx/LAWFr4WOxYCXwJeFjwVvhYW/LAWOwAAAAIAAP9uBtsGSQAjAC8AAAE1NCYjIRE0JisBIgYVESEiBh0BFBYzIREUFjsBMjY1ESEyNgAQAgQgJAIQEiQgBAVuLB3+2ysekh4s/tweKyseASQsHpIeKwElHisBbev+bf4i/mzr6wGUAd4BkwKSkx4rASQeKyse/twsHZMeK/7cHiwsHgEkKwFW/iP+bOvrAZQB3QGU6+sAAgAA/24G2wZJAA8AGwAAATU0JiMhIgYdARQWMyEyNgAQAgQgJAIQEiQgBAVuLB38kh4rKx4Dbh4rAW3r/m3+Iv5s6+sBlAHeAZMCkpMeKywdkx4rKwFW/iP+bOvrAZQB3QGU6+sAAAACAAD/bgbbBkkAKQA1AAABNC8BNzY1NC8BJiMiDwEnJiMiDwEGFB8BBwYVFB8BFjI/ARcWMzI/ATYAEAIEICQCEBIkIAQFIRbOzhYWZhYfHhXPzxYeHxVnFhbPzxYWZxY8Fs/PFh0fFmYWAbrr/m3+Iv5s6+sBlAHeAZMB2R4Wzs8WHh8VZxYWz88WFmcWPBbPzhYeHxVnFhbPzxYWZxUCEP4j/mzr6wGUAd0BlOvrAAIAAP9uBtsGSQAWACIAAAE0LwEmIgcJASYiDwEGFBcBFjMyNwE2JBACBCAkAhASJCAEBbsUaBY7Fv4u/v0WOxVoFRUBnRYeHxUCbRQBIOv+bf4i/mzr6wGUAd4BkwOVIBRnFhb+LwECFhZnFT4V/mMWFgJsFVT+I/5s6+sBlAHdAZTr6wAAAAADAAD/bgbbBkkADwA6AEYAACU1NCYrASIGHQEUFjsBMjYBNC4BIyAHBh8BFjMyNzY3NjMyFhUUBgcOAR0BFBY7ATI2NTQ2Nz4EJBACBCAkAhASJCAEBAAVENsQFRUQ2xAVASV/vmP+6pIRGpcIDRILPSUnOzdWLjdIeBUQ2xAVMSYlJkMjHQG26/5t/iL+bOvrAZQB3gGTt9sQFRUQ2xAVFQMQZate9BsVcgcOThsbOyYrNRkghkwpEBUVEBZFFhUXODZVRf4j/mzr6wGUAd0BlOvrAAMAAP9uBtsGSQAeAC4AOgAAJTU0JisBETQmIyEiBh0BFBY7AREjIgYdARQWMyEyNgM1NCYrASIGHQEUFjsBMjYEEAIEICQCEBIkIAQEkhQQbhUQ/pMQFRUQbW0QFRUQAgAQFJIVENsQFRUQ2xAVAtvr/m3+Iv5s6+sBlAHeAZO3txAUAkkQFRUQthAV/pIUELcQFRUEELcQFBQQtxAVFd3+I/5s6+sBlAHdAZTr6wAAAgAA/24G2wZJAC8AXwAAASMiJj0BNDY7AS4BJxUUBisBIiY9AQ4BBzMyFh0BFAYrAR4BFzU0NjsBMhYdAT4BARUUBisBBgAHFRQGKwEiJj0BJgAnIyImPQE0NjsBNgA3NTQ2OwEyFh0BFgAXMzIWBVh9HissHX0luHsrHpIeLHu4JX0eKysefSW4eywekh4re7gBqCseoyr+87grHpIeLLj+9CqkHisrHqQqAQy4LB6SHiu4AQ0qox4rAkksHZMeK3u4JX0eKysefSW4eywdkx4re7glfR4rLB19JbgBV5MeK7j+9CujHisrHqMqAQ24LB2THiu4AQwrox4rKx6jKv7zuCsAAAAAAwAA/24G2wZJACMALwA7AAABBwYiLwEHBiIvAS4BPwEnLgE/AT4BHwE3PgEfARYUDwEXFhQ2EAIkIAQCEBIEICQAEAIEICQCEBIkIAQE5qcLHgycnQseC6cLAQycnAsBDKcLHgudnAseDKcLC52dC+qm/uL+rv7ip6cBHgFSAR4Bpuv+bf4i/mzr6wGUAd4BkwIKpwsLnZ0LC6cLHgycnQseDKYLAQycnAsBDKYLHwudnAsfHQFTAR2np/7j/q3+46enArX+I/5s6+sBlAHdAZTr6wADAAD/bgbbBkkAFAAgACwAAAkBBiInASY0PwE2Mh8BATYWHwEWFBIQAiQgBAIQEgQgJAAQAgQgJAIQEiQgBAU6/h4WOxb+sBYWdRY7FqgBOhY7FnQWi6b+4v6u/uKnpwEeAVIBHgGm6/5t/iL+bOvrAZQB3gGTAzr+HhYWAVAWOxZ0FhaoATsWARV1Fjv+4gFTAR2np/7j/q3+46enArX+I/5s6+sBlAHdAZTr6wAAAAMAAP9uBtsGTwAJABIAIgAAATQnARY3Mj4CBQEmIyIEAhUUABACBgQgJCYCEBI2JCAEFgXbY/yinbd/5adi+4sDX5q9qf7ipwXbi+r+uv6b/rvri4vrAUUBZQFG6gLfuJn8o2YBY6fo1wNeaKf+4Km5AWz+mf667IuL7AFGAWcBRuuMjOsAAAABAEn/GAbbBg0AIAAAARUUBiMhARYUDwEGIyInASY1NDcBNjcyHwEWFAcBITIWBttKO/zbAU8rK1YqPTst/RgqKgLoKz07LFYrK/6xAyU7SgLbkj1V/rApfClXKioC6So9Oy0C5ysBLFQreiv+sVYAAQAA/xgGkgYNACAAAAEUBwEGIyIvASY0NwEhIiY9ATQ2MyEBJjQ/ATY3MhcBFgaSKv0YLTs6LVYrKwFP/Nw7S0o8AyT+sSsrVis8PSsC6CoCkj4q/RgqKlYreisBT1Y8kj1WAVApeylWKwEs/RgoAAEAPf9uBzEGAAAhAAABFA8BBiMiJwERFAYrASImNREBBiIvASY1NDcBNjMyFwEWBzEqVis9Pin+sFU9kj1W/rApeylWKysC6Cg/PioC6CoChjotVisrAU/82ztKSjsDJf6xKytWKzw9KwLoKir9GC0AAAAAAQA9/6oHMQZJACIAAAEUBwEGByInASY1ND8BNjcyFwERNDY7ATIWFREBNjcyHwEWBzEq/RgtOz0q/RgrK1UtOz0pAVBXPJI7VwFQKj07LVYqAyU9Kv0XKgErAukpPj0rVSoBK/6wAyU7V1c7/NsBUCoBK1UtAAAAAQAA/24IAAaSACsAAAAUBwEGLgE1ESEiDgUVFBcUFhUUBiInLgInAjU0NxIpARE0NjIXAQgAFv23Fjsr/wBwsq6CcEYoBQYTJA4IDREEkT25Ay8BACs7FgJJBB48Ff22FgErHgEkDSQ9YoW3dD9NBygKERcTCh4nCAFGveOaAc0BJB4rFf22AAIAAP9uBtsGSQAXAC8AAAAUBwEXFg4BIyEiJjURNDYyHwEBPgEfAQERFAYiLwEBDgEvASY0NwEnJjQ2MyEyFgNfDP6FpRYBKx7+AB4rKzwWpAF8Cx4LggOIKzsWpf6FCx4MggsLAXukFiwdAgAeKwIzHQz+haUWOysrHgIAHisWpAF7CwEMggPB/gAeKxak/oULAQyCCx4MAXulFjsrKwACAA//fQbNBjoAFwAvAAABERQGIi8BAQYiLwEmNDcBJyY0NjMhMhYAFAcBFxYUBiMhIiY1ETQ2Mh8BATYyHwEDbiw7FqT+hAseC4MLCwF8pRYsHgIAHisDXwz+haQWKx7+AB4rKzwVpQF7Cx4MggKS/gAeKxak/oULC4ILHgwBe6UWOysrAvEeC/6FpRY7LCweAgAeKxalAXwLC4IAAAAAAQAAAAAGSQZJACMAAAEVFAYjIREUBisBIiY1ESEiJj0BNDYzIRE0NjsBMhYVESEyFgZJQC7+JUAu2y5A/iUuQEAuAdtALtsuQAHbLkADktsuQP4lLkBALgHbQC7bLkAB2y5AQC7+JUAAAAAAAQAAAkkGSQQAAA8AAAEVFAYjISImPQE0NjMhMhYGSUAu+pMuQEAuBW0uQAOS2y5AQC7bLkBAAAABAIv/bgbiBkkANQAAAR4BDwEOASclERQGKwEiJjURBQYmLwEmNjctAS4BPwE+ARcFETQ2OwEyFhURJTYWHwEWBgcFBp41Hh5JHnU1/tBXO5I7WP7QNXUeSR4fNQEw/tA1Hh1JHnY0ATBXPJI7VwEwNXYdSR4fNP7QAisedTV9NR8er/6hO1dXOwFfrx4fNX01dh2wsB52NH41Hx6vAV87V1c7/qGvHh81fjV1HrAAAAMAAP9uBtsGSQALABsALQAAACAEEhACBCAkAhASATU0JisBIgYdARQWOwEyNgMTNCcmJyMiBwYHExQWOwEyNgJ/Ad4Bk+vr/m3+Iv5s6+sDFRUO3A8XFw/cDxQCFAsLEfsQCwsBFBYQ1BAWBknr/mz+I/5s6+sBlAHdAZT7WtkQFhcP2Q8XFgGZAsYOBgkBCgcN/ToLEREABAAAAAAG2wYAAA0AFgAfAEoAACU1ETUhFREVFBY7ATI2ATMnJiciBhQWJDQmIyIPATMyBREUBisBERQGIyEiJjURIyImNRE0NjMhIiY0NjMyHwE3NjMyFhQGIyEyFgQl/pIpINsgKv3235AeMS4/PwNBQC4xHo/eLgHtFBBuQC77JS5AbRAVFRAB9mqWlmp6RpOSRnpqlpZqAfcQFM5AAhfb2/3pQB0fHwPhuCMBQFxAQFxAJLi3/pMQFf4lLkBALgHbFRABbRAVltSWWL29WJbUlhUAAAAAAgAAAAAIAAZJABUATwAAADQmIyIMAQcGFRQWMzI3PgE3NiQzMgEUBwIABwYFIicuASMiDgIjIi4BJy4DNTQ+AjU0JicmNTQ+Ajc+BDc+BDMyHgIFtywdxf6y/v2LFiseGxgfbBedASzQHgJ0FzX+xPr1/wCpnhGnGhI2MUchIjAXFAIJBANHVEcgAgpjrdl8P87Ny6otCy0XJywcLUclEgOZPCtxwZsYGx4rFhtrFo53ASttb/8A/pR8ewE2BlRJV0kZHiEFEAYPCChYPkIWBU0MOj2D8LaIKRURAwotKgstFBoKaZeFAAIAAP7bBkkG2wAPADMAAAUVFAYjISImPQE0NjMhMhYBFA4FFRQXJxcuBDU0PgU1NCcXJx4EBkkWDvoADxYWDwYADxX+3DhbbW5aOEwEAWegnWc+OFpubVs4TAQCZ6CdZz+3SQ8WFg9JDxYWBKhZl2pfUlNoOm6SAQEvYISUxHBZl2tfUlJoOmuVAQEvX4WTxQAAAAADAAAAAAgABSUAEQAhADEAAAECJRYVFAAgADU0NwQDFgAgCAE0JiMiBhUUFjI2NTQ2MzIAFAcCACAAAyY0NxIAIAATB26u/vpG/tP+Wv7TRv76rpgBywIWAcv9YSAXj8wgLSCMYhcD6Reg/eT9pv3koBcXoAIcAloCHKACkgEOhneK0/7TASzUineG/vLq/uoBFgKKLiDNjhcgIBdii/6nTij++f7EAT4BBShOKAEGAT7+wv76AAAABQAA/5IIAAWSAAkAGQA9AEMAVQAAJTcuATU0NwQDEgA0JiMiBhUUFjI2NTQ2MzIBFAcGAA8BBgciJyY1NDcmJCcmNDcSACEyFzc2MzIeAxcWExQCBwEWBBQHBgcGBCM3NgA3Jic3HgEXAnpZY3BG/vquvwLmIBePzCAtIIxiFwG/AXj+IHo4CxUOixIyo/7sZBcXrwIHATNmaD0LFQYeKSImAxMqtZQBQAkCABctT6v+PP5V8gGci4PASG3IQeahSNt7ineG/vL+2gLGLiDNjhcgIBdiiwERCALX/KDYZRIBUAsVDlZK95wjWCMBDQE3FG8SDRYVFQMM/e+f/vo5Aj4zmFAnSVzF2ZcVAQ/XzYOAScttAAAAAAMAEv9uB+4G2wAPACEAMwAAJTU0JisBIgYdARQWOwEyNgMTNCcmByMiBwYHExQWOwEyNgMBFgcOASMhIiYnJjcBPgEyFgSSFQ/cDxUVD9wPFQIVDA8M/A0OCwEUFxDTEBYPA24oKxNDJ/kkJ0MTKicDbhNFUEW42RAWFhDZEBYWAbsCDQ4IDQEMCBD99QsPDwQ3+bdISCEnJyFISAZJIykpAAAAAQAAAAAGMwYzADIAAAEWBg8BExYPAQYjIicmJwkBFxYPAQYrASYnAyUmJyY/ATYzMh8BCQEmJyY/ATYXBTc+AQYlMklXuLcGFJIIDgUDEQf+wf7YPQYPbgoQAxEK2P7gDQIBC24KEAcC3gEo/bwQBAIMkxASAvi3V9wGJTvcV7j85BYPbgcBAxACRP7Y3hMQbgoCDQEg2AgSDw5vCgE9ASgBPwkSEg2TDwa2t1dJAAAPAAD+2wduBtsAAwAHAAsADwATABcAGwAfACMAMwA3ADsAPwBPAHMAABchESEBIREhJSERIQEhESElIREhASERIQEhESEBIREhJSERIQERNCYrASIGFREUFjsBMjYBIREhJSERIQEhESE3ETQmKwEiBhURFBY7ATI2JREUBiMhIiY1ETQ2OwE1NDY7ATIWHQEhNTQ2OwEyFh0BMzIWkgFJ/rcBkwFt/pP+bQFJ/rcBkwFt/pP+bQFJ/rcDSQFu/pL+SgFt/pMDbQFJ/rf+SQFu/pL+bhYOSg8VFg5KDxUDSQFJ/rf+SQFu/pIBtwFJ/rclFg9JDxUVD0kPFgG3Vzz5tztXVzuTa0tKS2sBt2xLSUtskjtYkgFJ/rcBSUkBbv6SAW5JAUn7bgFJAgABSftuAUlJAW4CbQFKDxUWDv62DxUV/DQBbkkBSf63AUnbAUoPFRYO/rYPFRVZ+kk7WFc8Bbc7V25La2tLbm5La2tLblcAAAADAAD/kggABrcAEgA3AHEAAAEGBy4EIyEiJj0BNDYzISAAFAcBBgciJj0BIg4BLgYnNjceBDMhNTQ2MzIXARIUBwEGByImPQEhIg4CBwYHDgYjISImPQE0NjMhMj4CNzY3PgYzITU0NjMyFwEC+UVXGSM6OlYy/wAQFRUQAQABHQW+Cv6SChAPFiV5QGY8VzlLPEIfQ1kZIjo7VTMBJBUQDg0BbQoK/pIKEA8W/tw3WUUwGyU1IS9MRmNriU3/ABAVFRABADdZRDAcJTQhL0xGY2uJTgEkFRAODQFtBLZpzzM/Ui8hFRDbEBX7fiAL/pMKARYP2wEBAwgQGyc0RixqzjM/Ui8h2xAVDP6UA/YgC/6TCgEWD9siRUg0R31LZ4lbYzomFRDbEBUiRUg0R31LZ4lcYjom2xAVDP6UAAAAAAEAAP7bCAAFtwAmAAAAEAAEISInBgUGBwYmJzUmNiY+Ajc+BTcmAjU0EiwBMyAECAD+7v4p/ulQVuL+1ThLEx8FAwYBCwIOAgg3GC8bIwyzz6IBEwF70AEXAdcDov5z/q7DCchMEAoCGRUBBRIEEgMQAgk9GkA1Ui5mASurlQEPxHTEAAMAAP9uBtsGSQAjADMAQwAAARUUAgQgJAI9ATQ2MyEyFh0BFB4DMj4DPQE0NjMhMhYBERQGIyEiJjURNDYzITIWBREUBiMhIiY1ETQ2MyEyFgbb4f5v/gn+b+ErHgG3His2RF41MDReRTUsHQG3Hiv7bise/kkeKyseAbceKwSSKx7+SR4rLB0Btx4rAyWT5v6Rz88BcOWTHissHZM7VysaBAQaK1c7kx4rKwK9/kkeKyseAbceKyse/kkeKyseAbceKysAAAAAAQBnABgHmQS3ABQAACUHBiInCQEGIi8BJjQ3ATYyFwEWFAeDvRY7Fv2h/aEWOxa9FhYDUBY7FQNQFuq8FhYCX/2hFha8Fj0VA08WFvyxFjwAAAAAAQBn/9sHmQR7ABQAAAkBBiInASY0PwE2FhcJATYWHwEWFAeD/LAWOxX8sBYWvRY7FgJfAl8WOxa9FgNA/LEWFgNPFjwWvRYBFf2hAl8WARW9FjwAAgAAAAAIkgUlACUASwAAJRQGIyEiLgM8AT0BESMiJjU0NwE2MhcBFhUUBisBESEyHwEWARQHAQYiJwEmNTQ2OwERISIvASY1NDYzITIeAxwBHQERMzIWBbcWD/u3CQ0IBALcHisRAW4WRBYBbhEsHdwCkhILtwgC2xH+khdCF/6TESse2/1uEgu3CBYPBEkJDQgEA9seKyUPFgULBxMHFwG3AdssHhsTAbcZGf5JExseLP5KDdsNAdAbFP5JGhoBtxMcHisBtw7bCg0PFgULBxQHFgK2/iQrAAAAAAMAAP9uB24FtwAHAA8AOgAAJBQGIiY0NjIEFAYiJjQ2MhMRFAYHBRYVFAchMhYUBiMhIiY1ND4CNwMjIiY0NjMhMh4EFyEyFgLbVndXV3cEVlZ3V1d36SYb+1YPGwQbHisrHvtuHisSEh8Dy+keKyseASUSHRANBQgBBV0eKzt2V1d2V1d2V1d2VwRJ/bcbKgSLRQsSNyw7LCwdDS8jOAYDrSs7LA8VIxgrCCwAAAAAAQAAAAAHbgZJABQAAAERFAYjISImNRE0NjMhMhYdASEyFgdul2n6kmmXl2kBbmmXAwBplwQl/Ntpl5dpBElpl5dpJJcAAAAAAgAAAAAIYwZJABMAKgAAARQHAQ4BIyEiJjU0NwE+ATMhMhYBFSEiBgcBBzQmNRE0NjMhMhYdASEyFghjI/6AMbFM+yUnPSQBgDGxTATbJzz+ePxKa+xG/n8GAZdpAW5plwJtaZcCmyMo/js6UR4iIygBxTpRHgFot21S/jsHBRMFBElpl5dpJJcAAAABAEn+2wMlBtwAHwAAABQGKwERMzIWFAcBBiInASY0NjsBESMiJjQ3ATYWFwEDJSwekpIeLBb+2xY7Fv7cFiwdk5MeKxYBJBY8FQElBYs7K/ttKzwV/tsWFgElFjsrBJMrOxYBJRYBFf7bAAABAAABbQgABEkAHwAAABQHAQYuAT0BIRUUBiInASY0NwE2MhYdASE1NDYyFwEIABb+3BY7LPtuLDsW/twWFgEkFjssBJIsOxYBJAL5Oxb+2xYBKx6Skh4rFQElFjsWASQWKx6Skh4rFv7cAAAFAAD/bgklBkkAAwAHAA0AEQAVAAABESERAREhEQEVIREzEQERIREBESERAtv+3ALb/twFt/bbkgW3/twC2/7bAtv9twJJAkr7bQST+tuSBtv5twQA/JIDbgG3+tsFJQACAAD/bgbbBkkAMABAAAABBgc2NwYHJiMiBhUUFyYkJwYHFBcmJxUUFhcGIyInHgEXBiMiJxYXMj4DNTQnNgERFAYjISImNRE0NjMhMhYFt0BKThxKT0ZpY40Gk/79WiEBaDY8clQhGQ8eGHpOhaUeG6nHgOCgczgBSAFUwYj7t4jBwYgESYjBBCIdCi5YKw9LjGQhFgiFbzlAgkYBHAJWhRAJBEheAWcEawFSiLHBYBUKMwEn+7eIwcGIBEmIwcEAAAAAAQAA/24G2wZJACQAAAEyFhURFAYrAREzEyE1NDYzNzUmIyIGHQEjETMRISImNRE0NjMFkojBwYjX5CL++jZOi0iDm7vk5P2giMHBiAZJwYj7t4jBAqgBCalAQAHtCrenw/73/VjBiARJiMEABwAA/24IAAZJAA8AFwAbACMAJwAuAD4AAAA0JiMiBhUUFjI2NTQ2MzIkFAYiJjQ2MgEhNSEAEAAgABAAIAEhNSEDIT0BIQchJREUBiMhIiY1ETQ2MyEyFgQlFRBLbBUgFEAuEAEVrPKsrPL8GQbc+SQFJf7//pT+/wEBAWz8bwG2/kqTBtz8TUn9IAduVjz5JD1VVjwG3D1VAxUgFGtMEBQUEC5ACfKsrPKs/EuSAUgBbAEB/v/+lP7/BJWS/pKHnpKS+kk9VVU9Bbc9VVUAAAIAAP8uB4MGSQAVAEcAAAA0JiIGFRQXJiMiBhQWMjY1NCcWMzIBFAYjIi4CJwcXFhUUBiMiJwEGIyImNTQSJDMyFhUUBwE3LgM1NDYzMhceBAO3gLeAFi8wW4GAt4AVLy9bBE1wEwotJzEDbvsgWTAuH/0Bydi669kBXre66pUBlW4DNSckcBMPCwdcYGVBBDe3gIBcMC8WgLeAgFwwLxb9txNxJSc0BG77IC4wWSAC/5bqurcBXtnqutjK/mttAzInLAsTcAsHWF5nSwAAAAAGAAD+7QiSBskABwARABsAfwC9APsAAAA0JiIGFBYyATQmIgYVFBYyNhE0JiIGFRQWMjYBFRQGDwEGBxYXFhUUBw4BIyIvAQYHBgcGKwEiJi8BJicHBiMiJyY3NDc+ATcmLwEuAT0BNDY/ATY3JicmNTQ3PgEzMh8BNjc2NzY3MzIWHwEWFzc2MzIXFgcUBw4BBxYfAR4BARUUBwYHFhUUBwYjIiYnBiInDgEjIicmNzQ3JicmPQE0NzY3JjU0Nz4CMzIWFzYyFzY/ATIXFhUUBxYXFhEVFAcGBxYVFAcGIyImJwYiJw4BIyInJjc0NyYnJj0BNDc2NyY1NDc+AjMyFhc2Mhc2PwEyFxYVFAcWFxYEAKvzq6vzBBlXd1dWeVZXd1dWeVb+SRAKsg0XJ0AICBqJFQ0LhCouDQ0IGtUNFAEaJy+HCA8NC6UBCAtHEhoOrgsQEAqxDRgnQAgIGYkWDQuEJzENDQga1Q0UARonL4cJDg0LpQEIDkQRGg2tCxEC26oOFDoFiwIJVxAXFxcQVwkCjAUBOhUNqqoPEzoEBUdAAglXEBcXFzovBwWIBToTD6qqDhQ6BYsCCVcQFxcXEFcJAowFAToVDaqqDxM6BAVHQAIJVxAXFxc6LwcFiAU6Ew+qAmLzq6vzq/7bO1hXPD1VVQTQO1dXOz1WVv5b0wsWARwoLzdMCwwOCCKICGcWDXs3GxEMrgsZZggJmB8KDBBZGTIsGwEUDNQLFgEcKC43TQ0KDgkihwhnFQ97NRsBEQyvCxhmCAmYHwoMElcZNycaAhT9kqASER8dgRwFA1FrGAICGGtRAwUdgB0fERKgEhIhGoEdBQMCKSVqGAICUS8CUAMFHYEaIRIEgaASEh8cgR0FA1FrGAICGGtRAwUdgR0eEROgEhEhGoEdBQMCKiRqGAICUS8CUAMFHYEaIREAAAACAAD/bggABbcAJQBPAAAAEAIEIyInBgcGByMiJicmND4FNz4ENy4BNTQSJCAEARQGBx4EFx4GFAcOAScmJyYnBiMgJxYzMiQ3NhI1NCceAQZJ1/6N2mJojq8pOgMNFQMBAQQCBgMHAQYpEiIYC46i1wFzAbUBcwKOoo4LGCISKQYBBwMGAgQBAQMYDTkqsI1nY/7K5UIjuAFShI+ZGpOsBA3+wv7ynBJlLQoJEw4DCQcHBAgECAEHKxgqLhtS8YifAQ2dnf0vie9SGy4rGCsHAQgDCAUHBwgDEBIBCAouZBKXBWdgaQETmVhVUfQAAAADAAD/bgbbBtsABwA8AG0AACQ0JiIGFBYyATQmIyE0NjU0JiMOAgcGBw4GKwERMzIeBBcWOwEyNzQnPgE0JzYnNCYnPgE3FAcWFxQHFhcUBxYGKwIiJicmIyEiJjURNDYzITY3Njc+Ajc2MzIeARUUBzMyFgElLDssLDsFUFk5/m5tSW4eGyovGT8FKxwzKS8sEyQkDyshNRs3BfGWitsBBiIoFD0BFhIlMZI4CgEsAwFFAcShKmpu1Y2FGf63PVVWPAE5KXRCOBsbKzItOWCaUDfJd62+OywsOywC3DpYQuhEcGsehpgyGk4GOCU9KCkU/SQHCBEJEwNTvx4iElRUJTlPHUUTAWopZlQmKVhNGBlzWJ+4MzEuVjwC3D1VG5ZWPB2KlzAqSp6FanKtAAAAAwAA/tsG2wZJAAcAPQBwAAAANCYiBhQWMgE0Jic+ATU0JzYuASc2NTQmKwEiBw4FKwERMzIeBRcWFx4CFzI2NTQmNSEyNjcUBisBFhUUBw4BIyInLgMnJicmJyEiJjURNDYzITI3PgE7ATIWBxUWFRQHFhcUBxYBJSw7LCw7BVAxJREXPBUBKCIGcGSSlvEGNhs1ISsPJCQSLS8pMxwsBD8ZLyocHW5JbQGSOVmSrXfJNygommA6LCcuDRsWN0NzKv7HPVVWPAFJGYWS2niAoMUBRQQrAQs4BL47LCw7LP23KGkBE0ccTzklVFQSIh5hXlQCEwkSCAb9JBQqKDwlOQZOGjGYhx1rcEPpQlg5dq1xa4dNT0srJm9fYxg5WJYbVjwC3D1VLjIytJ0GWHMZGE1YKSZUAAAAAQAA/6EDtwa3ABIAAAERAQYjIiY1NDcTASY1NDclATYDt/3/GRUYGAJj/mAdQAI+AQEWBrf6Bv7yDiEYBxACPAGUHxgqC1MCCC8AAAIAAP9tCAAGSQAcADkAAAE0LgMiDgIHBiInLgMiDgMVFBcJATY3FAkBBiYnAS4ENTQAITIeAhc+AzMgAAduMU1uaXeJc1MbFUYVG1NziXdpbk0x1gKYApfXkv76/TgVOxT9NwspV0Q2ASIBAEeUflwpKVx+lEcBAAEiBDJdjlM1EjpYTSAZGSBNWDoSNVOOXcDV/YACftfA/f77/VIVARQCsAkqbHKjTPsBHDFTSikpSlMx/uQAAAACAAAAAAcABbcAKABAAAAlFBYOAiMhIiY1ETQ2MyEyFhUUFg4CIyEiBhURFBYzIToCHgMAFAcBBi4BNREhIiY1ETQ2MyERNDYyFwEC2wMBBhEP/pKIwcGIAW4PFQMBBhEP/pJLbGxLAUkBFwcUBgwEBCUW/ZMWPCv+AB4rKx4CACs8FgJtbgUkGB4PwYgDJYjBFg8FJBgeDmxL/NtLbAIFCAwCgjsW/ZIWASseAUkrHgG3HisBSR4rFf2SAAQAAP9uBtsGSQADAA8AJQA1AAAlIREhJS4BIgYVFBY7ATI2ASERNCYjIgczNSEWAyERNDc+ATMyFQERFAYjISImNRE0NjMhMhYBDwEI/vgBGQFQhVNRQQFDUwKdAQiniZtUAv74AwMBCAgRRTKFAhbBiPu3iMHBiARJiMGLAxr0O05NPDpPT/wsAcewtYZ0S/0xAbwrFSg4tALN+7eIwcGIBEmIwcEAAAIAAP7bBSUGSQALAC4AAAERNCYiBhURFBYyNgEUBiMhAw4BKwEiJwMhIiY1NDYzESImNDYzITIWFAYjETIWAiUVIBUVIBUDACwe/hY6AhQOAR8FV/4yHiuzcjtYVzwC2ztXVztxtAMAAgAQFRUQ/gAQFRX+fh4r/dgOFB8CKysejeACSlZ3V1d3Vv224AAAAAIAAAAACAAG2wAnAD8AAAERFAYjISImNRE0NjMhMhYdARQGIyEiBhURFBYzITI2NRE0NjsBMhYBERQGIi8BAQ4BLwEmNDcBJyY+ATMhMhYGScGI/EmIwcGIAyUQFBQQ/NtLbGxLA7dLbBQQShAUAbcrPBbJ/RcLHguDCwsC6ckWASseAkkeKwK3/pKIwcGIA7eIwRQQShAUbEv8SUtsbEsBbhAUFAPL/bceKxbJ/RcLAQyCCx4MAunJFjsrKwAAAAIAAAAABtsFtwAXAEAAAAAUBwEGLgE1ESEiJjURNDYzIRE0NjIXCQERFAYjISImNTQmPgIzITI2NRE0JiMhKgIuAzU0Jj4CMyEyFgVJFv2TFjss/gAeKyseAgAsOxYCbQGowYj+kw8WAgEGEQ8BbUtsa0z+twEXBxMHCwUCAQYRDwFtiMEC+TsW/ZIWASseAUkrHgG3HisBSR4rFf2SAV/824jBFg8FJBgdD2xLAyVLbAIECA0JBSQYHg/BAAAAAAMAAP9uB24GSQAGAA0ASQAAASY3IRUUFgE1IRQHPgE3FRQOAgcGBw4BFRQWMzIWHQEUBiMhIiY9ATQ2MzI2NTQmJyYnLgM9ATQ2MyE1NDYzITIWHQEhMhYCC1UB/tvYBXH+3FWh2JNfoeuBMDwrIkZMVoYVEPxJEBSGVU1GIis9MIHqoV9ALgFJa0wCkktsAUkuQALque9tWcEBGm3vuSHB65JRpYVaBj4uJ1g6PlVoT0kQFBQQSU9oVT46WCcvPQZahaRSki5AbUtsa0xtQAAIAAD/bgbbBkkABwAOABYAHgAlAC0AMwCNAAAlBicmNzYXFicWBwYmNzYnBicmNzYXFhcGJyY3NhcWFwYnJjYXFhcUIwY1NDM2FxYGJjc2AREUBiMhIi4CNRE0Jz4ENTQnNicmBg8BJiIHLgIHBhcGFRQeAxcGBw4BIiYnLgEvASIGHgEfAR4BHwEeAz8BFBYVFA4BIyEiJjURNDYzITIWAcIJDg8LCQ4NOQoKCRQKCjwGCQsDAwwLIAcLCgcHDAqLBRATCBIRRRITEhNDAiUEEhMET8GI/wASExoLO0Fob0ovWyozIHksLGriaxI9giEyKlovSW9oQS4KGDdMShoWQxcXGBIHDQgIGTILCw9HUk0ZGgIaGRn/AIjBwYgESYjB0goODQgKDQ09DggHHgYINggFBggGBAUvCAsNBQcKDIYOBwUZBQUTDQIPDQIECwkbBAIEOPu3iMECCRgUARFvMwcbPlqWYYpiaIEKLhscHh4NJTMKgWhhi2GVWz4bBylNCwwyLiUuBAQLEBAFBgtAGxorNg8BBAUrlQMZGwPBiARJiMHBAAAABAAA/24HbgaTAAcADwAnAD8AACQ0JiIGFBYyJDQmIgYUFjITERQGIyEiJjURNDYzIR4BMyEyNjchMhYBBiMhERQGIyEiJjURISInJjcBNhYXARYFtyw7Kys7AVArOywsO75ALvluLkBALgHoGHFGASRGcRgB6C5A/owTMP7bKx7+3B4s/twwFBMjAgAVPhQCACMrPCsrPCsrPCsrPCsBSf6SLj9ALQFuLkBAUlJAQAK3Lv4AHisrHgIALi0iAgAWARX+ACIAAAACAAD/bgbaBkkAMQBkAAABNCYnLgI1NDY1NCcmIyIGIyIkIyIOAQcGBwYKARUUFhUUBhQWMzI2MzIEMzI3PgESNxQCAAcGIyIkIyIGIyImNTQ2NTQmNTQ+Ajc2NzYzMgQzMjYzMhYVFAYVFB4DFx4BBkgQDQ4LCQwMBQoWWRZF/vdEMXVNQJ1KbpE4HRkbGRtwHEEBAULPdZP0iJKg/uCxjuZB/v1AG28dU3QaHSlUkmJZsN6LRQEIQhZXF11UDAMEBQoCEhUDKzKgHiIhMx4aaBkqFQEKNxocGT44U/72/u6TLrcuGmQyIhokKTP2ATugvf6N/uE/MiEhf1MbZRouuC9/8+zQSkNGWTcMdGAaZxoLFBMMGQcuswAAAAEAAAAABkkGSQBPAAABFAYHBgcGIyIuAycmJyYAJyYnLgQ1NDc2Nz4BMzIXFhceAhceAhUUDgIVFB4CFx4BFx4DMzI+AjMyHgEXHgIXFhcWBkkXDBh0a2kfOkojWwtwWJL+yFo3KAMjDBUIOkA5HWMfEAgVKA0rJBIDIRBBTUEMCBgBV+CcAicQHwsVPzlFFxAhMAQdQVAWUAcDAVIfYx05QDoIFQwiBCg3WgE4klhwClwjSjofaWtzGQ0WAwdQFlBBHQUvIRAXRTlAFAogECYDnd9XARgIDEFNQRAhAxElLAwoFQgAAAACAAAAAAZJBkkADwAfAAABISIGFREUFjMhMjY1ETQmFxEUBiMhIiY1ETQ2MyEyFgUA/ElLbGxLA7dLbGz+wYj8SYjBwYgDt4jBBbdsS/xJS2xsSwO3S2y3/EmIwcGIA7eIwcEAAgAA/4gFtwZJAAYAIwAAASERATcXARMyFx4BFREUBgcGIyInCQEGIyInLgE1ETQ2NzYzBSX7bQHkZWYB5A0aGSYsLSUWHTco/gj+CCk1GhkmLC0lGBsFt/p0AdBiYv4wBh4KD0An+j8nQA8JJQHk/hwmCg9AJwXBJ0APCgAAAAACAAD/bgbbBkkARQBVAAABNCcuAS8BLgIjIg4BIyIuAicuAScuAzU0PgI1NC4BJy4FIyIHDgEVFB4EFxYAFx4FMzI2NzYBERQGIyEiJjURNDYzITIWBbcCA1I9PAYgGQsVQkATCBUOGQRxoz8CDwcILzgvDBcDAxweHhsLDTc8NU0FBg8IFANFAWW7BzcVLxwpE0GoGBkBJMGI+7eIwcGIBEmIwQGIDQUJMiAhAxcLSksIBw4DP6NxAxoNFggPLykxEQsaIAYHMzQ4JQUaGKhBEikdLxQ3B7v+mkUCFAgPBgZONTwDr/u3iMHBiARJiMHBAAAAAQAyAAAHOwW3ADEAAAEGBxYVFAoBBgQjICUWMyA3LgEnFjMyNy4BPQEWFy4BNTQ3FgQXJjU0NjMyFzY3Bgc2BztNbAFWsvT+p8X+yv7/KDEBAcp4viMmHzEwgKhOWUtZMooBjeIJ2Jmgbn1tKnhqBQlwTxAglf7Z/vDRfaYFngKPbwYNGsqGBSsEMqJfZVWqzAwrKpnYdRhBg0gLAAAAAAEAbf9uBEgG2wAUAAABESMiBh0BIQMhESERIREhNTQ2MzYESLNiRQFPLf7e/qL+3QEj7sWoBs7+0lJT2P6u/J0DYwFS+tXpAQAAAAABAAD/mgbbBkkAUgAAARAABQYmPQE0Jz4ENTQnNicmBg8BJiIHLgIHBhcGFRQeAxcGBw4BIiYnLgEvASIGHgEfAR4BHwEeAz8BFBYVFAYnJAARNBIkIAQSBtv+sv72Hxw7QWhvSi9bKjMgeSwsauJrEj2CITIqWi9Jb2hBLgoYN0xKGhZDFxcYEgcNCAgZMgsLD0dSTRkaAh4f/vf+sesBlAHeAZPrAtv+4f42WAYcFfFvMwcbPlqWYYpiaIEKLhscHh4NJTMKgWhhi2GVWz4bBylNCwwyLiUuBAQLEBAFBgtAGxorNg8BBAUrdQMVGwVYAcsBHu8BlOvr/mwAAAAAAQAAAAAHbgZJACUAAAERFAYrASImNRE0JiIGHQEzMhYVERQGIyEiJjURNDYzITU0ACAAB24sHUoeK6vyrG4uQEAu+7cuQEAuAwABLAGnAS0ESf7cHiwsHgEkeaysedtALv1uLkBALgKSLkDb0wEt/tMAAAAFAAD/bgiSBkkADwAZACMAJwArAAABMhYVERQGIyEiJjURNDYzFSIGFREhETQmIxEyNjURIREUFjM3NSEVMzUhFQfbS2xrTPjcS2xrTA8WB24WDw8W+JIWD24BJJIBtwZJa0z6k0tsa0wFbUtskhYP/wABAA8W+kkWDwK2/UoPFpKTk5OTAAAAAwAAAAAGSQZJAAcAIQA9AAAAFAYiJjQ2MgEWBwYrASImJwIAJS4BPQE0NzY7ARYEFxYSBRYHBisBIiYnJgIAJCcuAT0BNDc2FzMMARcWEgG3gLeAgLcCyQIVFSGaHSkCGf6M/vodJRgTHga3AU2CgpoCWAIWFSCjHioCDsv+u/5F9R0oFxUdBAErAiPV1vQBN7eAgLeA/pggFxgmHAEGAXMaAikdmiEVEw+agoH+srkfFxcoHfYBugFFzA8BKh2jIBUVAQ/01tX93QAABQAAAAAG2wW3AAcADwAfACkAPwAAABQGIiY0NjIEFAYiJjQ2MhMRNCYjISIGFREUFjMhMjYBIQMuASMhIgYHAREUBiMhIiY1ETQ3Ez4BMyEyFhcTFgSlNkw1NUwBWjZLNjZLthYO+pIPFhYPBW4PFfqCBUWzBRsQ/IIQHAQFXGtL+pJLbBLhE2o/A34/aRPhEgGTSzY2SzY2SzY2Szb+7gFuDxUWDv6SDxYWAjMCJw8UFA/9I/6SS2xrTAFuHTgCtT1LTDz9SzgAAAAAAgAA/3EIAAZJAC4ANAAAATIWFAYjERQGIwAlDgEWFw4BHgIXDgEmJy4ENjcjIiY9ATQ2MyEgATIWFQMRAAURBAduPVVWPFc8/iP+PUJLBCwXBxU4NSwhvcU0CDQVHwQME4tLbGtMAiQB8QIPO1iT/j7+VQGuBABWeVb+SjtYAY0mFmx6LCZKO0MvIkI6HzAalESHYIE+bEvbS2wBt1c7+5cEQv6nL/7LLwAAAAMASf7bB7cG2wALABkAQQAABDQjIiY1NCIVFBYzASEAETQuAiIOAhUQARQGIyEUBiImNSEiJjU+AxI1NAA3JjU0NjIWFRQHFgAVFBIeAgQSEkNiJHZT/RkFzv7QN2ev1K9nNwVuVzv+AKzyrP4AO1c5XmVFLQEL2QlAXEAJ2QELLUVlXskkYkMSElN2AVsBVwJgOnxwSEhwfDr9oP6pO1d5rKx5VzswaajDARSfrgEqIBYXLj9ALRcWIP7Wrp/+7MOoaQABAAL/bgbZBkYASQAAARcWBwYPARcWBwYvAQcGBwYjIi8BBwYnJi8BBwYnJj8BJyYnJj8BJyY3Nj8BJyY3Nh8BNzY3Nh8BNzYXFh8BNzYXFg8BFxYXFgcGJZ0iCw4t1zwOIyEv1TcLLw4IIxeamyAwLws31C8hIw091y4OCyKeniILDi7XPQ4kIS/UNwsvLyGbmiEvLws31S8hIw481y4NCyIC25ogMC8LN9UvISMOPNcuDQIZnp4iCw0u1zwOIyEv1TcLLzAgmpsgMC8LN9QvISMNPNYvDA4kn58iDAsw1jwOJCEv1DcLLzAgAAMAAP9uCAAGSQAHADUAaAAAJDQmIgYUFjIBNCYjITQ+AjU0JiMiBwYHBgcGBwYrAREzMh4BMzI1NCc+ATQnNic0JichMjY3FAYrAQYHFhUUBxYGIyInJiMhIiY1ETQ2MyEyPgU3Njc+BDMyFhUUByEyFgElLDssLDsGdVk6/W4iKiJmURtMGw8uUlEjT1EkJFLa4V3YBiIoFD0BFxEBejtYkq14wQUlA0QBxaGY2LtE/rc9VVY8AUkLGxwYHhAcAkooDy4nNkgrj7oZAat3rr47LCw7LALcOlgXQT1eMk1FnzIYSV1dHEH9JElJvx4iElRUJTlPHUUTWDx4rkdBGBlzWJ+4T0NWPALcPVUKFhMgEiADVT4YXkdJKJmLTkWtAAMAAP9uCAAGSQA3AD8AcwAAJTMRIyIuAicuAicmJyYnLgQjIgYVFB4CFSEiBhUUFjMhDgEVFBcGHgEXBhcUFjMyPgEkNCYiBhQWMhMRFAYjISIHBiMiJj8BJjc0NyYnIyImNTQ2MyEmNTQ2MzIeAxcWFx4GMyEyFgYlJCQoS0QuIQIEBgJSLhAbARYVGRgJUWYiKiL9bjlaVzwBehEXPBUBKCIFAW5kYOLaAZssOywsO75WPP63Q7zZkqLJAQFGAQMmBMF4ra53AasZuo8rSDYnLg8oSgIcEB4YHBoMAUk9VZIC3Bs5MCYDBAcCXUkZNAMtJiwaRkwxXz1BF1g6O1gTRhxPOSVUVBIbJWFeSUksOywsOywC3P0kPVVDT7GgBld0GRhBR654dq1FTouZKElHXhg/VAMgEiATFgpVAAAAAwAA/tsG2wbbAAcANQBoAAAENCYiBhQWMhM0IyIHLgEiByYjIgYHETQmIyIGFREiLgIjIgYVFBcWFxYXFhcWHQEhNTQ+ATcUBwYHERQGIyEiJjURNC4FJyYnLgQ1NDYzMhcRNDYzMhYdARYXNjcyFzYWBbcsOysrO76/HiISU1UlOU8dRRNXPDpYF0E8XzFNRp8yGEldXRxBAtxJSZJOQwFWPP0kPVUKFhMgESAEVT4YXkdJKJmMTkSudXiuR0EYGXNZn7dnPCsrPCsDstgGIikVPRcRAXo7V1k5/W4iKSJlUhtLGxAuUlEiT1ElJVLZ4WOY2LtE/rc9VlY9AUkLGxsYHxAbA0ooDy0nNkgrj7saAax3rax4wQUmAwFFAcQAAwAA/tsG2wbbADQAPABwAAABNC4BPQEhFRQOAgcGBwYHBgcOBBUUFjMyPgIzERQWMzI2NREWMzI3FjI2NxYzMjYCNCYiBhQWMgEUBi8BBiMiJwYHFRQGIyImNREGIyImNTQ+Azc2Nz4GNRE0NjMhMhYVERQXFgZJSUn9JBs5MCYKBl1JGTQDLSYrG0ZNMV88QRdYOjtYNUBPOSVVUxIbJWFekiw7Kys7AVCxoAVXdRkYPkqueHatPlSKmyhJR14YP1QDIREgExYKVjwC3D1VRE4CkmDj2VIlJShKRS4hCQRSLhAcARYUGRgKUWUiKSL9bjlZVzsBeig9FSgjBW8DszwrKzwr/OCiygIBRgMiCMF4ra53AasZu44rSTYmLg8oSgIcEB8YGxsLAUk9VVU9/rdDvNkAAAAAAgAA/24G2wZJAB8AKwAAATU0JiMhNzY0LwEmBgcBBwYWHwEBFjY/ATY0LwEhMjYAEAIEICQCEBIkIAQFtywd/cLYFhZoFT0V/mJoFQEUaAGeFT0VaBUV2AI+HisBJOv+bf4i/mzr6wGUAd4BkwKSkx4r2BY7FmgVART+YmgVPRVo/mIVARRoFT4U2CsBVv4j/mzr6wGUAd0BlOvrAAAAAAIAAP9uBtsGSQAfACsAAAA0LwEBJgYPAQYWHwEhIgYdARQWMyEHBhYfARY2NwE3ABACBCAkAhASJCAEBb0VaP5iFT0VaBUBFNj9wx4rKx4CPdgWARVoFT4UAZ5oATPr/m3+Iv5s6+sBlAHeAZMCvT0VaAGeFQEUaBU+FNgsHZMeK9gWOxZoFQEUAZ5oASL+I/5s6+sBlAHdAZTr6wAAAAACAAD/bgbbBkkAHwArAAAANCcBJyYGDwEBBhQfARY2PwERFBY7ATI2NREXFjI/AQAQAgQgJAIQEiQgBAW7FP5iaBU9FWj+YxUVaBU9FNgsHpIeK9gWOxZoATTr/m3+Iv5s6+sBlAHeAZMCvj0VAZ5oFQEUaP5iFT0VaBUBFNj9wh4rLB0CPtgWFmgBIf4j/mzr6wGUAd0BlOvrAAACAAD/bgbbBkkAHwArAAAANC8BJgYPARE0JisBIgYVEScmBg8BBhQXARcWNj8BAQAQAgQgJAIQEiQgBAW7FGgVPRXYKx6SHizYFjsVaBUVAZ1oFT4UaAGeATTr/m3+Iv5s6+sBlAHeAZMCuz4VaBUBFNgCPR4sLB79w9gWARVoFT4U/mJoFQEUaAGeASP+I/5s6+sBlAHdAZTr6wADAAD/bgbbBkkACwHXAhcAAAAgBBIQAgQgJAIQEgEOAQcyPgE3Njc2NzYXJjY3PgE/AQYmJxQHNCYGJy4CJy4BJy4DIg4BIyYOAgcOAQc2JyYHNiYnMy4CJy4BBwYeARUWBhUUFgcOAQcGFhcWDgIPAQYmJyYnJgcmJyYHNicmBz4BNTY3PgIjFjc+ATc2HgEzFjYnFicmJyYHBhcmDgEnLgEnIgc2Jic2Jy4BBw4BHgIXFgcOAgcGFgcuAScWLwEiBiYnJjc2Fy4BJwYHFjc+ATc2FzcWFyYHBgcWBy4CJyIHBgcWFx4CNxYHNhcWFxYHLgEHBhY3IgYUBxcGFjcGFxYXHgQXBhYHIgYjHgEXHgI3NicmJy4BJzIeAgcGHgIXHgEjMhYXHgEXHgMXHgEXFjI2NzYWFxY3Bh4CFx4BFzY3BhY3NjUGJzQuAjYzMjYmJy4BJwYmJxQGFSInPgE3PgMmBwYHDgIHBiYnLgE1ND4BJz4BNz4BFjY3JicmJxY2FxY3NCY3FjceARceAjY3FhcWFxY+ASYvATQ1Jy4BNjc+Ajc2JzI3Ii4BIzYnPgE3Fjc2Jz4BNxY2NDc+AT8BNgcWNzYnNiYnNhY3NicmAzY3LgEnJic2LgInLgMGIwcOAxcmJy4CBgcOAQcmNicmDgQHDgEHLgE1HgEXFgcGBwYXFAYXFgJ/Ad4Bk+vr/m3+Iv5s6+sDvAISBgIGBQEHExArJxMCGgQDHAMCDgwBBwoQAwsLBwECEgIBBAMGBwkIAQMHBAcCAw0DERILCAoDCAYBERcECTsIBgEIAQ8gBAMeBAYJCAIBBwYEBA0VBQgKGgcGKR0lBwcIDgMDAwoBDggDKBEGDwQKDBYFEAQLDgoGAw4RCQsBExMJAQoGCQkDIAsWHwgfBwYBDQsPAhAHAg8LAQMGBgYJAwglCwUbEwYFBQEDBQ8ENTYHBwYSAicJBhAHCBsXAggCBREQCRIHp2YIBgUCAwwKBwExFgIDDgESAgMICAgGAQIDEw8PJgcCAxUOCg0JAhoBAQQBAx0EAQIFBgIdEQIDBwICCgoHAQMLEBYDBxIJChkHBgcCAg8OFwMGHwkLDhMGESAIKRYCBQ0IAgYeBQcBAxcJECMVBgMCAgQKAwcBARcCBhkGAw8CAQMCAQsHAg0NFggBBQcGCCcIDxYGAQcDDgUCBgQFAQEDAwIIMQcRCAYDBhsDHQYDCQQIBQsDDQkICQEBAQECEQgMCwEQFAQYBwgFAQkIAQoIBgUGCg4IBwYjBAgCAwUZAhQDAxUOCxIDDQoDFAIRGRPY66YDFgQVBgEIChMDAgwEDQcIAwMGBwMCGBIGDQoNBwYCAQgQBgMRChAFDwIDBwMCFgIFBAgWHwIFEhIBAQZJ6/5s/iP+bOvrAZQB3QGU/pgBFAELDgEICQcHCRUCGQECBgYZARIPAgcIAgQBAwocAwYNBQIJBgYLDAIBAQUCAgIBBgYFAQUSBgUKCQMGCgUHChYDBxAGCBMPCRIFCRgHAgUGAwIDBhoRHQUJCg8PCgYBEREEBxoDDwsBEQ4FEgYbBQcBCwEbCQEVCAIFCwUEARoODQEcAhIJEQEOEQUBBQgLCAQFAQsFAQYEAwUWBQYdBAoDAgUCCAkOBQMDEAIRHgECAgsBEAgGEgsFBAcGDgcDEAoBAVujCAEBEwcHCQwBIBMFDQgCEAMGHwIlLQQBDjMDAy4JAQINCwwoBwcgCgIIEAcDEQkCFzAdBAYYBQQEBQEIGBIZAwceFwwJKQcIDwcLAgIUAwUGAQInBBYJAQ8UDQMHFQcFBgkcAgMiESUBCwkKBwgVBAkcAwoCCQEKAgEDIQoFEQ8OCAEBFgMSCQMDAgQJMBMLJhMTAhEDAQIBBAUBAgMBAwkGDQ8BEwYfFQMFBAIIAgMGEAsuBQMCFAwICQoLCQMVFgoBBgkFFhIKBwQGDQMSAw4LCQoICAYCCRMEBgkBDQUBAg8NCgcIAgEBAgsHBvwCKa8DBAMIAQgNBwwCAgkEBwMBAQMEAwETBgEKBgIHBhcDBhwHBwQGDQILAwUSAwUFAws5DyMUHREZBAgfCQgAAAAAAwAY/vMHawZJAAcAFQAvAAAkNCYiBhQWMgkBBgciLwEmNTQ3AR4BARQHBgQjIgAQADMyFhceAQcFERc+AjMyFgG3LDsrKzsDDPz0Kjw7LXorKwMLLawDRBo2/vSh0/7TASzUQpEyEgET/rLcBqmNChETKzwrKzwrAin89SoBK3spPj0rAwpwrAHELUyZvwEtAacBLCYiDSYNwf8AegNoURcAAAAGAAAAAAgABkkAAwAHAAsAGwArADsAACUhNSEBITUhASE1IQERFAYjISImNRE0NjMhMhYZARQGIyEiJjURNDYzITIWGQEUBiMhIiY1ETQ2MyEyFgSSAtz9JP5JBJP7bQLcAbf+SQJJKx74kh4rKx4Hbh4rKx74kh4rKx4Hbh4rKx74kh4rKx4Hbh4rkpMBtpMBt5L7t/7bHisrHgElHisrAiv+2x4rLB0BJR4rKwIr/tseKywdASUeKysAAAEABv9uBkMFtwAVAAABFgcBERQHBiciJwEmNREBJjc2MyEyBkMTI/3NLQ8NHxX+3Bb9zSMTEzAFtzAFii8h/c38sDAUBgEVASUWHQIsAjMhLy0AAAQAAAAACAAG2wADABcAGwAvAAABITUhAREUBiMhIiY1ESEVFBYzITI2PQEjFSE1AREhETQ2MyE1NDYzITIWHQEhMhYC2wJK/bYFJWtM+W5LbAMAKx4Bbh4rbv7cBJL4AGtMAZJALgKSLkABkktsBbeS/JL93Etsa0wCJLYeLCwetpKSAiX+SQG3S2y3Lj9ALbdsAAABAAD/bgbbBkkARgAACQI3NhcWBxEUBiMhIiY/AQkBFxYHBichIiY1ETQ3Nh8BCQEHBiMiJyY1ETQ2MyEyFxYPAQkBJyY3NjMhMhYVERQHBiMiJwW6/msBlaUhLy0BKx7+ADAmI6T+a/5qpSMTEzH+AB4rLi0ipAGW/mqkFh4ODS4rHgIAMBQTI6UBlgGVpCMTEzACAB4rLA8OHhUEcf5q/mukIxMTMP4AHitaIqUBlv5qpSItLgErHgIAMBMTI6QBlQGWpBYGEzACAB4rLi0hpf5qAZalIiwuKx7+ADATBhYAAAAGAAD+2wiSBtsAEQAxADkAQQBTAFsAAAEGByMiJjUQMzIeATMyNwYVFAEUBiMhIiY1ND4FMzIeAjI+AjMyHgUAFAYiJjQ2MgAQACAAEAAgARQGKwEmJzYnNCcWMzI+ATMyAhQGIiY0NjICprl2mV6AjgdViURNSwYFJaeK/BmKpwgYJD5Qc0YLTFuZnJlbTAtGc1A+JRgI+22r8qys8gPQ/v/+lP7/AQEBbAOTgF2adrhdAQZLTUOKVgeNkqvzq6vzAtsGjF1ZAZMwMRoqIZ/8oomfn4k9c4ZybU0tMTwyMjwxLU1tcoZzBfDyrKzyq/3b/pT+/wEBAWwBAf1IWV2NBYafISoaMTABnvKsrPKrAAMAEv+AB1sGyQAhAEMAaQAAATQvASYjIgceBBUUBiMiLgMnBhUUHwEWNzI/ATYBNC8BJiMiDwEGFRQfARYzMjcuBDU0NjMyHgMXNgAQDwEGIyIvASY1NDcnBiciLwEmED8BNjMyHwEWFRQHFzYzMh8BBoAg7iAtMCMDJQ0WCEAuER0eDSQDJiDsHy4uIKgg/N0g7CAuLSCoICDtHy8wIgMlDBYIQC4RHR0OIwQmA/5hqF+Jil/rX2RkYoyJYO5gYahfiYpg619lZWKMiWDtAW4uH+4gJAMkDh4cES5ACBYMJQMjMC4g7R8BHacgA1IuIO0gH6cgLS4f7h8kAyMOHhwSLj8IFQ0lAyP9lP7uX6dfYe1fiY1iZGUBYO1gARNep19h7V+JjWFlZWDuAAEAAAAACJIGSQAbAAABFAAjISIANTQ2NyY1NAAzMgQXNjMyFhUUBx4BCJL+/7b7JdP+06KFAgFW87UBJUNQbnmsL5PAAbe2/v8BLdOX+j4gEfIBV8miR6x5Vkgi7wAAAAIAhP9uBuoGSQAXACEAACUWBiMhIiY3AREjIiY0NjMhMhYUBisBEQUBIQEnNREjERUG0UBPefrceU9AAj5JHissHQJJHiwsHkn+xf7JAy7+yReSZWaRkWYDigHIKzwrKzwr/jhO/hYB6iQqAcj+OCoAAAAABwAB/24IAAW3AAcATgBcAGoAeACGAIwAAAAyFhQGIiY0BQEWBwYPAQYjIicBBwYHFgcOAQcGIyInJjc+ATc2MzIXNj8BJyYnBgciJy4BJyY2NzYzMhceARcWBxYfAQE2NzIfARYXFgcFNiYnJiMiBwYWFxYXMgM+AScmIyIHDgEXFjMyARc1ND8BJwcOAQcOAQcTFwEnARUHFxYXHgEfAQE3AQcGBwQrPCsrPCsBoAJDIAMGIpIPEhMR/Ox+CQUQBAhwX5emm2NnDQhwXpenX00KD4yMDwpOXqeXXnAIBi8xYZ2ml19wCAURBQl+AxQQFBIPkiIGAyD6szU6XGlzVSw1Olxpc1Q0XTg0LVRyal05NS1UcwE0biUQWh4DEAYCBQH2bgNJkvyStwoCBgUQBB4D3JL9rssCDQLbKzssLDse/jkXKSgSSQgJAbpLBQE4N1ihPGBZYIxXozxgIw8KU1QKDyMBYD2iV0N8LVpgO6NYNzgBBEwBugkBCEoSKCkXnjCXO0MpMJc6QwH81jqXMClDOpcwKQMAQw0pFwk2HgMTBAIEAf72JQKSSf4UgW4JAgUFEgQe/pJJAdOeAwUAAAUAAP7bCAAG2wAfACIAJQAzADwAAAEyFhURFAYjISImNREhIiY1ETQ2NwE+ATMhMhYVETYzBwEhCQEhEwERIREUBiMhESERNDYBESERFAYjIREHki5AQC77ty5A/ZMuQC4gAdIgbi0B3C5ATkSS/qoBVv0k/qoBVuABaf5JQC3+JAJJLgRl/klALv4lBSVALvqSLkBALgFJQC4DAC5tIAHTIC1ALf6JLvT+qgMN/qr+cwFpAdv+JS5A/SUBJC5u/IkFJP4lLkD9JQAAAAEABf9yBkUGRQA/AAAlFAYjIicBJjU0NjMyFwEWFxQGIyInASYjIgYVFBcBFjMyNjU0JwEmJyIGFRQXARYXFAYjIicBJjU0NjMyFwEWBkW1hppy/IiB+7a1gwKzCwFGEg8M/UxadXmnVwN3SF1JYEj9aB4mISwdAdQLAUcSDgv+K0iCXmVFAphzrYa1cwN2g7O2/oL9TAsOEkYLArZYrHl4V/yISGBKXkcCmBsBLCElHv4rCw4SRwsB1UZkXoJI/WhvAAAEAAD/bgbbBkkAAwAhADEARQAAKQERIQEzETQmJwEuASMRFAYjISImNREjETMRNDYzITIWFQERNCYrASIGFREUFjsBMjYFERQGIyEiJjURNDYzITIWFwEeAQG3A278kgQAkhcL/r8LOBFALf1tLj+Tk0AtA7cuQP5JFg/bDxYWD9sPFgLbQC36AC5AQC4EJC5uIAFAIC0Bt/5JBAAQOAsBQgsX/iQuP0AtAdz6SQHbLkBALgJKAW0PFhYP/pMPFhYW+9suP0AtBgAuQC4g/sAgbQAAAAEAAP9uBtsGSQAPAAABERQGIyEiJjURNDYzITIWBtvBiPu3iMHBiARJiMEFAPu3iMHBiARJiMHBAAAAAAMAAAAABtsFtwAPAB8ALwAAJRUUBiMhIiY9ATQ2MyEyFhEVFAYjISImPQE0NjMhMhYRFRQGIyEiJj0BNDYzITIWBtsrHvm3HisrHgZJHisrHvm3HisrHgZJHisrHvm3HisrHgZJHivbkh4rKx6SHiwsAiyTHissHZMeKysCK5MeKywdkx4rKwAGAAD/twgABgAABwAPAB8AJwA3AEcAACQUBiImNDYyEhQGIiY0NjIBFRQGIyEiJj0BNDYzITIWABQGIiY0NjIBFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFgG3gLeAgLeAgLeAgLcGyRYP+pMPFhYPBW0PFvm3gLeAgLcGyRYP+pMPFhYPBW0PFhYP+pMPFhYPBW0PFu63gIC3gAHJt4CAt4D9SdsPFhYP2w8WFgRxt4CAt4D9SdsPFhYP2w8WFgI62w8WFg/bDxYWAAAAAAYAEf7bCAAG0QAeADwATABcAGwAfAAABRQGIyInNxYzMjY1NAcnPgI3NSIGIxUjNSEVBx4BExUhJjU0PgM1NCYjIgcnPgEzMhYVFA4CBzM1ARUUBiMhIiY9ATQ2MyEyFgEVITUzNDY9ASMGByc3MxEBFRQGIyEiJj0BNDYzITIWERUUBiMhIiY9ATQ2MyEyFgGzfF15S0E4QSExeB0JOCkWEksSeQF8bDpEA/5iBzZLTDUhHDUoYRttQlNzTl1PAZEGwhYP+pMPFhUQBW0PFvm3/oF6AQIJMFGbeQbFFg/6kw8WFRAFbQ8WFg/6kw8WFg8FbQ8WYFtqTGQzISBJCUALTS8VAQM8rmWDDlUCk7YpFTpgOzEzGh0eQkQ6QV9ROV81Ph1F/pPbDxYWD9sQFRYD9HFxL7kuDhMrV5H+Mv5G2w8WFg/bEBUWAjrbDxYWD9sPFhYAAAAAAwAA/24IAAZJAA8ANQBlAAABMhYdARQGIyEiJj0BNDYzJSYnJjU0NzYhMhcWFxYXFhUUDwEvASYnJiMiBwYXFBcWFxYXFhcBIRYVFAcGBwYHBgcGIyIvASYnJic1NCcmPwE1Nx4CFxYXFhcWMzI3Njc2NTQnJgfbEBUVEPhKEBUVEAIDIBo3mZgBKTmGS38LDRAFDmAQOT1li4JOTQFLS/RPd0Iq/vIB1ggvGjcqUltUW42CXaBBEQkBAgEBAnURIhIFKDQxR0NUSVVYNDZdJwLbFBBJEBUVEEkQFEooM29oz5KRFg4oK1yNRBUfAwcCqkBoQ0JlU01NRxc0IBv+2y08f3M/OCg1NxQYGi4SDgkQD3s3IiwqMgMnVSsJQSspGBkfHkRGTWBUIQAAAgAA/24G2wZJAGMAcwAAEyYvATYzMhcWMzI3NjMyNwcXFQYjIgcGFRQWFRsBFhcWFxYzMjc2NzY3Njc2NTQuAS8BJicmDwEnNzMXFjcXFgcUBwYHBgcGBxQWFRYTFgcGBwYHBgcGIyInJicmJyYnETQnJgE1NCYjISIGHQEUFjMhMjY3KgoDDx9FO5cmYl6FIkAjAgNFSUUVDwEBEAczKEZlZXdkQDE3EykUGAgRBwUGFScxcxADYOpXiRUHAQQzLVMHEQEECRAHGBEeK1VWen2mv4aIRUYYEgETHQYZFBD5bhAVFRAGkhAUBd0CAmUBBQgEBQMQSQsKHRCGDy0H/vv+wI5ZQyY2IBUlKSBAQ1OyWnGoYkNNGCgBAwRiCwMOAisPCBwOAQ0GER4ILgwW/lHffFc1SkJBJSY1NlVXiFu0AX3XHCr5uEkQFRUQSRAUFAAAAAoAAAAAB24GSQAPAB8ALwA/AE8AXwBvAH8AjwCfAAAlNTQmIyEiBh0BFBYzITI2ETU0JiMhIgYdARQWMyEyNgE1NCYjISIGHQEUFjMhMjYBNTQmIyEiBh0BFBYzITI2ATU0JiMhIgYdARQWMyEyNgE1NCYjISIGHQEUFjMhMjYBNTQmIyEiBh0BFBYzITI2ATU0JiMhIgYdARQWMyEyNhE1NCYjISIGHQEUFjMhMjYTERQGIyEiJjURNDYzITIWAkkUEP6SEBUVEAFuEBQUEP6SEBUVEAFuEBQCSRQQ/pIQFRUQAW4QFP23FBD+khAVFRABbhAUAkkUEP6SEBUVEAFuEBQCSRQQ/pIQFBQQAW4QFP23FBD+khAVFRABbhAUAkkUEP6SEBQUEAFuEBQUEP6SEBQUEAFuEBSTbEv6AEtsa0wGAEtst9sQFRUQ2xAVFQHH2xAVFRDbEBUV/lnbEBUVENsQFRUDftsQFRUQ2xAVFf5Z2xAVFRDbEBUV/lnbEBUVENsQFRUDftsQFRUQ2xAVFf5Z2xAVFRDbEBUVAcfbEBUVENsQFRUBffslS2xrTATbS2xsAAAABgAe/4wHbgbbAAMAEwAbACMAKwAzAAAJAScBJBQHAQYmLwEmNjcBNjIfASUXDwEvAT8BARcPAS8BPwEBFw8BLwE/AQEXDwEvAT8BBVABT3r+sQJ5FfpDFT4U4xUBFAW+FT0V4voNcHAiI3BwIwGy4OBFRODgRARscHAjInBwIv1HcHAiInBwIgRDAU97/rHzPhT6QhUBFOIVPhQFvhUV4qUiInBwIiJw/tdEReDgRUTg/P4iI3BwIyJwAmsiInBwIiJwAAQASf9uCAAFtwAHABAAGABNAAAkNCYiBhQWMgEhESMiDwEGFQA0JiIGFBYyAREUDgQmIxQGIiY1IRQGIiY1IyIGLgQ1NDYzETQmPgM/AT4BOwE1NDYzITIWAttWd1dXd/6gAba0DwrfCgW2VndXV3cBewkWECYNLQOs8qv+Sazyq0oDLQ0mEBYJLB0BAQUKFg/iFkgftiweBJIeK1d3V1d3VwLbASUK3woP/Vl3V1d3VwVu+20RGhAKBAEBeaureXmrq3kBAQQKEBoRHiwBbQk+GTYfJw/iFh3cHisrAAAAAQAA/24G2wZJAEoAAAAQAgQjIic2NzY3HgEzMjYSNTQmJCMiDgMVFBYXFjc+ATc2JyY1NDYzMhYVFAIjIiY3PgI1NCYjIgYVFBcDBhcmABE0EiQgBAbb6/5t7396QxYKMxd5Roradoj+/qJ40JFoMVtYIgkCDgMHFDrvwa3BnXpGVRAJKxo+OUdiHXETBOv+3esBlAHeAZMDyv4j/mzrJGpSJ8otQZ0BEquC5ZBCbo+ZTHe1JA4lCDYHGhdGZ634vJbC/vBkRSiGZiM5TINhUzj+IlB6aAGyAQrvAZTr6wABAAD/bgbbBkkATAAAATIWFREUBiMhNjc2Nx4BMzIAETQuAiMiDgMVFBYXFjY3Njc2JyY1NDYzMhYVFAIjIiY3PgI1NCYjIgYVFBcDBhcjIiY1ETQ2MwWSiMHBiPzEYRoKMxh4RM8BBlCN0Hl3z45nMVpYDxgECwYHEznsv6q/mnlFVBAJKhk8OEZhG3AbE9GIwcGIBknBiPu3iMGLZSfILUABUQECYLSKVEJtjZhLdbIlBgwQMhQaFkdkq/S5lMD+82NFJ4VkIzhKgV9SOP4ncrDBiARJiMEAAAAAAwAA/24G2wZJABsAJwA3AAABNCchFTMOAyMiJjQ2MzIXNyYjIgIQADMyNiUzNSM1IxUjFTMVMwERFAYjISImNRE0NjMhMhYEGAf+YvgDHzdhPnGgoHFpRnd7q7f/AQC2vegBin19fX5+fQE5wYj7t4jBwYgESYjBAtEeK5cbOz4oouWiQ3Ny/v/+lf7/74l9fn59fgLh+7eIwcGIBEmIwcEAAAACAAD/lgpJBiEAIwAvAAABFAIEIyIkJgIQEjYkMyAXByYnIg4BEB4BMzI+AzchESEWJRUjFSM1IzUzNTMVBmrH/pDtqv7J4IWF4AE2qwFH6uSGx43vi4vvjV+eZ00jB/4lAxcNA9/v8O/v8ALI7v6N0YTgATcBVQE34ITb24EBjvT+4POONU9kWSgBIEhI8O7u8O/vAAAAAAQAAAAACJIFtwAMABwALAA8AAABITUjESMHFzY3MxEjABQOAiIuAjQ+AjIeAQERIiY1IRQGIxEyFhUhNDYBERQGIyEiJjURNDYzITIWA24Bt5OCqVgwDwKSAkkwWJCskFgwMFiQrJBYAnl5rPrcrHl5rAUkrAELKx74AB4rKx4IAB4rAbduAgCdWyoX/rcBBqCkjllZjqSgpY5ZWY795wJJq3p5rP23rHl5rAO3+tseKyseBSUeKysAAAAAAQAAAW0EkgQAAA0AAAAUBwEGJicBJjQ2MyEyBJIV/gAWPBX+ABYrHgQAHgPVPBb+ABYBFQIAFjwrAAAAAQAAASUEkgO3AA0AAAAUBiMhIiY0NwE2MhcBBJIrHvwAHisWAgAWOxYCAAGLOysrOxYCABYW/gAAAAAAAQBJAJIC2wUlAA0AAAERFAYiJwEmNDcBNjIWAtsrOxb+ABYWAgAWOysE2/wAHisWAgAWOxYCABYsAAAAAQAAAJICkgUlAA0AAAAUBwEGIiY1ETQ2MhcBApIV/gAWPCsrPBYCAAL5Oxb+ABYsHQQAHiwW/gAAAAAAAwAA/24HbgZJAAYADQAdAAAzIREhERQWJREhESEyNhMRFAYjISImNRE0NjMhMha3Arf9JBYGM/0lArcPFZNsS/oAS2xrTAYAS2wFJfsADxYlBQD62xYFfPqTS2xrTAVtS2xsAAIAAP+3BJIGAAANABsAAAAUBwEGIicBJjQ2MyEyEhQGIyEiJjQ3ATYyFwEEkhX+ABY8Ff4AFiseBAAeKyse/AAeKxYCABY7FgIAAh48Ff4AFhYCABY7KwGMPCsrPBUCABYW/gAAAAAAAQAA/7cEkgJJAA0AAAAUBwEGIicBJjQ2MyEyBJIV/gAWPBX+ABYrHgQAHgIePBX+ABYWAgAWOysAAAAAAQAAA24EkgYAAA0AAAAUBiMhIiY0NwE2MhcBBJIrHvwAHisWAgAWOxYCAAPVPCsrPBUCABYW/gAAAAAAAgAA/24IAAW3ABoAOgAAAREUBiMhIiY1ERYXABceAjsCMj4BNzYlNhMUBgcABw4EKwIiLgMnJgAnLgE1NDYzITIWCABrTPluS2wyQQGemkFShzoBATqHUULCAXdBMXBT/lJpC0sxRj4aAQEaPkYxSgxo/nkmR35fWAaSSm0DsPx1S2xrTAOLOCv+53IwNTg4NTCN/iwBh1qlOv7WSgg1ISoUFCohNQhJAQ8cMKhIWXdsAAAAAwAA/6UG2wYyAAMADwArAAABESERARYGKwEiJjU0NjIWAREhETQmIyIGBwYXESESEC8BIRUjPgMzMhIBj/6HAZEBdmACXnJ2vXMFNf6IXGJIYhgNAf6IAgEBAXgCFy9SdUjD7gQR+5QEbAFeU3FwVFVubvxq/XcCXXiITzoiOv2IAcgCNjc3pCU2QCP+/QAAAQAA/24G2wZJADQAAAAQAgYEIyIkJyY2PwE2MxYXHgEzMj4CNC4CIyIGBxcWBwYnISImNRE0NzYfATYkMzIEFgbbi+v+u7LF/p59CAEKnAsSEghT84h32J1dXZ3Yd3DOUJ0jExMx/gAeKy4tIpR6ATuosgFF6wOO/pv+vOyLpZcLHQmeCgILbXddntjt2J5dUkueIi0uASseAgAwExMjk3N/i+wAAAAAAQAu/vMH6AauAHEAACEUDwEGByInASYnNDcBBwYiJx4GFRQHDgUjIicBJjU0PgQ3NjMyHgUXJjQ3ATYyFy4GNTQ3PgUzMhcBFhUUDgQHBiMiLgUnFhQPAQE2MzIXARYH6Cp7LTs9Kf5hKwEx/tyQEC4QAhgFEgUJAyADHwweFR0PLiD+LiAKChkNIgQiKwsTFAsTBxcCEBABjhAuEAIYBRIFCQMgAx8MHhUdDy4gAdIgCgoZDSIEIisLExQLEwcXAhAQkAEkMT07LQGfKj0qeyoBKwGgKT49MAElkBAQAhcHFAsTEwsrIwMjDBkLCiAB0iAuDx4UHg0eBCAECQQTBBgCEC0QAY4QEAIXBxMMExMLKyMDIg0ZCgsg/i0gLQ8eFB4NHwMgAwoEEgUYAhAtEJD+2zEq/mEtAAAAAAcAAP9uCAAFtwAHAA8AIQApADEAOQBLAAAANCYiBhQWMgA0JiIGFBYyARM2LgEGBwMOAQcGHgE2NzYmJDQmIgYUFjIANCYiBhQWMgQ0JiIGFBYyARAHBiMhIicmETQSACQgBAASAbdWeVZWeQExVXpVVXoCPnQHHzk1CHNFaxMXXLCeFxIzArpWeVZWef16VXpVVXoCVVV6VVV6AcOhFij5vigWoaIBEwF7AaABewETogF6eVZWeVUCVXlWVnlV/mwBtR4zEB8e/kwGWEVYnS5bWEWCEHlWVnlVAzF5VlZ5VoZ5VlZ5Vf6S/tb+ISH9ASvQAXsBE6Ki/u3+hQAAAAACAAD+2wgABbcAFgA8AAAAIAQCFRQWHwEHBgc2PwEXFjMyJBIQAgQQAAQhIicGBQYHIyImJzUmNiY+Ajc+BTcmAjU0ACQgBATp/i7+au+klGQfGzWujDFBT0bpAZbv7wGB/u7+Kf7pUFbi/tU4SwURHAUDBgELAg4CCDcYLxsjDLPPARIB1wIuAdcFJZ/+8p2A6FQ5bmhdSHwrBwmfAQ4BOQEO5P5z/q7DCchMEAoYFAEFEgQSAxACCT0aQDVSLmYBK6vHAVHExAAAAAADAAD/bggABbcAFAA6AGQAAAAgBAYVFBYfAQc2PwEXFjMyJDY0JgAgBBIQAgQjIicGBwYHIyImJyY0PgU3PgQ3LgE1NBIBHgQXHgYUBw4BJyYnJicGIyAnFjMyJDc2EjU0Jx4BFRQGA9P+o/7QtHlubygnIDI9WVavAS+0tP1HAbUBc9fX/o3aYmiOryk6Aw0VAwEBBAIGAwcBBikSIhgLjqLXBfkLGCISKQYBBwMGAgQBAQMYDTkqsI1nY/7K5UIjuAFShI+ZGpOsogUld8x0Xq5AQGAXFiMLEHfL6cwBCZ3+8/7C/vKcEmUtCgkTDgMJBwcECAQIAQcrGCouG1LxiJ8BDftlGy4rGCsHAQgDCAUHBwgDEBIBCAouZBKXBWdgaQETmVhVUfSNie8AAAAAAQAB/tsD+wZJACEAAAEWBwEGIyInLgE3EwUGIyInJjcTPgEzITIWFRQHAyU2NzID8xUN/ZcPIQULExQF4f4wBQkVDhUG5gUbEgF3Fh0FxAHFCQUVBFUXHPrWHQMGHxMDm3MBDBEcA68QFBwUCQv97nACAQABAAD/bggABkkAVQAAAREUBiMhIiY1ETQ2OwE1IRUzMhYVERQGIyEiJjURNDY7ATUhFTMyFhURFAYjISImNRE0NjsBNTQ2MyE1IyImNRE0NjMhMhYVERQGKwEVITIWHQEzMhYIAEAu/pMuQEAubf23bi5AQC7+ki5AQC5u/bdtLkBALv6TLkBALm1XPAJJbi5AQC4Bbi5AQC5uAkk7WG0uQAFJ/pIuP0AtAW4uQNvbQC7+ki4/QC0Bbi5A29tALv6SLj9ALQFuLkDbO1jbQC4BbS5AQC7+ky5A21c820AAAAMAAP9uB24GkgATAE8AWQAAAREUBiImNTQ2MhYVFBYyNjURNjIFFAYjIicuASMiBgcOAQcGByInLgEnLgEiBgcOAQcGByInLgEnLgEjIgYHBiMiJjU0NzYAJDMyDAESFxYBFSYiBzU0NjIWBACu7a4rPCtZc1kmRgOUFg8NDThlQk6JMQgYBQ0TFQwFFwgxiJyIMQgYBQ0UEw0FFwgxik1CZTgODA8WATMBJAGG2aABMwEAvSYB/JIwMjArPCsDKf1pd62tdx4rKx45WVk5ApcNLA8VCzU0VEULKQcTARQHKQtFVFRFCykHEwEUBykLRVQ0NQsVDwYC0QE4nFyo/v2eAgM5cAICcB4rKwAEAAD+2wgABtsACAAYABsANwAABSERISImNREhATU0JiMhIgYdARQWMyEyNgEhCQERFAYjISImPQEhIiY1ETQ2MyEyFhURFhcBHgEDbgQA/iQuP/5JASQVD/zbDxUVDwMlDxUBJQFW/qoCSUAu+7cuQP2TLkBALgTbLkAYEQHSIC6SAttALgHbAUlKDxUWDkoPFRX9DwFW/hj9AC5AQC63QC4GAC4/QC3+iQ8R/i4gbgAAAAADAAD/bgSSBkkAEAAoAFwAAAEUBiImNTQmIyImNDYzMh4BFzQuAiIOAhUUFx4BFxYXITY3PgE3NjcUBw4CBxYHFAcWBxQHFhUUBiMOASImJyImNTQ3JjU0NyY1NDcuAicmNTQ+AjIeAgNJFh0WezwPFRUPOXFWt09/mp6af09OCy8Mkg8BBA+TCy8LTpJ1M0RFBDYBHB0BMw9INRdbbFsXNUcOMx0dNgVERDN2ZqXS2dGmZQRJDxUVDzU5Fh0WJVc7Uo5aNDRajlJzWw0xDa+mpq8NMgxbc7GBOFeDOiA9Kh8fKzshGhw1OTI7OzI6NBsbITsqIB8qPh85hFc4gbFxxIFKSoHEAAACAAD/kggABZIAGQAzAAABFRQGIyEVFAYjIicBJjQ3ATYzMhYdASEyFhAUBwEGIyImPQEhIiY9ATQ2MyE1NDYzMhcBCAAWD/ncFg8ODf6TCgoBbgoQDxYGJA8WCv6SChAPFvncDxYWDwYkFRAODQFtAZLbDxbbDxYMAW0KIAoBbgoWD9sWAm8gCv6SChUP3BUP3A8V3BAUC/6TAAACAAAAAAiSBkkAGQA1AAABNCYjIRE0JisBIgYVESEiBhUUFwEWMjcBNgUUACMhIgA1NDY3JjU0ADMyBBc2MzIWFRQHHgEFtxUQ/wAVD9wPFf8ADxYKAZMKIAoBkQwC2/7/tvsl0/7ToIcCAVbzsgEoQ1Fteawvlb4CtxAUAZMPFRUP/m0VDxAK/m0KCgGRDvK2/v8BLdOV+z8iD/IBV8ekR6x5V0cj7wACAAAAAAiSBkkAGQA1AAABNCcBJiIHAQYHFBYzIREUFjsBMjY1ESEyNgEUACMhIgA1NDY3JjU0ADMyBBc2MzIWFRQHHgEFtwr+bQogCv5vCwEVEAEAFQ/cDxUBAA8WAtv+/7b7JdP+06CHAgFW87IBKENRbXmsL5W+AwAQCgGTCgr+bg4NEBX+bg8VFQ8Bkhb+xrb+/wEt05X7PyIP8gFXx6RHrHlXRyPvAAAAAwAA/24GSQZJAAcAWABgAAAkFAYiJjQ2MgUUBiMhIiY1ND4DNwYdAQ4BFRQWMjY1NCYnNTQ3FiA3FgcVIgYdAQYVFBYyNjU0JzU0NjIWHQEGFRQWMjY1NCc1NCYnNDYuAiceBAAQACAAEAAgAbcsOysrOwS+p4r8GYqnDSpCd04ZQlGAt4BRQRyXAXWXHQF5qyVAXEAlV3dXJUBbQCRPQwEBBQsKTndCKwz+kv7//pX+/wEBAWv5OywsOyyPip6di06PrINoETtO6BdyRluAgFtGchfoRyR3dyNISat5ZiEwLkBALjAhZjtXVztmITAuQEAuMCFmTocnC0sjPDAVEWiDrI8EZP6V/v4BAgFrAQEAAAAAAgAA/24GSQZJAAcATQAAADQmIgYUFjI3FAYHERQAIAA9AS4BNRE0NjMyFz4BMzIWFAYjIicRFBYgNjURBiciJjQ2MzIWFzYzMhYVERQGBxUUFiA2NREuATU0NjIWBbcsOysrO75RQf7T/ln+1Lv8Kx4HCxNFKD1WVj0mI9cBLtcjJj1WVj0oRBQLBx4r+7zXAS7XQVKAt4ADmTwrKzwrSUdwGP49tv7/AQG2lhf3pQJJHisCIilWeVUU/jV5rKx5AcsVAVV5VikiAise/bel9xeWeayregHDGHBHW4CAAAAEAAD/bggABkkAAwANABsAJQAAASE1IQURIyImNRE0NjMhESERMzU0NjMhMhYdAQERFAYrAREzMhYC2wJK/bb+bklpl5dpBUn7bpJALgKSLkACSZdpSUlplwUlkpL6SZdpA7dpl/pJBbe2LkBALrb/APxJaZcFt5cAAAAAAgBJ/tsHtwbbAAsAMwAABDQjIiY1NCIVFBYzARQGIyEUBiImNSEiJjU+AxI1NAA3JjU0NjIWFRQHFgAVFBIeAgQSEkNiJHZTA7dXO/4ArPKs/gA7VzleZUUtAQvZCUBcQAnZAQstRWVeySRiQxISU3YBWztXeayseVc7MGmowwEUn64BKiAWFy4/QC0XFiD+1q6f/uzDqGkAAAAAAwAA/24ISQW3AAcADwAiAAAANCYrAREzMgEhFAYjISImABAAKwEVFAYjISImNRE0NjMhMgdugFxJSVv5EwgAq3r6SnmsCEn+/7ZJl2n83GmXKx4FJLYDpbaA/kr9bXmrqwSd/pT+/yRpl5ZqA0keKwAAAAACAAD+2wZJBtsALQBCAAABERQGBxEUBisBIiY1ES4BNRE0NjIWFREUFjI2NRE0NjIWFREUFjI2NRE0NjIWBREUBisBIiY1ESEiJjURNDYzITIWAttRQVc7kjtYQVErPCssOywrOywrPCssOysDblc7kjtY/wAPFdeWASUeKwaS/SVGchf8hjtYVzwDehdyRgLbHisrHv4lHisrHgHbHisrHv4lHisrHgHbHisrHvjcO1hXPAJJFg4Dk5fWKwAAAAAGAAD+2wbbBtsAEwAaACMAMwBDAFMAAAEeARURFAYjISImNRE0NjMhMhYXBxEhJicBJgERISImNREhEQE0NjMhMhYdARQGIyEiJjUFMhYdARQGIyEiJj0BNDYzATIWHQEUBiMhIiY9ATQ2MwaOIC1ALfoALkBALgQALm0glwGuCw7+mg4Blv4lLkD8kgElFBADJRAVFRD82xAUA0kQFRUQ/NsQFBQQAyUQFRUQ/NsQFBQQBSkgbi362y5AQC4HJS4/LSBO/lIhDgFmDvk5BJJALgHb+SUD2xAVFRBJEBUVELcUEEoQFBQQShAU/twVEEkQFRUQSRAVABQAAP7bBkkG2wAPAB8ALwA/AE8AXwBvAH8AjwCfAK8AvwDPAN8A7wD/AQ8BHwEtAT0AAAEVFAYrASImPQE0NjsBMhYRFRQGKwEiJj0BNDY7ATIWBRUUBisBIiY9ATQ2OwEyFgEVFAYrASImPQE0NjsBMhYBFRQGKwEiJj0BNDY7ATIWARUUBisBIiY9ATQ2OwEyFgEVFAYrASImPQE0NjsBMhYBFRQGKwEiJj0BNDY7ATIWARUUBisBIiY9ATQ2OwEyFgEVFAYrASImPQE0NjsBMhYBFRQGKwEiJj0BNDY7ATIWARUUBisBIiY9ATQ2OwEyFgEVFAYrASImPQE0NjsBMhYBFRQGKwEiJj0BNDY7ATIWARUUBisBIiY9ATQ2OwEyFgEVFAYrASImPQE0NjsBMhYBFRQGKwEiJj0BNDY7ATIWBRUUBisBIiY9ATQ2OwEyFgEhESERIRE0NjMhMhYVAREUBiMhIiY1ETQ2MyEyFgG3Fg9JDxUVD0kPFhYPSQ8VFQ9JDxYBJBUPSQ8WFg9JDxX+3BYPSQ8VFQ9JDxYDbhYPSQ8WFg9JDxb+2xYPSQ8VFQ9JDxb+2xUPSQ8WFg9JDxX+3BYPSQ8VFQ9JDxYDbhYPSQ8WFg9JDxb+2xYPSQ8VFQ9JDxb+2xUPSQ8WFg9JDxX+3BYPSQ8VFQ9JDxYDbhYPSQ8WFg9JDxb+2xYPSQ8VFQ9JDxb+2xUPSQ8WFg9JDxUCShYPSQ8WFg9JDxb+2xYPSQ8VFQ9JDxYBJRYPSQ8WFg9JDxb+2wG3+tsBtxYPAW0PFgJJKx76SR4rKx4Ftx4rAQBJDxYWD0kPFhYBFkoPFRYOSg8VFQ9KDxUWDkoPFRUBFUkPFhYPSQ8WFv2oSQ8WFg9JDxYWARZKDxUWDkoPFRUBFUkPFhYPSQ8WFgEWSQ8WFg9JDxUV/ahKDxUWDkoPFRUBFUkPFhYPSQ8WFgEWSQ8WFg9JDxUVARVJDxUVD0kPFhb9qEkPFhYPSQ8WFgEWSQ8WFg9JDxUVARVJDxUVD0kPFhb+zUkPFhYPSQ8VFQEVSQ8VFQ9JDxYWD0kPFRUPSQ8WFvnNBtv5JQEADxUVDwYk+JMeLCweB20eKysAAAAADQAA/tsGSQbbAA8AHwAvAD8ATwBfAG8AfwCPAJ8AtwDbAPUAAAEVFAYrASImPQE0NjsBMhYRFRQGKwEiJj0BNDY7ATIWBRUUBisBIiY9ATQ2OwEyFgEVFAYrASImPQE0NjsBMhYBFRQGKwEiJj0BNDY7ATIWARUUBisBIiY9ATQ2OwEyFgEVFAYrASImPQE0NjsBMhYBFRQGKwEiJj0BNDY7ATIWARUUBisBIiY9ATQ2OwEyFgUVFAYrASImPQE0NjsBMhYBIREhFRQGIyEiJj0BIREhETQ2MyEyFhUZATQmKwEiBh0BIzU0JisBIgYVERQWOwEyNj0BMxUUFjsBMjYlERQGIyEiJjURNDYzIRE0NjMhMhYVESEyFgG3Fg9JDxUVD0kPFhYPSQ8VFQ9JDxYBJBUPSQ8WFg9JDxX+3BYPSQ8VFQ9JDxYDbhYPSQ8WFg9JDxb+2xYPSQ8VFQ9JDxb+2xUPSQ8WFg9JDxUCShYPSQ8WFg9JDxb+2xYPSQ8VFQ9JDxYBJRYPSQ8WFg9JDxb+2wG3/ttALf4ALkD+2wG3Fg8BbQ8WFg9JDxWTFQ9JDxYWD0kPFZMVD0kPFgJJKx76SR4rKx4BbkAuAgAuPwFuHisBAEkPFhYPSQ8WFgEWSg8VFg5KDxUVD0oPFRYOSg8VFQEVSQ8WFg9JDxYW/ahJDxYWD0kPFhYBFkoPFRYOSg8VFQEVSQ8WFg9JDxYW/s1KDxUWDkoPFRUBFUkPFhYPSQ8WFg9JDxYWD0kPFhb8FgUkJC5AQC4k+twBAA8VFQ8ESQFuDxUWDm5uDxUWDv6SDxYWD25uDxYWM/pKHiwsHgW2HiwBSS4/QC3+tywAAAUASf9uCJIGSQAHABAAGAA8AGMAACQ0JiIGFBYyASERIwYPAQYHADQmIgYUFjITNTQmIyERNCYrASIGFREhIgYdARQWMyERFBY7ATI2NREhMjYBERQGKwEUBiImNSEUBiImNSMiJjQ2MxE0Nj8BPgE7ARE0NjMhMhYC21V5VlZ5/p8BtrQQCd8IAgW2VXlWVnnoFRD/ABQQ3BAU/wAQFRUQAQAUENwQFAEAEBUBJCse26zyq/5JrPKrkx4rLB0eFuIWSR62LB4FJB4rVnlWVnlWAtsBJQII3w4L/Vh5VlZ5VgOS3BAUAQAQFRUQ/wAUENwQFP8AEBUVEAEAFAJ++tseK3mrq3l5q6t5LDssAdseSRbiFh0Bbh4rKwAABQAA/24IAAZJACMAJwAxAD8ASQAAATU0JiMhETQmKwEiBhURISIGHQEUFjMhERQWOwEyNjURITI2ASE1IQURIyImNRE0NjMhESERMzU0NjMhMhYdAQERFAYrAREzMhYFtxUQ/wAUENwQFP8AEBUVEAEAFBDcEBQBABAV/SQCSv22/kolaZeXaQVu+yS3QC4Cki5AAkmXaSUlaZcB29wQFAEAEBUVEP8AFBDcEBT/ABAVFRABABQDWpKS+kmXaQO3aZf6SQW3ti5AQC62/wD8SWmXBbeXAAAAAQAAAAAIkgUlADoAAAEGDQIjATMyFhQGKwM1MxEjAyMnNTM1MzUnNTc1IzUjNTczEzMRIzU7AjIWFAYrAQEzDQEEFzAIkgH+uP5u/wBJ/rFPHissHW63SUm3224kJJLb25IkJG7bt0lJt24eKywdTwFPSQEAAZIBKh4CkiVIJUn+bgsQCiUB2/8AJdslCRuSHAkl2yX/AAHbJQsQCv5uSSVCKAACAEkAAAduBkkABgAYAAABESERFBYzARUhNTcjIgA1ESc3ITchFwcRAtv+3FY8BSX625KStv7/SSUCJCUESSVKAtsBt/7cPVb+ANvb3AEBtgFtSpKS2yX8bgAAAAIAAP9uBtsGSQAjADMAACURNCYrASIGFREhETQmKwEiBhURFBY7ATI2NREhERQWOwEyNgERFAYjISImNRE0NjMhMhYFtywdkx4r/bcrHpIeKysekh4rAkksHZMeKwEkwYj7t4jBwYgESYjB2wQAHiwsHv6TAW0eLCwe/AAeKywdAW7+kh4rKwRD+7eIwcGIBEmIwcEAAAAAAgAA/24G2wZJACMAMwAAATU0JiMhETQmKwEiBhURISIGHQEUFjMhERQWOwEyNjURITI2AREUBiMhIiY1ETQ2MyEyFgW3LB3+kisekh4s/pMeKyseAW0sHpIeKwFuHisBJMGI+7eIwcGIBEmIwQKSkx4rAW0eLCwe/pMsHZMeK/6SHissHQFuKwKM+7eIwcGIBEmIwcEAAAACADMAWASDBM0AFAApAAAkFA8BBiInAS4BNwE+AR8BHgEHCQEEFA8BBiInAS4BNwE+AR8BFhQHCQECzQw5Cx4M/ewLAQwCFAsfCzkLAQz+PwHBAcILOQseDP3sCwEMAhQLHgw5Cwv+PwHBxh4LOgsLAhULHgwCFAsBDDkLHgz+P/4/Cx4LOgsLAhULHgwCFAsBDDkLHgz+P/4/AAACAA8AWARfBM0AFAApAAAAFAcBBiIvASY0NwkBJjQ/AT4BFwEEFAcBBiIvASY0NwkBJjQ/AT4BFwECqAv96wseDDkLCwHB/j8LCzkLHwsCFQHCDP3sCx4MOQsLAcH+PwsLOQseDAIUAqEeC/3rCws6Cx4LAcEBwQsfCzkLAQz97AweC/3rCws6Cx4LAcEBwQsfCzkLAQz97AAAAAACAFgAoQTNBPEAFAApAAAAFA8BDgEnCQEOAS8BJjQ3ATYyFwESFA8BBiInCQEGIi8BJjQ3ATYyFwEEzQw5Cx4M/j/+PwseCzoLCwIVCx4MAhQMDDkLHgz+P/4/Cx4LOgsLAhULHgwCFAEPHgs5CwEMAcH+PwsBDDkLHgsCFQsL/esBrB4LOgsLAcL+PgsLOgseCwIVCwv96wAAAAACAFgAxgTNBRYAFAApAAAAFAcBBiInASY0PwE+ARcJAT4BHwESFAcBBiInASY0PwE+ARcJAT4BHwEEzQz97AsfC/3rCws6Cx4LAcEBwQsfCzkMDP3sCx8L/esLCzoLHgsBwQHBCx8LOQMPHgv96wsLAhULHgs5CwEM/j8BwQsBDDkBrB4L/esLCwIVCx4LOQsBDP4/AcELAQw5AAABADMAWALNBM0AFAAAABQHCQEeAQ8BBiInAS4BNwE+AR8BAs0M/j8BwQsBDDkLHgz97AsBDAIUCx8LOQR9Hgz+P/4/Cx4LOgsLAhULHgwCFAsBDDkAAAAAAQAPAFgCqATNABQAAAAUBwEGIi8BJjQ3CQEmND8BPgEXAQKoC/3rCx4MOQsLAcH+PwsLOQsfCwIVAqEeC/3rCws6Cx4LAcEBwQsfCzkLAQz97AAAAQBYATMEzQPNABQAAAAUDwEOAScJAQ4BLwEmNDcBPgEXAQTNDDkLHgz+P/4/Cx4LOgsLAhULHgwCFAGhHgs5CwEMAcH+PwsBDDkLHgwCFAsBDP3sAAAAAAEAWAFYBM0D8QAUAAAAFAcBBiInASY0PwE2MhcJATYyHwEEzQz97AsfC/3rCws6Cx4LAcEBwQsfCzkDoR4L/esLCwIVCx4MOQsL/j8BwQsLOQAAAAIAAP9uCJIG2wAPAC8AAAERNCYjISIGFREUFjMhMjYTERQGIyEUHgEVFAYjISImNTQ+ATUhIiY1ETQ2MyEyFggAFg/43A8WFg8HJA8WkmtM/ZMkJSwd/bceLCUl/ZJLbGtMByRLbAJuA7cPFRYO/EkPFhYDxvskS2wqXUUPHisrHhBEXCtsSwTcS2trAAAAAAQAAAAACJIFtwAPAB8AKwAzAAABIiY1ETQ2MyEyFhURFAYjAREUFjMhMjY1ETQmIyEiBgEzFRQGIyEiJj0BMwUyNCsBIgYzAdtLa2tLBNxLbGxL+wAWDgTcDxUVD/skDxUGJLdrTPjcS2y3A+4SErcSARMBJWtLAyVLbGxL/NtLawPb/NsPFRYOAyUPFhb7zG0uQEAubW0kJAAAAAMAAAAABSUGSQAHABcAJwAAJDQmIgYUFjIBETQmIyEiBhURFBYzITI2ExEUBiMhIiY1ETQ2MyEyFgLbKzssLDsB4hUP/EkPFhYPA7cPFZNsS/xJS2xrTAO3S2x1OysrOywBAARJDxYWD/u3DxUVBFj7JUtsa0wE20tsbAAEAAAAAANuBbcABwAXAB8ALwAAJDQmIgYUFjIBETQmIyEiBhURFBYzITI2AjQrASIUOwElERQGIyEiJjURNDYzITIWAhI1TDY2TAEjFg/9tw8VFQ8CSQ8W2xO3EhK3AVxXPP23O1dXOwJJO1htSzY2SzYBEgMlDxUVD/zbDxUVA8YlJSX7bTtXVzsEkztXVwACAAD/bgbbBkkACwAXAAAAIAQCEBIEICQSEAIEEAIEICQCEBIkIAQEF/6u/uKnpwEeAVIBHqamAabr/m3+Iv5s6+sBlAHeAZMFSaf+4/6t/uOnpwEdAVMBHdj+I/5s6+sBlAHdAZTr6wAAAAACAAAAAAduBkkAIQBDAAABERQGIyEiJjURND4COwEyFh0BFAYrASIGHQEUFjMhMhYFERQGIyEiJjURND4COwEyFh0BFAYrASIGHQEUFjMhMhYDboBc/klbgF2d2HdJHisrHkl5q0AtAQBbgQQAgFz+SVuAXZ3Yd0keKyseSXmrQC0BAFuBApL+SVuAgFsDJXfYnlwrHpIeK6x5JS4/gVv+SVuAgFsDJXfYnlwrHpIeK6x5JS4/gQAAAgAAAAAHbgZJACEAQwAAAREUDgIrASImPQE0NjsBMjY9ATQmIyEiJjURNDYzITIWBREUDgIrASImPQE0NjsBMjY9ATQmIyEiJjURNDYzITIWA25dnth2Sh4rLB1KeatALv8AW4CAWwG3W4EEAF2e2HZKHissHUp5q0Au/wBbgIBbAbdbgQVu/Nt32J1dKx6SHiyreSUuP4BcAbdbgIBb/Nt32J1dKx6SHiyreSUuP4BcAbdbgIAAAAgASf8lB7cG2wAJABEAGQAjACsAMwA7AEcAACQUBiMiJjU0NjIAFAYiJjQ2MgAUBiImNDYyARQGIyImNDYyFgAUBiImNDYyABQGIiY0NjIAFAYiJjQ2MgEUBiMiJjU0NjMyFgJZVjw7V1V5Ao9VelVVev0xVnlWVnkFs1Y8PVVWeVX7s2yXa2uXBaVWeVZWef16gLaAgLYC3pdpapaWammX33lWVzs9Vv6+eVVVeVYCz3lWVnlW/TQ7V1Z5VlYEgZdra5dr/U15VlZ5VgLttoCAtoD+OmqWlWtpl5cAAAAAAQAA/24G2wZJAAsAAAAQAgQgJAIQEiQgBAbb6/5t/iL+bOvrAZQB3gGTA8r+I/5s6+sBlAHdAZTr6wAAAQAA/24IAAaTACwAAAEUAw4CBwYjIiY1NDY1Nic0LgUjIREUBiInASY0NwE2HgEVESEgExYIAJEDEg0IDhIRFAYGAShGcIKusnD/ACs7Fv23FhYCSRY7KwEAAy+5PQHbvv67CCceChMXEQooB04+c7iFYj0kDf7cHisVAkoWOxUCShYBKx7+3P4zmgAEAAD/bgduBbcACwAXADEAWAAAABQOASIuATQ+ATIWBBQOASIuATQ+ATIWFzQmIyIHBiInJiMiBhUUHgM7ATI+AwEUBw4EIyIuBCcmNRA3Jjc0NzIWFzYzMhc+ATMWFRQHFgLbHEZgRhwcRmBGAvgdRWBGHR1GYEXUnocvsFHEUq4wh55JcKeZXsBemadwSQEARiubqNysaVmSv56beSZHmx8BOnu8eqi5qZd4vHo6H5wBm1tgTk5gW2BOTmBbYE5OYFtgTk6NicAYDQ0YwIllllU0EBA0VZYBLu2NWIBFKAoHFS9HckuN7QEPtV5lhXRaYCglXll1hGNdtwACAAAAAAduBkkAFwAsAAABETQmIyEiJj0BNCYjISIGFREUFjMhMjYTERQGIyEiJjURNDYzITIWHQEhMhYG20At/NsuQEAt/pIuQEAuBW4uP5OXafqSaZeXaQFuaZcDAGmXAQADJS4/QC5JLkBALvu3LkBAA1P822mXl2kESWmXl2kklwADAAAAAAiGBkkAEQAnAEUAAAE0IyEiBgcBBhUUMyEyNjcBNiUhNTQmIyEiJj0BNCYjISIGFREBPgEFFAcBDgEjISImNRE0NjMhMhYdASEyFh0BMzIWFxYH8zz7JC5nHv6wFT0E2y5pHQFQFProA25ALv1uLkBALf6SLkABJTKkBfk1/q8xp037JWmXl2kBbmmXAm1pl9w+ZhoRArMoMSP+YRsTKDMjAZ8ZzrcuP0AuSS5AQC78MQFoPU+7R0L+YT1Ol2kESWmXl2kkl2m3ODUlAAAAAAUAAP9uBtsGSQATABsAIwAzAD8AAAEOASAmJyY+ARYXHgEyNjc+AR4BABQGIiY0NjIEFAYiJjQ2MgAQAiYkIAQGAhASFgQgJDYAEAIEICQCEBIkIAQFECrn/t7nKwkcOjYJHZrAmh0JNzkb/cJVeVZWeQKfVnlWVnkBenTE/vH+1/7xw3V1wwEPASkBD8QBBuv+bf4i/mzr6wGUAd4BkwIPiqqqih01EhseW3FxWx4bEjUCEXpVVXpVVXpVVXpV/bUBKQEPw3V1w/7x/tf+8cN1dcMCkv4j/mzr6wGUAd0BlOvrAAUAAP9uBtsGSQAUABwAJAA0AEAAAAEWDgEmJy4BIgYHDgEnLgE3PgEgFgAUBiImNDYyBBQGIiY0NjIAEAImJCAEBgIQEhYEICQ2ABACBCAkAhASJCAEBRAJGzk3CR2awJscCTYdHhsJKugBIuf99VV5VlZ5Ap9WeVZWeQF6dMT+8f7X/vHDdXXDAQ8BKQEPxAEG6/5t/iL+bOvrAZQB3gGTAV8dNRMcHVtycVweGwkJNh2KqakCVHpVVXpVVXpVVXpV/bUBKQEPw3V1w/7x/tf+8cN1dcMCkv4j/mzr6wGUAd0BlOvrAAAFAAD/bgbbBkkACwATABsAKwA3AAAAFAYjISImNDYzITIAFAYiJjQ2MgQUBiImNDYyABACJiQgBAYCEBIWBCAkNgAQAgQgJAIQEiQgBAUlLB79JR4rKx4C2x794lV5VlZ5Ap9WeVZWeQF6dMT+8f7X/vHDdXXDAQ8BKQEPxAEG6/5t/iL+bOvrAZQB3gGTAh48Kys8KwH0elVVelVVelVVelX9tQEpAQ/DdXXD/vH+1/7xw3V1wwKS/iP+bOvrAZQB3QGU6+sAAAQAAAAACJIEkgAjACsAMwBDAAABNTQmKwE1NCYrASIGHQEjIgYdARQWOwEVFBY7ATI2PQEzMjYENCYiBhQWMgA0JiIGFBYyJBAAIyInIwYjIgAQADMhMgO3FRDbFRCSEBXbEBUVENsVEJIQFdsQFQKSVnlVVXkBe1Z5VlZ5AXr+qfLbp/yn2/L+qQFX8gQA8gIAkhAV2xAVFRDbFRCSEBXbEBUVENsVdnlWVnlVAXp5VlZ5VvL+HP6pkpIBVwHkAVcAAAAPAAAAAAiSBSUACwAXACMALwA7AEcAUwBfAGsAdwCDAI8AnwCjALMAAAEVFCsBIj0BNDsBMhMVFCMhIj0BNDMhMgMVFCsBIj0BNDsBMgEVFCMhIj0BNDMhMgEVFCsBIic1NDsBMgMVFCsBIj0BNDsBMgEVFCsBIj0BNDsBMgMVFCsBIj0BNDsBMgEVFCsBIj0BNDsBMgEVFCsBIic1NDsBMgEVFCsBIic1NDsBMgUVFCsBIj0BNDsBMgURFCMhIj0BNDsBETQ7ATITESERAREUBiMhIiY1ETQ2MyEyFgG3Em4SEm4SkhL/ABISAQASkhJuEhJuEgSSEvwkEhID3BL9JRNtEgETbROTEm4SEm4SAbcSbhISbhKSEm4SEm4SAbcSbhISbhIBtxNtEgETbRP9txNtEgETbRMBJBJuEhJuEgElE/8AEhKAE20TkviSCABVPfiSPVVWPAduPVUBpW4SEm4SARJuEhJuEgETbhISbhL9pW4SEm4SARJuEhJuEgETbhISbhL+yW4SEm4SARNuEhJuEv7JbhISbhL+ym4SEm4SAjduEhJuEhJuEhJuEhL+bRISbhIBExL8kgQA/AAEAPwAPVVWPAQAPVZWAAAAAAMASf9uCAAGSQAWACoAVgAAAREGIyInLgEjIgURJDMyHgIfARYzMgEUBgcRFAYrASImNREuATU0NjIWBREUBwYHBiciLwEuAiMiBAcGIyInJjcRNDc+AzMyFhcWMzI3Njc2FxYHbsGdXkhywGvG/vkBGNc/b3E/PiAyQon6xighFRBJEBUhKFZ5VgaSKAsI+a1lUCBJUIBCdf7PbBEVEhMlASMoZKG7VIDdgCs7i9cZCyMkIwIxAsBoJTg/kv1UgREqHR8QGQPvKEIU+lkQFBQQBacTQyg9VVWG/JgtFAYFhQEoECYiIGVCCgkWKgNQKBcYMUUsRz8WgA4GEhQXAAAGAEn/bggABkkABQALACoAMgBGAHIAAAE1BgcVNhM1BgcVNgE1BCcRJicuCSMiBxUzMhYXFhcVFjMyEzUGIyInFRYBFAYHERQGKwEiJjURLgE1NDYyFgURFAcGBwYnIi8BLgIjIgQHBiMiJyY3ETQ3PgMzMhYXFjMyNzY3NhcWA7fP6OrNxfL2BHj+86oXFgY/DzkWNR0zKDIZGh4Wdc56FhcwOInGwZ0zJqn7DighFRBJEBUhKFZ5VgaSKAsI+a1lUCBJUIBCdf7PbBEVEhMlASMoZKG7VIDdgCs7i9cZCyMkIwJl2xJ0024B7eEJh9h//ffShTQBAAcKAyEHGwgWBwwFBAP+Qj0KB9cTAlHYaAngMAI1KEIU+lkQFBQQBacTQyg9VVWG/JgtFAYFhQEoECYiIGVCCgkWKgNQKBcYMUUsRz8WgA4GEhQXAAIADwAAB24EzQAUACQAAAkBBiIvASY0NwkBJjQ/AT4BFwEWFAEVFAYjISImPQE0NjMhMhYCnf3rCx4MOQsLAcH+PwsLOQsfCwIVCwTGFRD7txAVFRAESRAVAnj96wsLOgseCwHBAcELHws5CwEM/ewLH/3rSRAVFRBJEBQUAAAAAwAz/4MIXgWhABQAJAA5AAAlBwYiJwEuATcBPgEfAR4BBwkBFhQJAQ4BLwEuATcBPgEfAR4BCQEGIi8BJjQ3CQEmND8BPgEXARYUAsE5Cx4M/ewLAQwCFAsfCzkLAQz+PwHBCwKZ/lUFGg1HDw8FAaoFGg5GDxAC6f3sCx4MOQsLAcH+PwsLOQseDAIUC506CwsCFQseDAIUCwEMOQseDP4//j8LHgS4+j0PDwQUBRoPBcMPDwUTBRr9Cf3rCws6Cx4LAcEBwQsfCzkLAQz97AsfAAACAAD/bggABo0AFQA7AAABFRQHBiciJwEmNDcBNhcWBxUBBhQXARQOAwcGIyInJjcSJy4BJxEUBwYnIicBJjQ3ATYXFgcRBBcWAtssDw4fFP23FhYCSSEvLQH+OxYWBuonMT0gBgkXBwQdAzGqSfS4LA8OHxT9txYWAkkhLy0BAdbXwQIHUDAUBgEVAkoWOxUCSiMTEzFP/jkWOxX+DkKsj49ADhMBCR4BybxRWw/+4TAUBgEVAkoWOxUCSiMTEzH+1SDdxgAAAAIAAv+hB2wGtwAKACgAAAkBJS8BAxEXBQMnCQETFgYjIicJAQYjIiY3EwEmNjclATYzMhcBBR4BBUsBJv5pSyK2QwFsRQ4CPf5hYgYZGhMb/f/9/xoUGhkFY/5gJRUzAj4BARchIBgBAQI+MxUClgEdPAtFAXD7syPAAZZLAWH+bP3EJioOAQ7+8g4qJgI8AZQlPwhTAggvL/34Uwg/AAABAAL/bgZIBbcAFgAACQEGIyInLgE1ESEiLgE2NwE2MzIXHgEGQf0lEy4GDBkf/W4ZKAsUFwW3DxIfFBEIBU36SSgCBigZApIfMi4LAtwIFhAuAAADAAD+2wduBkkAAgAFADgAAAEhEQkBIQEVFAYjIREUBisBIiY1ESEiJjURISImPQE0NjMhETQ2OwEyFhURIQE2MhceAQcBESEyFgJ9Aqj9JAKo/VgFJRUQ/wAUENwQFPwkEBT/ABAVFRABABQQ3BAUA80BGQseCwoBC/7mAQAQFQElAqj9iwKo/QDbEBX/ABAVFRABABUQA9sVENsQFQEAEBQUEP8AARoKCgseDP7n/DQVAAAEAAD/bgSSBkkABwAPABcASwAAJDQmIgYUFjISNCYiBhQWMgQ0JiIGFBYyNxQGBwIFBgcOAR0BHgEVFAYiJjU0NjcRLgE1NDYyFhUUBgcRNjc+BTUuATU0NjIWAUlAW0BAW0BAW0BAWwMcQFxAQFytOzIC/v9OmpJfMjyAt4A7MzI8gLeAPDI+cj9KVzAtEzI8gLeAG1xAQFxABWVbQEBbQFJbQEBbQG07Zhz+uJErMi5HTh4dZTxbgIBbO2YdA6kdZTxbgIBbO2Yd/cgeIxMdKjBFWjwdZTtbgYEACAAA/24HbgbbAA4AGgAmAEEAXQBpAHUAgwAACQEGIyInLgE3AT4BFxYUFxEUBiImNRE0NjIWABQGIyEiJjQ2MyEyBRQPAQYjIicBJiclAR4BPwE2NTQnARMWFwEWAQUBJiMiDwEGFRQXAQMmJwEmNTQ/ATYzMhcBFgQUBiMhIiY0NjMhMgERFAYiJjURNDYyFgUBDgEnJjQ3ATYyFxYUAfb+2wsPDgwKAQsBJAseDAq3FSAUFCAV/wAVEP6TEBUVEAFtEAW5YahfiYpf/oIYGAESATgfXR+oICD+xxQoGAGAYP0//u/+yCAuLSCoICABORUoGP6AYGGoX4mKYAF9GALsFRD+khAUFBABbhD9pxUgFBQgFQHR/twNGw0KCgElCx4LCgEv/tsKCgseDAEkCgELCx46/pIQFBQQAW4QFRUBACAVFSAVt4lfp19hAX8YKBX+xh8BH6cgLS4fATsBERgY/oBiArQUATkgH6cgLS4f/sf+7RgYAYBih4lfp19h/oEYeCAUFCAVAkn+khAUFBABbhAUFL3+3AoBCwseCwElCgoLHwAAAAIAbgAABI4FtwAPADwAAAERFAYjISImNRE0NjMhMhYBFA4DBw4BFRQGIyEiJj0BNDY3PgE1NCYjIgcGBwYHIi8BLgE3EiEyHgIDJRwS/u4SHBsTARISHAFpJCxRMywvPxsT/u4RGJRaQzlqRkoxKFMPFA4Puw8GCrcBW1u5lV4BQP7uEhwbEwESEhwcApw+a0REHxkaYRwTJCoWM1+oKB9CNjBJIR1mEgEJjwsjDwEwR3esAAIAAAAAAtsGSQAeAC4AACUVFAYjISImPQE0NjsBESMiJj0BNDYzITIWFREzMhYDFRQGIyEiJj0BNDYzITIWAtsrHv23HisrHklJHisrHgG3HitJHiuSKx7+2x4rLB0BJR4r25IeKysekh4sAbYsHpIeKyse/W4sBQfbHiwsHtseKysAAAIAcAAAAmsGSQAPAB8AAAERFAYjISImNRE0NjMhMhYTAw4BIyEiJicDJjYzITIWAkkrHv7bHissHQElHisiIAEsHv7bHiwBIAEqHgFuHikBSf8AHisrHgEAHisrBJn8kh4rLB0Dbh4rKwAAAAIABgAABtkGMQAiAEcAACUVIQMnJicjBwYHAyE1MxMDIzUhExYXFhczNj8BEyEVIwMTARUhJyY3ND4ENTQmIyIHBgcnNjc2MzIWFRQOBAchNQQB/uW2GwkEAwsLEbH+2ZLh050BPJ4CGQkDBAMJHaABJo/T6gNU/bUEBQE7WWdZPEQvOjQQGngeKl94fps4VWVXPwMBCb+/ASAwCg4YFxv+4r8BTAE3wP78BSsKDgoOMAEEwP7P/q4DCOwfIBVJeU1INEcmKzgsDR9pKiJKiHFAa0RCMUUmXAAAAAACAAb+2wbbBAIAIgBGAAAlFSEDJyYnIwcGBwMhNTMTAyM1IRMWFxYXMzY/ARMhFSMDEwUVIScmNTQ+BDU0JiMiBwYHJzY3NjMyFhUUDgMHITUEAf7lthsJBAMLCxGx/tmS4dOdATyeAhkJAwQDCR2gASaP0+oDVv21BQM7WmZaO0MvOjUQGXgeKlt8fptPcXNUBQEJv78BIDAKDhgXG/7ivwFMATfA/vwFKwoOCg4wAQTA/s/+rvjsHzMCSXlNSDRHJis4LA0faSoiSohxS3hNQk4tXAAAAAACAAIAAAiRBbcAAwAXAAAlASEJARYGBwEGIyEiJicmNjcBNjMhMhYEAAGA/JL+gAf0EQ0c/AArQ/ySK0gSEQwdBAArQgNuK0mSAbf+SQTPJ1Ug+20yLycnVSAEkzIvAAABAAD/1wduBtsAaAAAARQGIyIuAiMiFRQWBxUiBw4CIyImNTQ+AjU0JiMiBhUUHgIVFAcGIyInLgEvASInIjURHgIXFhcyNzY1NC4CNTQ2MzIWFRQOAhUUFjMyJDcVDgIHBgcUFxY3Mj4CMzIWB25mWi9UM04qfiUBGQ0nkXc0RmAoLyh8XGCHIiojNSpcbasKKgoPAQMCAiQqA6ttWys1Iyoih2FbfCgvKGBGSQEJNgEGBgEbASgyNBlBOFwxXmgB9V17KC4ojS2uLAYBAxQLPEEqTjRTL1pmaF4xWzhBGTMzKBsCBQIDAQEEkgEGBQEbASgyNBlBOFwxXmdlWy9TM04qQT0iAwMCIysDq21bKzUBIioihgAAAgAA/24FJQbbACcAMwAAARUUAAcVITIWFAYjISImNDYzITUmAD0BNDYyFh0BFAAgAD0BNDYyFgERFAYgJjURNDYgFgUl/q74ASUeKyse/SUeLCweAST4/q8rPCsBLQGnASwsOyz+29f+0tbWAS7XA7eS/f6KG5crPCsrPCuXGwF2/ZIeKysektP+0wEs1JIeKysBmf23l9fXlwJJl9bWAAMAD/9uBjoG2wALAEMASwAAAQcmPQE0NjIWHQEUCQEVFAYjIicHFjMyAD0BNDYyFh0BFAAHFSEyFhQGIyEiJjQ2MyE1JicBBiIvASY0NwE2Mh8BFhQlARE0NjMyFgE2dDAsOywFCv5j15Y/Pm5vfNMBLSs7LP6v+AEkHisrHv0lHisrHgEkj33+3gsfC14LCwWDCx4LXgv+Q/0615d1vAKjc3Z/kh4rKx6SPQJr/mSSl9cWbjoBLNSSHisrHpL9/ooblys8Kys8K5cPTf7eCwteCx4LBYMLC14LH4z9OwJJl9aHAAIAAP9uBbcGSQAGACIAAAERIRE2NyQTERQOBQcGIicuBjURNDYzITIWBNv+AIhsAQzcTXGchZA9Eg4gDRI9kIWccU0rHgUlHisCkgLc+uxIVdIEN/ySYsGWjl1UHQgHBwgdVF2OlsFiA24eKysAAAAEAAD+2wduBtsAAwATACMARwAAFyERISURNCYrASIGFREUFjsBMjYlETQmKwEiBhURFBY7ATI2JREUBiMhIiY1ETQ2OwE1NDY7ATIWHQEhNTQ2OwEyFh0BMzIWkgZJ+bcBtxQQShAUFBBKEBQDbhUQSRAUFBBJEBUBt1c8+bc7V1c7k2tLSktrAbdsS0lLbJI7WJIEktsBShAUFBD+thAUFBABShAUFBD+thAUFFr6STtYVzwFtztXbktra0tubktra0tuVwAAAAIABP9uBkkGtwAHAEwAAAA0JiIGFBYyJREUBwYjIiclLgE1IRUeARURFAYjISImNRE0Njc1IyIOAwcGIyInLgE3PgQ3JjU0NjIWFRQHITQ2NyU2MzIXFgJJKzwrKzwEKw4JDQUD/gANEP7bf6YrHv23HiuOciVDgFJFFwUTLhIPGhQOBhVAS3hAHWyWbBABWRANAgADBQ4IDgXiPCsrPCtu/pISCwgBbgIVDXUayYT8bh4rKx4DknnBI382RFQmCSgIDjkbCyVWSk8VMDJLbGxLJiMNFAJuAQgKAAACACn/AAduBkkABwAtAAAANCYiBhQWMgEQAgcGBwMGBwEGIyIvASY3EwEFBiMiLwEmNwE2NyU2NzYkITIWBm5AXEBAXAFArctdghcCEP5JCAoODUkPBmH+v/7FAwgQCkkTDQEACxMBsW5b1wGFASoQFwSuW0BAW0ABt/7j/mHMW2/+TxIL/wAFCkkQFQE7AUJiAQtJFhYBtxACF4Jd1qIVAAAAAAEAAAAAB8sFtwAWAAABAyETNicmKwEDIRMhAyETAyEyFhceAQfKu/6CzA8hHz/C6f6D6f656f6C6a8Fs3PKREUvA2j8mAO3QCQm+78EQfu/BEEBdl1TU9sAAAAAAgAA/24G2wZJABQAIAAAJTc2NCcJATY0LwEmBgcBBhQXARYyABACBCAkAhASJCAEBA90Fhb+ogFeFhZ0FjsW/fkWFgIHFjsC4uv+bf4i/mzr6wGUAd4Bk6F1FjsWAV4BXxY7FnUWARX9+RY7Fv35FgM//iP+bOvrAZQB3QGU6+sAAAAAAgAA/24G2wZJABQAIAAAJQE2NCcBJgYPAQYUFwkBBhQfARYyABACBCAkAhASJCAEAzMCBxYW/fkWOxV1FhYBX/6hFhZ1FjoDvuv+bf4i/mzr6wGUAd4Bk6ECBxY7FgIHFgEVdRY7Fv6h/qIWPBV1FgM//iP+bOvrAZQB3QGU6+sAAAAAAgAA/24G2wZJABQAIAAAATc2NCcBJiIHAQYWHwEWMjcJARYyABACBCAkAhASJCAEBTN1Fhb9+RY7Fv35FgEVdRY7FgFfAV8WOgG+6/5t/iL+bOvrAZQB3gGTAcZ0FjsWAgcWFv35FjsWdBYWAV/+oRYCGv4j/mzr6wGUAd0BlOvrAAAAAgAA/24G2wZJABQAIAAACQE2NC8BJiIHCQEmIg8BBhYXARYyABACBCAkAhASJCAEA6ECBxYWdRY7Ff6h/qEWOxZ1FgEVAgcWOwNQ6/5t/iL+bOvrAZQB3gGTAQ8CBxY7FnQWFv6hAV8WFnQWPBX9+RYC0f4j/mzr6wGUAd0BlOvrAAAAAgAA/yUGSQZJABEAFgAAATchEyEDBy8BIxMFMzUlEyEnASEDBSUFCxP8DTYCvBrh4A/IGgGdBQGaOf0gEf33BkmS/Wv9cAQxyP2e/vs8PKD+w3MBcgJtzwIY+ZW5uQAAAQAO/yUH8gZJAA8AAAEhCQITIQcFJRMhEyE3IQE6Brj+0Pxp/ONRAVMhAeICLE76m0IFZiv6nAZJ+g3+zwExAZeouLgBgwFT2wAAAAIAAP7uCAAG2wAHAFUAAAA0JiIGFBYyAREUBwYHIi8BBgQgJCcHBgciJyY1ETQ2MyEyFxYPARYEFxEjIiY9ATQ2OwE1LgE1NDYyFhUUBgcVMzIWHQEUBisBETYkNycmNzYzITIWBEkrPCsrPAPiFwkFDwtqiP44/fL+OIhqChAFCRcVEAGSGQkJEXJNARer3B4rLB3cQlGs8qxQQ9weKywd3KoBGUxyEQkJGQGSEBUFmTwrKzwr/CT+bhkJAgELaqO/v6NqCgEDCRkBkhAVFxYScmiPFwLjLB6SHiu6J4ZQeaureVCGJ7orHpIeLP0dF49ochIWFxUAAQAAAAAFJQbbACMAAAEyFhURFAYjISImNRE0NjsBETQAIAAVFAYrASImNTQmIgYVEQS3LkBALvu3LkBALiQBLQGnASwrHkkeK6zyqwNuQC79bi5AQC4Cki5AAW3TAS3+1NQeKywdeayrev6TAAAAAAUAAP9uBtsGSQAHAA8AFwAnADMAAAAUBiImNDYyABAAIAAQACAAEAAgABAAIAAQAiYkIAQGAhASFgQgJDYAEAIEICQCEBIkIAQEkqvyrKzyAT7+/v6V/v8BAQFrAZT+qf4b/qoBVgHlAel0xP7x/tf+8cN1dcMBDwEpAQ/EAQbr/m3+Iv5s6+sBlAHeAZMDVfOrq/Or/iYBawEB/v/+lf7/Aqn+G/6pAVcB5QFX/SIBKQEPw3V1w/7x/tf+8cN1dcMCkv4j/mzr6wGUAd0BlOvrAAAAAwAAAkkGSQQAAA8AHwAvAAABFRQGKwEiJj0BNDY7ATIWBRUUBisBIiY9ATQ2OwEyFgUVFAYrASImPQE0NjsBMhYBt0Au2y5AQC7bLkACSUAu2y5AQC7bLkACSUAu2y5AQC7bLkADktsuQEAu2y5AQC7bLkBALtsuQEAu2y5AQC7bLkBAAAAAAAMAAAAAAbcGSQAPAB8ALwAAARUUBisBIiY9ATQ2OwEyFhEVFAYrASImPQE0NjsBMhYRFRQGKwEiJj0BNDY7ATIWAbdALtsuQEAu2y5AQC7bLkBALtsuQEAu2y5AQC7bLkABSdsuQEAu2y5AQAIb2y5AQC7bLkBAAhvbLkBALtsuQEAAAAQAAP9uBtsGSQAHABsANQBFAAAkNCYiBhQWMiUCACUmBh0BFBYXHgEXHgE7ATI2JSYKASwBJyYHBh0BFBYXFgQSFx4BOwEyNzYBERQGIyEiJjURNDYzITIWAklWeVVVeQHnD/6K/vYQFhMPsPsNARUOkw8WAbYGdMr+9f64sBAKCxQP6QGO7wgBFA+TDwsMAUjBiPu3iMHBiARJiMHoeVZWeVYnAQkBdw8BFw+SDxQBDfuwDxQXD7ABSAEKy3QGAQsLEJIPFAII7v5y6Q8VDAoEWPu3iMHBiARJiMHBAAAAAgAA/24G2wZJAAsAGwAAACAEEhACBCAkAhASATYmJwEmBwYVERQXFjMyNwJ/Ad4Bk+vr/m3+Iv5s6+sEOiUBJP2SIyYlJRISExIGSev+bP4j/mzr6wGUAd0BlP0/FVQUAW4WFRYq/SUqFgkKAAAAAAMAPv8YB8MGngADABMALwAACQU2NCcBJgYHAQYUFwEWMgkBBiIvATY0JiIHJyY0NwE+AR8BBhQWMjcXFhQEkgFp/XP+lwGcAsIWFv5jFT4U/T4WFgGdFT0EDfv0KnsqkECAt0CPKioEDSp6Ko9AgLdAkCoE1/6X/XIBaf4vAsIWOxYBnhUBFP0+FjwV/mIVAu378ioqkEC3gECQKnsqBAsqASuOQLeAQI8qewACAAD/bgbbBkkADwAfAAABNTQmIyEiBh0BFBYzITI2AREUBiMhIiY1ETQ2MyEyFgW3LB38AB4rKx4EAB4rASTBiPu3iMHBiARJiMECkpMeKywdkx4rKwKM+7eIwcGIBEmIwcEAAwAAAAAGSQZJAA8AHwAvAAABFRQGIyEiJj0BNDYzITIWExE0JiMhIgYVERQWMyEyNhMRFAYjISImNRE0NjMhMhYFJRUQ/EkQFBQQA7cQFZJsS/xJS2xsSwO3S2ySwYj8SYjBwYgDt4jBA0lJEBUVEEkQFRX98AO3S2xsS/xJS2xsBAL8SYjBwYgDt4jBwQAAAQADAAAEiwZIABwAAAEGKwERFAYjISInJj8BNjMhESMiJyY3ATYyFwEWBIsVLdsVEPzcGAoJDrcKEgFu2y4VEx4BbRVHFAFuHwQqKvwlEBUVFxHbDQLbKiokAbcZGf5JJQAAAAEAA/9uBIwFtwAbAAATITIWFREzMhYHAQYiJwEmNzY7AREhIi8BJjc2JQMkDxbbLikf/pIVRhX+kx4TFS7b/pIQDLcPCgsFtxYQ/CZVJP5JGRkBtyMsKgLbDdsQFxYAAAIAAP9uBtsGSQAUACQAAAkBNiYvASYiBwEnJiIPAQYUFwEWMgERFAYjISImNRE0NjMhMhYDDwK+FgEVdRY7Fv3q8RY7FnQWFgGZFjsD4sGI+7eIwcGIBEmIwQEPAr4WOxV1Fhb96vEWFnQWOxb+ZxYEB/u3iMHBiARJiMHBAAAABQAA/24G2wZJAAYAEAAVAB8ALwAAARcHIzUjNQEWBwEGJyY3ATYJAxEBNzY0LwEmIg8BJREUBiMhIiY1ETQ2MyEyFgHOrTtAbgIVEBT+tBMPEBMBTRP+1gJt/rf9kwQAaSAgriBbIGoDAMGI+7eIwcGIBEmIwQHprjtuQAH5DxP+sxMQDxMBTBT82wJuAUn9kv63ArdpIFwgrSAgaW77t4jBwYgESYjBwQAAAAIAAP9uBtsGSQAZACkAAAERNCYjISIHBh8BAQYUHwEWMjcBFxY3Mjc2AREUBiMhIiY1ETQ2MyEyFgW3LB392zATEyOk/Z4WFnUWOxUCY6QVHw4OLQEkwYj7t4jBwYgESYjBArcCJB4sLS8hpf2eFjsWdBYWAmKlFgEFFAJ5+7eIwcGIBEmIwcEAAAAAAgAA/24G2wZJACUANQAACQE2NCcBJgcGHQEiDgUVFBcWNzI3NicCNz4BMxUUFxYzMgERFAYjISImNRE0NjMhMhYEfQGSFhb+biItLojelW9AJgu+CxIIBxkDMng1wKAuDg0eAnTBiPu3iMHBiARJiMEB8QGSFjwVAZMjExMxtyxIbW6Lc0XP/w4BAwocAZWHOza2MBQGAyX7t4jBwYgESYjBwQAEAAD/bgbbBkkAAgAGABIAHgAAAS0BAREBEQAQAiQgBAIQEgQgJAAQAgQgJAIQEiQgBALbASX+2wG3/bcDkqb+4v6u/uKnpwEeAVIBHgGm6/5t/iL+bOvrAZQB3gGTAgCSkwF+/ZX+2wJs/rMBUwEdp6f+4/6t/uOnpwK1/iP+bOvrAZQB3QGU6+sAAAMAAP9uBtsGSQANAB0ALQAAARYHAQYiJwEmNzYzITITETQmIyEiBhURFBYzITI2AREUBiMhIiY1ETQ2MyEyFgUdFRv+khZLFv6TGhQTLgLbL60WD/u3DxUVDwRJDxYBJMGI+7eIwcGIBEmIwQPYKCP+AB8fAgAjKCj8twRJDxYWD/u3DxYWBFj7t4jBwYgESYjBwQADAAD/bgbbBkkADQAdAC0AAAEGIyEiJyY3ATYyFwEWExE0JiMhIgYVERQWMyEyNgERFAYjISImNRE0NjMhMhYFHRMv/SUuExUbAW0WSxYBbhuFFg/7tw8VFQ8ESQ8WASTBiPu3iMHBiARJiMEB3ygoKCMCAB8f/gAj/rAESQ8WFg/7tw8WFgRY+7eIwcGIBEmIwcEAAwAA/24G2wZJAA0AHQAtAAAAFAcBBicmNRE0NzYXARMRNCYjISIGFREUFjMhMjYBERQGIyEiJjURNDYzITIWBNse/gAjKSgoKCQCAPoVEPu3EBQUEARJEBUBJMGI+7eIwcGIBEmIwQMBSxb+khoVEy4C2y4TFRr+kv2gBEkQFRUQ+7cQFRUEWfu3iMHBiARJiMHBAAEAAAAABIMGSQBeAAABFxYGDwEOByMgACcjIiY9ATQ2OwEmNyMiJj0BNDY7ATYAITIXFhcWDwEOAS8BLgUjIgYHITIWDwEGIyEGFyEyFxYPAQ4BIyEeATMyPgQ/ATYWBFsoAw0MBgUPFRwfJSctFf71/m9IbA8WFg9LAgNMEBUVEHBNAZMBAHVoDQoHAzIDGQ8FBRAXHR8jEJDlOQIXEhYDHAYe/dIDAwINEQsKAxsCFQ3+RjfokRUpIyAYEgUGDxwBBrYOGAQBAgQHBgUGBQIBKv0WDoIPFUE3FRCCEBXwASQaAw4ND7UPDwQCAQMFAwQCkoAcEIIeKk4ODhCADRGGnAMFBQYFAQIGEAABAAAAAASOBkkAPwAAAREUBiMhIiY9ATQ2OwERIyImPQE0NjsBETQkMzIXHgEPAQYHBicuAiMiBh0BITIWHQEUBiMhESE1NDY7ATIWBI4VEPu8EBUWD25sEBUVEGwBG9rTrAoCCXUKEA8LBjBtNGF3AV0PFRUP/qMB2RUQuRAVAcj+XRAVFRCrDxYBtRYPlhAUAP/D/o8JHAyRDQECCgYgKWtX9hQQlg8W/k/PDxYWAAEAO/7bBF4G2wBiAAABFAYHFRQGKwEiJj0BLgQnJj8BNjc2FzAXFhcWMzI2NTQuAycuCDU0Njc1NDY7ATIWHQEeBBcWDwEGBwYnLgQjIgYVFB4EFx4GBF7ktRUQmg8WS41bTh0FExB2CBIRCwKBlSoqXY0jKls8Pi0zWTVMLzQdE+CzFg+aEBVBek1EFQcTDlwJEhAOAxs/R2MwbYkTMCtVNTY9P24/TyoeAZGv/B7IEBUWD8gKMzM6HAcYFpsLAgIMAnEeCWJaIDomLxsYEhQoHzMuQkNVLp7uIs4PFRQQyQcnJjASBxUWpxEBAwsDFSghGmJOHjItHigWFRcaNitHSmUAAQAAAAAEAgZJAD4AAAEVFAYrAQ4BBxYBFgcGKwEiJwAnJj0BNDY7ATI2NyEiJj0BNDYzISYrASImPQE0NjMhMhYdARQGIyEWFzMyFgQCFBDAGvPCvwFNEAsJGN8SC/6i2woWD4CXtxr+GBAVFRAB2EHypQ8WFRADthAVFRD+9jYTxBAUBMJ0EBWlzRfL/mYSFBUOAaPpCg+SDxViXhUQdBAVgRYPmBAUFBB1EBVGXhUAAAAAAQAFAAAEkQZJAEUAACEjIiY1ESEiJj0BNDYzITUhIiY9ATQ2OwEBJjc2OwEyFxMWFz4BNxM2OwEyFxYHATMyFh0BFAYjIRUhMhYdARQGIyERFAYCscQPFv63DxYWDwFJ/rcPFhYP9P6SCQkLFd0WC/YWKgsvCNsJGNoTDAoJ/pr2DxYWD/61AUsPFhYP/rUWFRABeRQQdg8WYRQQdw8WApQSExIU/horZBtlEwHgFhIQFP1rFg93EBRhFg92EBT+hw8WAAIAAAAABbcGSQAHADgAAAA0JiMhESEyABAAIyEVITIWHQEUBiMhFRQGKwEiJj0BISImPQE0NjMhNSEiJj0BNDYzIRE0NjMhMgSolXn+kwFteQGk/t/l/nwCQRAUFBD9vxYPvxAU/wAQFRUQAQD/ABAVFRABABQQAmjlA+Pljv4AAdz+R/7phxQQkhAV2xAVFRDbFRCSEBSHFRCqDxYCzxAUAAAABgAAAAAIAAZJAAgADAAQABkAHQBuAAABEyMTFhQXNDYTNyEXITMnIwETIxMUFhc0NhM3IRcFFRQGKwEDBisBIicDIwMGKwEiJicDIyImPQE0NjsBJyMiJj0BNDY7AQMmNzY7ATIXEyETNjsBMhcTIRM2OwEyFxYHAzMyFh0BFAYrAQczMhYCS122VgEBAYUo/rIlAdyfKFAB21m5XAEBAn4m/q0nAtsVEPO7CBy2Gwi+774IHLYNEwK37RAVFRDIJqIQFRUQfGYGDAsTnB4GZwGabwgbkBsJcAGhagYenBIMCwVofhAVFRClJ8wQFQGGAVX+qgEFAQEGAemSkpL9hQFW/qsBBgEBBQHqkpIlSRAV/UAbGwLA/UAbEAsCwBUQSRAVkhUQSRAUAYkRDw4b/mQBnBsb/mQBnBsODxH+dxQQSRAVkhUAAAMAQP7bBZsGSQAzAEgAXAAAARYHHgEHDgQHESMRIicRIxEiJisBNzMyNxEzJiMRJisBNRcyNxEzETYzETMRHgMDNC4EIgYjETIWMj4GAzQuBA4BIxEyFj4GBTYVq4aEDwg6WYWRXbBbMbAVUhXlI385ChIHCw9Xf/JJJrBeLrBai3dG7yIzUURlOVoJCUIrTjhKNTgiFlEdKUQ6UzFKCAZDJ0syRCspFQQA0Fcgq59RfFA1GgT+3AEfAf7gASQB0ToBzAEBSE67AQEBIP7mAgEY/uAII0Rv/UYpQCkdDgcD/n4BAwYOEh4nNAJAJjomGgwGAQH+oQEBBAkQGiQ0AAACAAD+2wbbBtsABgAYAAABERYXARYXBRQWMyERFAYjISImNRE0NjMhBJIZEAHTEBD9UkAuAm1ALfoALkBALgOSBJICHBAQ/i0QGSQuQPtJLkBALgclLj8ABQAA/tsG2wbbAAYAGAAoADgASAAAARYXIREWFwMhERQGIyEiJjURNDYzIREUFhM1NCYjISIGHQEUFjMhMjYRNTQmIyEiBh0BFBYzITI2ETU0JiMhIgYdARQWMyEyNgaOEBD95BkQTQJtQC36AC5AQC4DkkDlFRD82xAUFBADJRAVFRD82xAUFBADJRAVFRD82xAUFBADJRAVBLsQGQIcEBD9cvtJLkBALgclLj/9ky5A/LdJEBUVEEkQFRUBNEoQFBQQShAUFAE1SRAVFRBJEBUVAAAEACf+2wdqBtsACgAkAEIAUgAAATMvASY1IwcUBgcBFAcBBgciJwEmNzY7ARE0NjsBMhYVETMyFgURITUBNj8BNSIGIwYjIRUjESEVAQYPARU3NjchNRMVITUzJyEHMxUhNTMBMwEFUcpSDgIEBAgE/aQL/pMLDw4M/pIRCQkZ3BQQ3BAU3BAUA7z9ZAGmDgoMAgoEDhT+94kCiP5aBxEMEAoYARvw/rdWNv7qNVX+uFABB7kBBwUJ+TYSBRcBJw76bA4O/pQKAQsBbRIWFwYlEBQUEPnbFJj+9WcCXRUKCgMBA4QBBmb9owkVDQICAgGIBAF5eaSkeXkC9P0MAAAABAAn/tsHagbbAAoAJAA0AFIAACUzLwEmNSMHFAYHARQHAQYHIicBJjc2OwERNDY7ATIWFREzMhYBFSE1MychBzMVITUzATMBAxEhNQE2PwE1IgYjBgchFSMRIRUBBg8BFTc2MyE1BVHKUg4CBAQIBP2kC/6TCw8ODP6SEQkJGdwUENwQFNwQFAQh/rdWNv7qNVX+uFABB7kBBxX9ZAGmDgoMAgoEDhT+94kCiP5aBxEMEAoYARt3+TYSBRcBJw7+/g4O/pQKAQsBbRIWFwYlEBQUEPnbFP7XenqkpHp6AvT9DAUj/vZnAlwVCgoEAQMBgwEFZf2iCRULBAQBiAAAAAUAJ/7bCAAG2wAZACkAOQBJAFkAACUUBwEGByInASY3NjsBETQ2OwEyFhURMzIWBRUUBiMhIiY9ATQ2MyEyFgMVFAYjISImPQE0NjMhMhYDFRQGIyEiJj0BNDYzITIWAxUUBiMhIiY9ATQ2MyEyFgNJC/6TCw8ODP6SEQkJGdwUENwQFNwQFAS3FRD8ShAVFRADthAV2xUQ/SUQFRUQAtsQFdwUEP4AEBUVEAIAEBTbFRD+3BAVFRABJBAVbg4O/pQKAQsBbRIWFwYlEBQUEPnbFKPbEBUVENsQFRUCOtwQFBQQ3BAUFAI53BAUFBDcEBQUAjncEBQUENwQFBQAAAAFACf+2wgABtsADwApADkASQBZAAAFFRQGIyEiJj0BNDYzITIWJRQHAQYHIicBJjc2OwERNDY7ATIWFREzMhYBFRQGIyEiJj0BNDYzITIWExUUBiMhIiY9ATQ2MyEyFhMVFAYjISImPQE0NjMhMhYFbhUQ/twQFRUQASQQFf3bC/6TCw8ODP6SEQkJGdwUENwQFNwQFAMAFBD+ABAVFRACABAU3BUQ/SUQFRUQAtsQFdsVEPxKEBUVEAO2EBUl2xAVFRDbEBUVgw4O/pQKAQsBbRIWFwYlEBQUEPnbFAGn3BAUFBDcEBQUAjncEBQUENwQFBQCOdwQFBQQ3BAUFAAABAAn/tsGogbbAAoAJABDAFYAAAE0JiMiBhQWMzI2BRQHAQYHIicBJjc2OwERNDY7ATIWFREzMhYlFA4DIyInJic3FhcWNzI2NyMOASMiJjU0NjMyFgMVITUzETQ2PQEjBwYPASc3MxEGAmREO0dTTjlQ/UcL/pMLDw4M/pIRCQkZ3BQQ3BAU3BAUA1kdQFyGTkc1GxUtERIqLGBzEwMYXDN5maV8jbsi/ei/AQIICRVHXtyMAP9IeVWCVz5iDg7+lAoBCwFtEhYXBiUQFBQQ+dsUP0eIfV44EwkIgQgFDwGFZBohpHN4p9cCfoKCAe4IGwYSDg8UQmLT/RUABAAn/tsGogbbAAoAJAA3AFYAAAE0JiMiBhQWMzI2ARQHAQYHIicBJjc2OwERNDY7ATIWFREzMhYBFSE1MxE0Nj0BIwcGDwEnNzMRExQOAyMiJyYnNxYXFjMyNjcjDgEjIiY1NDYzMhYGAmREO0dTTjlQ/UcL/pMLDw4M/pIRCQkZ3BQQ3BAU3BAUAzf96L8BAggJFUde3IzfHUBchk5HNRsVLRESKixgcxMDGFwzeZmlfI27BZFIeVSDVj37DA4O/pQKAQsBbRIWFwYlEBQUEPnbFP7gg4MB7QgcBhIODxRDY9P9FQXxR4h9XTgSCQiBCAQPhmMaIKN0eKbXAAAAAAMAAP9uByUGSQAKABoAWwAAJTQmIyIGFRQWMjYTERQGIyEiJjURNDYzITIWBRQHFhUWBxYHBgcWBwYHKwIiLgEnJicuATURNDY3PgE3Njc+Ajc+Ajc2MzIeBRUUDgEHDgIHITIWASUsHh8qKzwstise/rceKyseAUkeKwVKPxEDNBMTES0KQkmYKVcUS7JkWI0nHispHBt4OE4lFR0LCggMIBcWHjVTNSYRCwEWFhQDEQkEATxZg9seLCweHyoqAmn9JB4rKx4C3B4rKx5iSTIlV0VARkEqgE9XAiMfHjEBASoeAt0dKgICgkpjJhVEKjAtMkUWFhgjOS5FIhsrWDInBxsXEIIAAAMAAP7bByUFtwAKABoAWwAAARQGIyImNTQ2MhYTETQmIyEiBhURFBYzITI2JRYVDgEjIR4CFx4CFRQOBSMiJy4CJy4CJyYnLgEnLgE1ETQ2NzY3PgI7AxYXFgcWFxYHFgcUASUsHh8qKzwstise/rceKyseAUkeKwULPwGCWf7EBQgQBBUUFwELESY1VDQeFhcgDAgKCx0VJk04dxwdKCseKIxYZLJLFFcpmElCCi0RExM1BARJHisrHh8qKv2YAtseLCwe/SUeKyvIRmRZghAXHAcqLlgrGyNELjkkGBYXRTIsMCtEFSZjSYIDAiodAtweKgIBMR4eJAJXT4AqQkY/RlclAAAAAAwAAP9uBtsGSQAJAA8AFwArAD0AXABkAH8AjACeALIAwgAAATU0IyIHERYXMjczNTQiFQEVIxEjESM1BREjNQYjIicmNREzERQXFjMyNxEFFRQHBiMiJxUjETMVNhcyFxYFFRQHBgcGJyInJj0BNDc2MhcWHQEjFRQXMjc0NjQ1ARUUIj0BNDIBNCcuAScmISAHDgEHBhUUFx4BFxYgNz4BNzYBEyMHJyMeARcWFxUzJTU0JyYjIgcGHQEUFxYzMjc2FzMRIxEGIyInJjURIxEUFxYzMjcBERQGIyEiJjURNDYzITIWBBohExMSFCHTS0v9c1tVWQHvTS0qJgoHTAEBEBcZAW0IDi8oJkxMJSkvDggBHwMDDh88OyIYFyF1HxiYJhsIAf5KSUkCYRULTDGb/sT+xpwySwsXFwtLMZ0CdJ0xSgsX/KFnVTs8WQkkCCgNVAFLGCE4OiAYGB87OCEYz0xMGRcRAgFMBg0lKS8CPsGI+7eIwcGIBEmIwQEKtDkS/wASAcQnOjoBCVD+HAHkUJD+XC4zIBIrAUz+yxsDESQBQH+nOxgwLikCNLguATAX0QohEBkVLgErH0OUQx8rKyBCV0o6AR4BDhgMA66yOjqyO/yWyl8yRAYREQZDM2PGyWAxRQUREQZEMWADsQFT398aahp2P+WJlEIiKyshQ5RCIisrH0QBpv69IxICHAE2/rIqFR8zAS77t4jBwYgESYjBwQAAAAsAH/7bBr0G2wAJAA8AFwArAD0AWwBjAH0AiQCbAK8AAAEVFCMiJxE2MzYFFSM1NDIlMzUhFTMRMyEzESMRBiMiJyY1ESMRFBcWFzI3JTU0JyYjIgc1IxEzNRYzMjc2JTUjFAcGIyI9ATM1NCcmIyIHBh0BFBcWFzI3Njc2ATU0Ih0BFDIBEAcOAQcGICcuAScmERA3PgE3NiAXHgEXFgEzAxEjESYnJiczEwUVFAcGIyInJj0BNDc2MzIXFiURIzUGIyInJicRMxEUFxYXMjcRBFYtGhkZGi0Bgmdn+7B6/px4cgFJZmYiHxUDAWYJDjU3PQHqChM+OTFmZjM3PhMKAYNoAwglNc0fLUxOLSAiLU5SKRUDA/1JYmIDNh4QZULS/LDTQmYOHh4QZETRA1DSQmYPHvuLdYtyEDYqIHlRAfUgKk9NKyAgK01PKiABf2g9OTUOCQFoAgMVHyIBTvFNGQFYGQFONTVOq2tr/XUCNf5QMBgDJQGg/kE4GyoBRmzhUx5APvj9Cjc/PyBeDzoMKU9jdlorOjoqW8ZaKjoBPR8fCgRL8E9P8FD89v71hUNcBxgYB1xDgAEQAQuFQ1wIFxcIW0SABKL+OP7LATVVnnZf/tRQyF0qOjorXMhbKzo6K179xj9HKhs7AcL+XSYCGQEyAbMAAAIABf9uBkMG0AATACcAAAEGAQYjISImNwEyJwMmNzYzITIXARYHARUBFgcGIyEiJwE2ATYzITICqgv+5h8s/u8YFwwBIQEBuA4NChoBES4eBFQNDf2lAYANDAsZ/u4wG/59FQJJHS0BExkD4RX+DDUnFgIAAQE/GRERMwGXEhj71AH9QRcTETMCxyUEEDMAAAMAAP9uBtsGSQATACcANwAAATQnJisBIgcGHwEVAwYXFjsBMjcBJisBIgcBFgEWOwEyNzYnATUBNhcRFAYjISImNRE0NjMhMhYDD5AYJNIVCQgKjuAKCgkT0yMWA60IE9YiFv4qAQErFyTSFQgJCv7XAdMJ+sGI+7eIwcGIBEmIwQNxAf0nDQ4T9wH+dRAQDykDyg4o/L8C/dwoDg8RAiABAzoSm/u3iMHBiARJiMHBAAAAAAIAAAAACAAFtwAPAC8AAAA0JwEmBwYVERQXFjMyNwEkFA4BBw4BBwYgJy4BJy4CND4BNz4BNzYgFx4BFx4BBbci/bYjJyYmEhIXDwJKAmsCERISeVH++/7+UXoTEBECAhESEnlR/gQC/lF6ExARArFVEwFuFxUVK/0lKxUJCwFuq9t8vEtTcgkdHQlyU0q9fNt8vEpTcwkdHQlyVEq8AAAFAEn/bge3BlUAAwATABcAGwAfAAAJBBUBFScHNQE1FwE1FzcVCQwBywI1/nn90AXp/dABAf3RqAGHAQEBiPzvAYf9y/5+BewBgv3R/ngBiAIv/n79ywOz/qT+ugFt/rt7/rEBAQEBAU97bgFFAgEBAv67BYr+uv6kATX+y/7L/pMBRgP+/pP+ywFcAAYADf7bBs8G2wAHAAsADwATABcAGwAABSERIxEhESMlNwUHATcBBwE3AQcDAQcJATUhFQXB+wK2Bmu3+8wlA38m/PdNAzxM/al1Ar10+AIhkv3e/V4Dkm4CJf0kAtwytL2yAmem/n2mAxmN/baNA/r9JG4C3fnctrYAAAAEAAD/bgbbBkkAFQAfAC8APwAAJREjFhUUDgEjIgA1NDcjERQWMyEyNgAQJiMiBhAWMzIBNTQmKwEiBh0BFBY7ATI2ExEUBiMhIiY1ETQ2MyEyFgYVmxeS/JTh/sAXoigeBMYdKf67z5KRz8+RkgIULiHHIS4uIcchLsaEXfrnXYSFXAUZXYR+AuRITZD0jgE23E5H/RweKCgB8QEcyMj+5MgC8b0gLy8gvSEuLgEP+uddhIRdBRldhIQAAAMAAP9uBtsGSQAPABcAHwAAATIWFREUBiMhIiY1ETQ2MwA0JiIGFBYyJDQmIgYUFjIFkojBwYj7t4jBwYgB1Y7Jjo7JAxKNyo2NygZJwYj7t4jBwYgESYjB/C7Jjo7Jjo7Jjo7JjgAAAwAA/24G2wZJAAIACQAVAAABEyEBMwkBMzchABACBCAkAhASJCAEA27l/jUCh2v99P3zbHYCVQJD6/5t/iL+bOvrAZQB3gGTBBX+ov8AAxb86rcBXP4j/mzr6wGUAd0BlOvrAAUAAP83BkoGcQAKABYAKgBDAGcAAAEWBicuATY3Nh4BFy4BBw4BFx4BNz4BAS4CJyQFDgIHHgIXBDc+AhMOAwcOASYnLgMnJic/AQQgJR4BBhMGAw4CBwQlJCcuBCcuAyc+BDc2NyQFFhceAQOjCYU9LSAgKylUPn8Q4nBIVgQFp2lojAEEF1IyOP6z/sYxNUkUImk/RQEF+0g8aWMJEg8yKWLt4XY1UF5JFx0kBxQA/wKIAQAYBxLOHmAGMjIl/uD+Z/7lqBEYDwUIAwooGB4KAyImQCoij9cBsQFTsUUSAQMGSFckE19dFBUORBN6gjIgik9okgkJrgLUHygKCTY4CAsnHiAoCgghIAkJKPuCHnNMVBc3NQMUCRcmPShu4BIKqakHJkEEQb/90iI8IBOQKx+ADiEvHzsKOeWNxFMeMyIiEQ01FCpjNVYXRwAAAAYAAP9uBtsGSQAIABMAJwA6AFkAaQAAATQmBwYWFxY2NxYOASYnJjY3NhYTDgIHBicuAic+Ajc2Fx4CEzQ2JicGICcPARYXFhcENz4CEzYnJicmBQYHDgIHHgIXHgMXFhcENz4CNxIBERQGIyEiJjURNDYzITIWA8leKTEBMS1gVQlll3kDAj40UKTPF0wtMrHBMixNGA81JyLi8CYpOUANBhG4/i66DQYeETazAR3MJyIRmwoTMYH3/suXaysyOgUJGSoGAQoHFA94zQEozhskJAQ3AVLBiPu3iMHBiARJiMEC+TE1GRd4FRo+RUt+DWlMOGUXI14BZxgdBwYXFwcIHBcWGwgGKCcGBx38lggsHQR5eQYOsEBdHzVyFkp5Ay09GD8mSB8OJhEXNyNOn+cpBjsXJw1bFyBoDxcrGAEyAV37t4jBwYgESYjBwQAAAAEATv9uBJIG2wAiAAAlEw4BBwYuAzURIzU+BDc+ATMhESERIREUHgI3NgQ3WxrJZnfFgFolwFKCTjcXBQEJBAEXAX3+gg8kTTdZ7f7xKEcBAj9qiYlCAm72HmNqf2M0Bgf+HP7g/bAiPDwjAQMAAAACAAD/bgbbBkkAHwAvAAAlJwYjBi4CNREhNSERIyIHDgMHFTMRFB4CNz4BAREUBiMhIiY1ETQ2MyEyFgUSRzJDKTwcDAEm/tvXCQEGHD1zTpUxY7FyT5kB3sGI+7eIwcGIBEmIwVbRGQEaLi4bAcfdAXUMMmJ3Yh28/iJBhXlKAgE3BMj7t4jBwYgESYjBwQABAAP/JQNqBtsAFgAAABYHAQYiJwEmNzYzIRE0NjsBMhYVESEDYRIO/nALIAv+ag8JChgBABQQ3BAUAQABJSwS/kkLCwG3EhYWBZIQFBQQ+m4AAAABAAP+2wNqBpIAFwAAAQYjIREUBisBIiY1ESEiJjcBNjMyFwEWA2oKF/8AFBDcEBT/ABgTDwGQCw8QDAGWDgSoFvpuEBUVEAWSLBIBtwsL/kkSAAABAEkBKAgABI8AFwAAARUUBiMhERQGJwEmJzQ3ATYXFhURITIWCAAVEPpuKxP+SgsBDAG2EhYWBZIQFQNJ2xAV/wAYEg8BkAsPEAsBlRAJChf/ABUAAAAAAQAAASgHtwSPABcAAAEUBwEGJyY1ESEiJj0BNDYzIRE0NhcBFge3DP5KEhYW+m4QFRUQBZIrEwG2DALfEAz+bBAJChcBABUQ2xAVAQAYEg/+cAsAAgAA/24GOAbbACYAOAAAAQYHBiMiJyYHIgcGIyIDAhEQNzYzMhcWMzI3NjMyFxYXBgcGFRQWARQHBgcGBwYHNjc2Nx4BFxQWBjgtYJOSOGhiS0ZcXTquqqiBgMVSeHcnM3B1UYhrOzxaKEqd/rghIkg+PipMA1ZVyAEEAQEBb4+P4CUlASUnASgBKgEVAQWmpSMiJydLKUlNOmuBjuIFHUZVVkg+FA0Gqnt6LwMSBAUNAAAABAAA/tsHbgZJAAMABwALAA8AAAERJREBESERARElEQERIREDC/z1Awv89Qdu+/MEDfvzAl79GGsCfQNR/Q8Chf0b/H2PAvQD6/x1AvwAAAAGAAD+2wZJBkcABwAPABwANwBNAFsAAAAyNjQmIgYUBDI2NCYiBhQFMhYVERQGIiY1ETQ2BREUBisBERQGIiY1ESMRFAYjIiY1AyMiJjURAR4BFSE0NjcnJjc2HwE2Mhc3NhcWBwERFAYjIiY1ETQ2MzIWAiElGholGQH7JRkZJRr8jTBEQ2JFRQTsSTNWRWJFnUUxMEUBVDVJAxB6k/vek3tRCA4PCFJt8mxTCA4OCAHQRDIwREQwMUUEsxskGxskGxskGxsk7UQw/hQxRUUxAewwRBb9BzVI/vwxRUUxAQT+/DFFRTEBBEk0AvkBzz/hhYbgP5YPCAcOlzAwlw4HCA/9Pf4UMUVFMQHsMUNDAAkADf7cBtQG2wAIAA8AIgEHARQBJAExAUcB7wAAAQ4BIwY3NDcyFwYmBzYXFgEmDgEHBgcGFxY2Nz4DPAEmATQnPgMmNC4CJy4BJxYXFgcGBwYuAScuBCcuAycmNiYnLgEnLgE2NzYWBwYWNzY0NS4DJwYXFCMuAQYnNiYnJgYHBh4BNzY3NgciJicmNhcyFgYHBgcOAQcOARceAxcWNz4DNzYXHgEGBw4BBwYHBicmFxYXFjc+BRYXFA4FBw4CJyYnJgcGFRQOAhcOAQcGFgcGJyYnJjc2DwEGFx4BFx4BFx4BBgceAhU2Jy4CNz4BFxY3Njc2FxYHBgcGFhc+ATc2JjY3NjM+ARYBNiYnJhUWFzIHBjM2BS4CJy4EBwYWFxY2AzQuAQcGFxYXFhcUNxM0LgEnJiMOARYHDgIXFj4BNzYyNgEeAg4FBw4BBw4BJy4DJyYjIgYHDgMnLgEnLgQnJjY3Ni4BNjc+ATc+ATUWBwYnJgcGFx4DBxQGFxYXHgEXHgI3PgIuAScmJyYHBicmNT4CNz4DNzY3JicmNjc2MzYWFx4BBwYXFhceARcWDgEHDgMnLgQnJg4BFxYHBhY2Nz4BNz4BLgEnLgE2Nx4FAvYNCgUGARUGaQURCxsKA/5oBQQGAwMJCAcFEwUBAgICAwPPPwUIAwQDCAEKAQtVKBsmYyUNLCMSAQ0KGBUODwEQJx0ZBQUYDSwRRAcJBxkdKiALDRUYDwYUHBkTehUBCjAcBAEmIB8hAwELEwgLBwUNCBMBARYcExcBARkLCSwBDwYLEBoLHxk2PwIwHyQGCg0GAwoOF1MLMh4dPQsBARIdMBMsJyUfGQ8CAgcHDAgPAyBbPRoYMBkDASMhDxUaWwkCAQcJGCUEAgcFBwQpNAYuBBfAChIEIyMJMRA1LQUPBwEDGAs1iZgyGg0OAwEZCgcYAxoDAhMCGREpAU1Z/UoDDAcKAgQLAwMMAwHfAgoUBwYKBQcCBBAwFQoMzQwNBBAIAgMQBApABg8DEQsKBgQDAQsDBQUJEAkBEhEChxcZAwgcGioeLAkrbSATdSsVGgsnIzJiFlcXMlEpOiAhvEkWSSkxHAULJgEBCwwCCxBiFCIbGDwlOicKDxUCDgUFAScDAygXkygbc0oaMTEEFRcLijdOMw0EAwEVIggJKxkrF34QDgQCO1stSj15KUFPBgYoJ3E/ZhEJBxQNCx8fPiYVHxQLEAIZLBQSFxYLQGctQ0dTPTYMLSQmJgQQARARHhIfBQYBFgEHDgMQAREEDQ8H/hUBCRQFBgkLAwESDAMJBQUEAwP+ZhUbER0fEiEMJwgxBjd9FxdIuYUuAgU0jDQtRCQUDgFHXiIpGRhLJwkDIgIBOTsBA0scFhEIBUkFIi4YCwMJkBEKBAUIQUwBAUEkETIkAwMNCgEhFhkiATApBREQDhoBEB4FCRsRDQECEwEOCxMKEAcDDQ4EByMFFgQGCAIEBREaAQEOEhYRCgQKAgYGBQcDCAEQRR0NDUcjCgMJHUc3TiEHwEEVdAkbFyNJICAWAgVKdA4kBRqaCxE0LgQRQzg1G04JEwkCBgoIOxIRUysJBzUdTBohARaEJRh4ZR4VKiQNA58THgICCgYBERcB3wkJAwUDCwcIAQISPwUBFAEBDRMJAQEHAQEFHwMFAQ4CBwkDEQEPDwcFDgYHAwcNBAEE+goOHRoZGRQXDhUFFlQfEggVCiEZFAEBBAEBICQdAQFFDwUMCA4TDRpjDRI3KikLDgQLFScnUyYXBQMOETAHGw4ZDRFOEBMKBx0JByQQAwcyPEosFNk7VScKGxIaITQ3FRh0Pk4XozyA4meMMRgBIR4wtk5th4F5Q+5jOFEuAgInKyIBAQkWDiEGKhBgP1CPSlEGJTgoHRUqJB0MDVVRDSM6Ix4NEQAAAAgAAP9uBtsGSQAOACAAJwAuADIAPgBWAGIAACUCAyMHDgQHJxYhMgMmJwQFBhUUEhc+Az8BPgEnJicGAgcgASYHEhM2EgEiBzYFJiEiBxYXPgQBAicHDgQHFhceARc+ATIeBBc2EAIEICQCEBIkIAQEkjBwAgISPqmQnCgR0gEMlkUYJf6d/mIBZVs5qJ6MLCoFFHWJjp7bJQFaBGjw42Mvf6n8gQEBAQKk0/7kV1qWg0+LUUURAQQDpwEKF01Vj08dFQILAylYUE5FPDEjC4vr/m3+Iv5s6+sBlAHeAZMpARMBJgEHGFhjolgMqwLxOEdqAQgQjv8AZmaxa04QDwEG9PO9Sv7rrP7vRST+7/75VgEGA+kBAaW7FsLyHk4+RRj93QEJzAEOHEpBUyA9MAcaBgYFBAUHCAYC5P4j/mzr6wGUAd0BlOvrAAAAAgAA/24G2wZJAD0AXQAAATQuAy8BLgQ1NDMyHgMzMjY1NC4BIyIOAhUUHgIfARYXFhQGIyIuAyMiBhUUBDMyPgIFFAAjIicGIyIkJgI1NDcmNTQAMzIXNjMyBBYSFRQHFgU9LUJlWDh3IiAwFRGlMU4tKjIeNkCAxG5Okn9MK1ViRaZnGSVbSzpdODA5ITk6ARfBU5l/TAGe/v+1lXdYU6P+1dh/ElsBAbaVdlhUowEq2H8SWwIdOV89MxsNGwgIEhMdFFgcJSccSTQ/ZTUjSH9URmdFKhApGREXWjolMzMlRTNplipQh6W2/v9bEn/YASqjU1l3lLYBAVsSf9j+1qRTWHYAAAAAAwAy/24FegbbACMAPwBEAAABNzYmIyEiBhURFDcBPgEzITI2NzY3NiYjISImPQE0NjMhMjYBBgoBBw4EIyEiBwYBDgEnJjURNDYzITIWBwM2GgEEdyoGIBj80hokBwFNGiImAREZIwMbDwUjGP6wISwrIgGLFScBBhFYRwQHBxkfOSb+yg8KCf4iGVMOP1deA/dtSBm0BUZYBOveGicnFvsVCAcBkh4RIRKVRRgrLCEwISofARBT/kX+mxQZGDIZFwwK/dYdCAsZVwZLP2x5efx5EwFmAbsAAwAA/24G2wZJAA8AHwAvAAAlETQmIyEiBhURFBYzITI2ARE0JiMhIgYVERQWMyEyNhMRFAYjISImNRE0NjMhMhYDJRUQ/dsQFBQQAiUQFQMAFRD92xAUFBACJRAVtise+bceKyseBkkeK9sEkxAUFBD7bRAUFAHHAtwQFBQQ/SQQFBQDfvm3HisrHgZJHisrAAAAAAIAAP7bBbcGtwAxADkAAAEUBiMiJwEjFQEWFRQGKwERFAYrASImNREjIiY1NDcBNSMBBiMiJjU0NwE2MyEyFwEWABQGIiY0NjIFt0AuOiH+/DMBGgorHttMNLc1S9seLAsBGjP+/CE6LkASASVTdgG3dlMBJRL+JJXVlpbVAiUuQDEBhpf+KhEVHiv+yTVLTDQBNywdFREB1pf+ejFALiEbAbd6ev5JGwPb1JaW1JYAAgAA/tsEkga3ACUALQAAAREUBiImNREjERQGIiY1ESMRFAYiJjURIxEUBiImNRE0NjMhMhYAFAYiJjQ2MgSSQFtASUxpS0lMaUtKQFtAgFsC3FuA/reW1JaW1AO3/iQuP0AtAZP77TVLTDQCE/3tNUtMNAQT/m0uP0AtAdxbgIACD9SWltSWAAIAAP9uBtsGSQAVACEAAAkBPgEmJyYOAQcGIyInLgIHDgEWFyQQAgQgJAIQEiQgBANzAZASFCE2LmJFHClFQykbRmMuNSETEwT26/5t/iL+bOvrAZQB3gGTAQsCHRlVbSQeAiYgLi4gJgIeI25VGaL+I/5s6+sBlAHdAZTr6wAAAgAy/tsHzgbbAA8ASQAAABAuAiAOAhAeAiA+ASUGBwURFAcGJyUDBiInAwUGJyY1ESUmJyY3EwMmNzY3JRE0NzYXBRM2FhcTJTYXFhURBRYXFgcDExYGkmix8/7087FoaLHzAQzzsQGkBRL+sg8REP6yzQslDM3+shARD/6yEgUGC87OCgUFEgFODxEQAU7NCicLzQFOEBEPAU4SBQYLzs4LAlYBC/SxaGix9P719LFoaLE9EQZu/qMSDAsGbP7kDw8BHGwHDAsTAV1uBhETDgEbARwPEhEGbgFdEgwLBmwBHA4BDf7kbAcMCxP+o24GERIP/uT+5Q4AAAAAAgAA/24GjwZIABIAMQAAAQYjIiQCNTQ3BgAVFBIWBDMyJCUGACEiJCYCNTQSNiQ3NhcWBw4BFRQSBDMyNzYXHgEFoj4/0P6dzXbm/t11wwEPlaUBJwFQa/5P/wCy/rvsi4PiATmvMhMVJmJopwEdqod9LyMQCAEKCs4BYtDbvUX+fvaV/vLDdYzf6P7ri+wBRLKvAT/pjwcCLy8jWe2Dqf7ipzsVJBAuAAAAAAMASf9uB7cGSQALABsAKwAAADQmIyEiBhQWMyEyAREUBiMhIiY1ETQ2MyEyFhMRFAYjISImNRE0NjMhMhYE2yse/tweKyseASQeAr4sHfm2HissHQZKHitJLB35JB4rLB0G3B4rAwc7LCw7LAEl+7ceKyseBEkeKysB4v7bHissHQElHisrAAACACX/kgdJBpIAQgBIAAAAFAYjIRQHFxYUBwYiLwEOBCMRIxEiLgIvAQcGIyInLgE3EyY1ISImNDYzIREnJjQ2Mh8BITc2MhYUDwERITIBITQ2IBYHSSse/wBN7hYWFT0V4gYXSUtwN5I6dFNEEBHRFyAbFhYDE+dC/wAeKyseAQDGFiw7FsYDxMYWOysVxgEAHv4H/STWATDWArA7LMOI7xY7FhYW4QYSLyQeBAD8AB8sLQ8Q7RgTFTwXAQOCtyw7KwFQxhY7LBbGxhYsOxbG/rACSpjV1QAB//8AAQiPBOMAhgAAARYDBgcGBwYXFhczHwIWFx4CDgEjBQYmLwEuAwcOBBcUBg8BBgcjBi4CLwEuAwInJjQ/ATYXJR4BHwEWFx4BHwEeAzI3PgQnLgEvASYnJjc2NzYXFhceAxQOARUUBh4CFx4BPgI3Njc+AT8BPgIXJTYWFwiPGsYbL1kOEyMTSgEBAQOhOQMICAkwK/7bG0kXFyJcQUocAwwbFhEBCAQFFSeEUauCahsdCyh8d6FEBwMFETABOQ4ZBgUSChc7ERMhPTItIA8CBxUKDAYCEAgHHUQPFBMZPdRePBcfEAgCBAIBBxMQCRUnMEcqRTUFDgUFAgcXCwFJLTkHBIlJ/vklPHIkLy0YRgEBA5ZmBhErIxwFBhcODhhiTzYKAQUcKE8xER0GBhYDBS9KTRscCy6itwErohIZBgcWAQMCCwUDDRg5eiAhRWQ4IAUBCilCd1MuTA4OJwoCGhYMHgMBDQYUIyZCO2YsDUYnNiMKAgUeMWhHd4oLEQQDAQQDAQIGEQoAAAAABwAA/54H9QYNAAoAFQAhAC8AVQBpAH8AAAE2JicmBgcGHgE2NzYmJyYGBwYXFjYXBgQnLgE3PgEXHgElLgEkBwYAFx4BBDckACUUDgIEICQuATU0Ejc2JBcWBwYeATY/ATYyFxYHDgEeARceAgIeAQcOAScuATc2JgcGJicmNjc2JRYSBw4BLgE3NiYnLgEHBi4BNjc2BAMDGBYoJ1kYGRROXIUJCg8QIQgTIhAizzP+/X96XTY273l/bAExCrf+2qb//rEQCrcBJqcA/wFOAVBUpdz+2P69/s7zlZ+SwQGLVEozBQcQEQcHn/U0MzMCBhAMDUFqTYRgHBUJMhoaGQgXZUgbMQQGHhtFAYZjOiwKOj0eCSApR0fEZCA3DSMgjQEVASAnUBEQHiUnTyUfsQ8fBgYNDyMQBgxrdW0pJ9NtamkfIc9FbqlQEBr+8aduqVAQGgEPok6jlnZHTIjRfIMBKZPBmVVJpRAOAgMCA0NGSIMPEA0EBRVCeAK2a41AGhkICTEaSG4PBh4cGy8GD1pu/t+EHx0UOh5ezk5PPBUHJEA2Bx5WAAMAAP9uBtsGOQAJABMAHQAABQYjIic2EjcWEgEREAAHJhE0EiQBEAcmABkBFgQSBQ/D4uDDnt4nKN/+aP7f6c+/AU0Ez87p/t7NAU6+J2trYwEcpaX+5AX9/db+4P4mcvYBQNYBc/X8wv7A9nEB2wEgAioi9f6NAAEAAP7bBkIG2wBrAAABDgMuAy8BAgAHIiY0NjM2JDcOAi4DJz4BHgIXNjcOAi4FJz4BHgUfATY1LgU2Nx4EDgIPARYUBz4FFhcOBiYvAQYHPgUWBkIlZGt3cWxaRRITgf5s7hYdHhXGAVZ0KVJrZXBiXyaC5ZqDSBw9HQgZUU5sXmJJNAdQknBiRjomGQUFDgkfUUA8ECw6U31EKgUHFhUJCAEBAxA2PmRtk04CLUZZYWBXQxQTGjkHG1ZbiIWiAe9bhUYkAxAiHQsM/vv+1AIeLBwB9NcQFQkPMlWQXjYXKFlXMpa2AQMDBBMhQFWDUCAUFi9DSEg4EROLVAcXT1SAgqFNHVNbZ2RfUD4REQZoHggbSDxCJAIbWZFeRSMUAQMDBKicCBtDNSsCNwAAAAAEABj+2wWfBbcADAAQABQAHgAAARUUBisBAREhIiY9AQERIREBESERJRUhNTQ2MyEyFgWfhFxB/tf9o12DBYf6eQWH+nkFh/p5g10Dx12DAUNLYYj+zAE0iGFLAXX+3QEjAXf+3AEkoE1NYIiIAAAAAwAA/24G2wZJABkAJQAxAAAAFAcBBiMiJj0BISImPQE0NjMhNTQ2MzIXARYQAiQgBAIQEgQgJAAQAgQgJAIQEiQgBAUlC/6TChEPFf5tDxUWDgGTFBAODgFswab+4v6u/uKnpwEeAVIBHgGm6/5t/iL+bOvrAZQB3gGTAusgCv6SChYP2xYP2w8W2xAVDP6UxAFTAR2np/7j/q3+46enArX+I/5s6+sBlAHdAZTr6wADAAD/bgbbBkkAGQAlADEAAAEVFAYjIRUUBiMiJwEmNDcBNjcyFh0BITIWEhACJCAEAhASBCAkABACBCAkAhASJCAEBSUWD/5uFRAODf6TCgoBbgoQDxYBkg8Wtqb+4v6u/uKnpwEeAVIBHgGm6/5t/iL+bOvrAZQB3gGTA0nbDxbbEBUMAWwKIAsBbQoBFg/bFv7aAVMBHaen/uP+rf7jp6cCtf4j/mzr6wGUAd0BlOvrAAADAAD/bgbbBkkADwAfAC8AAAERFAYjIicBJjQ3ATYXMhYBETQmIyEiBhURFBYzITI2AREUBiMhIiY1ETQ2MyEyFgSSKx4XE/4AHx8CABMXHisBJRYP+7cPFRUPBEkPFgEkwYj7t4jBwYgESYjBBEn9JR4rDQFuFksWAW4OASv8UARJDxYWD/u3DxYWBFj7t4jBwYgESYjBwQAAAAADAAD/bgbbBkkABwATAB8AAAAUBiImNDYyEiAEAhASBCAkEhACBBACBCAkAhASJCAEBJKr8qys8jD+rv7ip6cBHgFSAR6mpgGm6/5t/iL+bOvrAZQB3gGTA1Xzq6vzqwFJp/7j/q3+46enAR0BUwEd2P4j/mzr6wGUAd0BlOvrAAIAAP7bB0YGtwAVADYAAAEXBgQjIiQCNTQSNxcOARUUADMyPgElFwUGIyInASEiJicDJjc+ATMyFhUUBicTIRUhFyEyFwEEkXVC/qTWsv7Rse/CFIuoAS3TkPSFAmhD/tsPEi4T/u/95BsqBG4CCRBjPUtsd00qAeP+LxICCC4UAQQBj+nN/rIBLrPPAVRHlj7+mNP+05T9HoOSCCgCISYbA3sSHjpIbEtPbwj+tpKTKP34AAIAAP9uBtsGSQAjADMAAAE2JyQDNhcyBw4BIyInJicmBwYHDgEHFzYzMhceARcWNzIBEgERFAYjISImNRE0NjMhMhYFxQvD/vhdMixhDQWfKDEtDyQilUN5H3sfPFcMQTkRRRFObrMBAvwBHcGI+7eIwcGIBEmIwQQC9wcJ/s0WAW1B/ME+5tgOCGobbhxMO80/+j/NAQFQAUMBtvu3iMHBiARJiMHBAAEAAAAABSUGSQBEAAABFAIEKwEiJjURBwYjIicmPQE0NyU1BwYHIicmPQE0NyURNDY7ATIWHQElNhYdARQHBRUlNhYdARQHBRE2ADU0NjsBMhYFJdj+jdq3EBT2AwcLCw8aAQv2AwcLCw8aAQsUELcQFQGsER4a/j8BrBEeGv4/1wEpFBC3EBUDJdr+jdgVEAK6TAEHCxOSGgpRaksBAQcLE5IaClEBHhAUFBDPhAYXEpIaCopqhAYXEpMaCYr90w8BO9oQFBQAAwAAAAAGSQZJACMAMwBDAAABFRQGIyERFAYrASImNREhIiY9ATQ2MyERNDY7ATIWFREhMhYTETQmIyEiBhURFBYzITI2ExEUBiMhIiY1ETQ2MyEyFgUlFRD+bhUQSRAV/m4QFBQQAZIVEEkQFQGSEBWSbEv8SUtsbEsDt0tsksGI/EmIwcGIA7eIwQNJSRAV/m4QFBQQAZIVEEkQFQGSEBUVEP5uFf3wA7dLbGxL/ElLbGwEAvxJiMHBiAO3iMHBAAAAAAQAAP9uCbcFtwAnAC8APwBQAAABBisBNSMiJjU0Ny4BNDY3JjU0NjsBNTMyFyEeARceAhQOAQcOAQcTFhQHFzY0JwEhBgUiBg8BAQ4BKwEDMzIDIxMzMhYXAR4EMwUhJgLFfrWSSQ8WCEJYWEIIFg9JkrV+BPgwkxJmizQ0i2YSkzAGPT1dTk76qgSI+P7vQYAfIP63HmU0bmohs7Mham41ZB4BSQUQNTpTKQIJ+3iFAdtJSTYmGx0CFBsTAx0bJjVJSQgZAxE7MikzOhEDGggBICmAKSI3qTf+qyswNxwb/rceKwISAiUCEiwd/rcFDyYcGFxKAAAAAgAA/24HbgbbAFIAVgAAATIWFRQPARcWFRQGIyImLwEFFxYVFAYjIiYvAQcGByImNTQ2PwEDBwYjIiY1NDY/AScmNTQ2MzIWHwElJyY1NDYzMhYfATc2MzIWFRQGDwETNzYBJQMFBshHX2vEQAhgRDZXET/+nT8JYEQ2VxE/ryEYRlw/MrJ4sh4ZRV0/MrQ9CWBENlcRPgFiPglhRDZYETy5GBpFYEQzs3i7HPyOAWJ4/p4DZV1GbyVEvxgdQ2M+M715vBsbQ2I9NLo8CgFcRTZXET0BZT0JXEU2VhE9thsaRWE+M7d4txsbQ2I+M7g/B1pEM1QRPf6WQAr+1HgBaHoAAAADAAD/bgbbBkkADwApAEkAAAEyFhURFAYjISImNRE0NjMBEQYHDgEHBic5ASInLgEnLgEnERQWMyEyNhE0JiMhIgYVFBYXHgEXHgYyPgU3JT4BBZKIwcGI+7eIwcGIBG4jJifhPXBLS3E12jUOMAtALQO3LkA/L/xJLj9FKzbOLQMgECAWGxgXGBwVIBAgBAExKEgGScGI+7eIwcGIBEmIwftJAfMoFxmQKk8BTiWKJQkrCv4NLj8/Ar0vQkAtKlsdJYEeAhYKFAoMBQUMChQKFgLHGloAAAAGAAD+2wgABtsABQA/AEcAUQBhAHEAABM0NwEmAAEUDgMHAwE2Nz4BJg8BJicmDgEeAR8BEwMBNjc+ASYPASImIzYkMzIEFyMiBhUUHgYXFgUBFhcGIyInARYVFAIHATY1NAAgBAASEAIABCAkAAIQEggBICQAEhACACQgBAACEBIAkU0Bo+D+8AXABhEJHwRX/sI1MBYPFRbqVpEOEwcDEQ5cicD+wDUvFhAWFesIJAx4AYTiqAExeAs/VQUEDgcVCBkDSP2+AQ8BBJCTgHgD+m3uyAENQ/wnAaABewEToqL+7f6F/mD+hf7toqIBEwGFAYwBagEGm5v++v6W/nT+lv76m5sBBgLbuqz7hG0BqAEuFixFIGcP/twDsAMGAiYhAQsBCgEOFBYQAQn+if3AA7cDBgImIQELAbfVeW5cPw4bFh8RIg4pBnrx/RwHBTIkBPDH3+/+bXQDBsF7MAKEov7u/oT+YP6F/u6jowESAXsBoAF8ARL40ZwBBQFrAYsBagEGnJz++v6W/nX+lf77AAAAAAIAAP9uCAAG2wASABsAAAERBSwBAjU0EiQ3FQYAFRQABREBEyU3Jic1BBcE2f7J/vv+WPXmAY/4+P7BAWEBCwQ0Kv2oqIi4AT3pBtv5JZIXuwEhp6ABGrwdxCv+/6Ou/vkiBhL9//5Dgl9QIcQmjQADAAD+2wiSBtsADAAmADAAAAkBFSMUBiMhIiY1IzUBIREzESERMxEhETMRIREzMhYdASE1NDY7AQUyFh0BITU0NjMESQRJki8g+TAgL5IBJQEkkgElkgElkgElQyAv+JIvIEQHHiAv924vIAbb/kqTHissHZP+2/ySA278kgNu/JIDbvySKx5JSR4r2ywdk5MeKwAAAgAA/24KSQZJAA0ANgAAARMWBgQgJCY3EwUWMjcAFAcBDgEnJQ4BBxYVFAcTFgcGJyMiJyY3EyYnNDc2NyUmNDcBNjIXAQfrFQXF/qv+c/6rxAQVApAZOxkE7hn7AAUNBf0XMUAHSEJCAgsKEtsRCgsBQ0IBSw1j/oMZGQUABQ0FBQADIP6XT4dPT4dPAWnPCAgCXDUJ/m4BAQLrJ7FzKVRPK/4REA0NAQwNEAHvK09TLO2Mdwk1CQGSAQH+bgAAAQB9/24GXwbbACIAAAETJgciBxMmAAInFjMyNxYaARc2Ej4BNxYzMjcxDgMHAgPWD0cxL0kOLv7byWpCOTFOSKHdMCqmZoo1Pj1AQiBJKFkMpgKW/NgNAQwDKE8CBQFTnhERf/7y/pdPRgEKqOpjEBAtcEOZE/7lAAAAAAEAAP9uBrgGSQAjAAABIRYVFAIEIyIkJgIQEjYkMyAXByYjIg4BEB4BMzI+AzchA24DPA7Q/n/5s/677IqK7AFEtAFX9e+N0JP7kpL6lGOna1AmB/4OA1lNRfj+etuK6wFFAWcBROyK5uWIlf/+0/+VN1JpXioAAAUAAP7bCAAG2wAQABgAIQBNAF0AAAEWBwYgJyY3NjIXFjMyNzYyJBQGIiY0NjIFFAYiJjQ2MhYlNCYiByYnExcUFjI2NCYjIgcnJgcDBgcmJyIGFRQWFwYVFAQzMiQ1NCc+ASQQAgAEICQAAhASACQgBAAE4xISR/7HRhISBxQHN4qJOAcU/qk8VD09VAH/PVQ8PFQ9AR9QciqVzkjlO1U8PCs+Hf0WBk/Okyg8OVAqJAcBQOHiAUAIIioBmaL+7f6F/mD+hf7toqIBEwF7AaABewETAaYSEkdHERMHBzg4B/JVOztWO2YqPDtVPDteOFApZwYBRDQqOzxVPDk4Bhj+mwhnKgFQOChDER8houfnoiUcEULV/mD+hf7uo6MBEgF7AaABfAESoqL+7gAAAAAFAAD/bgbbBkkADwAZACMAUQBhAAABFgcGJCcmNzYyFxYyNzYyJRQGIiY1NDYyFgUUBiImNTQ2MhY3NCYjIgcmJxMXHgEzMjY0JiMiBycmBwMGByYjIgYVFBYXBhUUBDMyJDU0Jz4BAREUBiMhIiY1ETQ2MyEyFgQxDw89/vM9Dw8GEgYw6zAGEv7aNUc0M0k0AYI1RzQzSTT2RTEwJIGwPsMBNCMlMzMlNxfYEwVFsH8iMjFFJB4GARPBwgESBh0jAV7BiPu3iMHBiARJiMEB0Q8PPQE8Dw8HBzAwB6sjNTUjJTMzJSM1NSMlMzNRMEUkWQUBFi0lMjRJMzEwBhX+zgdYJUUwIjkPHRqLxsaLHRsPOAIp+7eIwcGIBEmIwcEAAAAAAwAA/24G2wZJAB4AMAA8AAABNzU0JiIGFREUBiImPQEjFRQWMzI2NRE0NjMyFh0BBTUjFRQGIyImPQEHJxUUFjI2ABACBCAkAhASJCAEA95nhbeEICwfrINeXYMfFxYeAcGrHxcWHmdFhbmDAYHr/m3+Iv5s6+sBlAHeAZMDHR5HWoF/W/69Fx8fF4mLXoKBWwFAFiAgFj3/i5AXHyAWjR4gjVuCggHq/iP+bOvrAZQB3QGU6+sAAAIAAP+WCJIGIQAdAC8AAAE1NCYiBhURFAAgADURIREUFjI2NRE0ADMyAB0BBwUhERQAIyIANREXNxEUFjI2NQS+RWBE/uD+av7hAXdEYEUBIcjJASDfAcgBd/7hy8r+4JXfRWBEA66HMEREMP1EyP7lAR/LATD+1TFEQzICxMMBFf7pxJxCuP7Qy/7hARzJATNGQv7MMEREMAAAAAIAAP9uBtsGSQANAB0AACURIREhIgYVESERITI2ExEUBiMhIiY1ETQ2MyEyFgaS/Nz922qWAyUCJGqWScGI+7eIwcGIBEmIwbcCJAMllmr92/zclgSz+7eIwcGIBEmIwcEAAAAIAAAAHgklBZkABQAJAA0AEQAZAB0AJQApAAABMxEhESEZASMRAREzEQMVMzUTIREhNSE1ISURIxEBIREhNSE1ISURIxEBd+n9oAF3jQHU6urqXgJh/Z8Bd/6JAXeNAdUCYP2gAXX+iwF1jAWZ+50DHP2fAab+WgJh/OQDHAFH6en+ufvMul67Aab+WgJh+8y6XrsBpv5aAAUAAP9uBtsGSQAJABMAIwAwAEAAAAAUBiMiJxE2NzIAFAYjIicRNjcyABAmIyIHBgcGBxE3NRYzMgIQJiMiByMRNzUWMzIBERQGIyEiJjURNDYzITIWBKtWPTEfIDA9/s5WPTEfIDA9AtnJjxcWGj9jjvE6TI+/y45VTdTxP0aPA4fBiPu3iMHBiARJiMECl5JnEQE8EwEBgZJoEQE8EwH8ygEy2gRZQm0H/Skv7BYCwQEy2ir8QC/sFgJA+7eIwcGIBEmIwcEACgAv/uYI6gbbAIIAvADKAM4A3ADjAOcA6QDtAO8AAAE2HgMXHgIXDgIHLgUjDwEWFx4HHwEWDgIHJgYjIicmJzQ3PgInJgcOASMiLgEnJicEIyImNTQ2NyUmND4DNz4BMzIWFzYzMhYVFAYPAgYWMzI2NTQuAjU0Nyc2NTQnNjcyHgUXNw4DFzcuBycuAioBIyIHPgU3HgI/ARUXJDc+CD8BBgcGBAcOAgceARUUAT4BMzIeAxcGIyInATcXBwEWFRQOAwcnPgIzAQcnPgEzMhMzFwcBNRUPAT8CBXVWnHF2SjEmaERPN4qyKTJFHy00cVQLBwUKBzIIIwYVAwcBAQEICRMEKJYlLSUCAQQCRD4BGxYprUUdc4AgBxj92SMSHBMQAiwJDBgWHwUFGgcRHgi6CxMdFBHQAQG8GTalNj82DE4xBV5GMj8wFxgMGw45Ay40KAFGBhMIEAcLCAsECBEeFTUQkGgSLk1IIlEJDiQlGQ4ZARqOIDIvHCcQKA0xCQgCL1r+4M4QQDIUAzL+5i3TPQofIhocA4qNRkn+0zd9VAHdAyhBOkAFCBhbSiD+Bm4HCzQOFvEjCy4D+AICAQMBArYDNlCIblNAeT9FIkBIEiqzxderbgIEBgoGKggiDSMcKholHkgvVxEBGAwSI1UZD0FGGAIePWmQrhcFHoAZEhEaBHkQGQ8LBQYCAQ8lEyoZExEaAy4SHtG3OCknAxccEhUVMlQeJBIBBBAPKSNJIBwuLQMMEfQGGAkRBwwFBgIDBQExIiYeNR5fCwo0IAEBVwFtbBgpLRo0E0EWVxEKPWK94TIDCgwKFj0IDfvOHjEkPjRABjMMA5cOyjf+pBEBCBENCQgBMQIPCALOFxQBDf0gXg4HEwEBBQMEBAEABAAA/vAG2wbHABcANgBdAIMAAAUmBw4BIyInJgciBw4BFx4BNjc+Ajc2JyYnJiMiBwYHBhcWNjc+BzMyHgEXHgE3NgE0LgIjIg4BIwYuAwcOAQcGFx4BMzI+AhceAxcWNjc+ATcUAgYEICQmAjU0PgU3PgM3PgE3FhceARceBgU2BhYiglWTSQYJDREIAQknenA5L2QxCA4zFhYaPTYbITkeEQoTGwMRBxAKExAVDR8oDAoLBgsaAYwMGjMjJpKUKR9UWmSAP4O8AgJWIU1QQauHjCQeWUpSFig2JSAhPI3u/sP+pf6+9JItQ15VXjYWEFQoRiIpMwmTQTLFMRgpYkxfPyw5FhAZJzgFAQ4HFgwlHwMEBSUfCA6WNhARCw4yGxgJCBcCDwULBQcDAhEQERMHBA4BWhk0MyBeYAEtQkMtAQGxc4A8FxNKWEkBAUZTRwEDJjUviOy7/r/be4PkAUS3Zr+OgVVKIQsJKxYuHCBlXbEsIVkfDxtPUoeQxAAABAAA/24G2wZJAB4APABaAHgAAAEPAg4BJw4BIyImNTQ2NyY2PwEXBwYUFxYyPwMDFwcnJiIGFB8DBy8CLgE3LgE1NDYzMhYXNhYBFAYjIiYnBiYvATcXFjI2NC8DNx8CHgEHHgEDFAYHFgYPASc3NjQmIg8DJz8CPgEXPgEzMhYEx7etIkrGYRKAVGGJZk8ZNEoOrQ0qKip3KiOsuNkOrg4qd1QqIa63rbisI04yH1BniWJXgw5gwwPjiWFVghBi1k0NrQ0qd1UqI623rrauIUk2GFdzAnRXHjVNDa0OKlV2KyKut624rSJN0WMNg1lhiQIRt60jSTQYUGeKYVKAE2LHSg6uDCp4KyoqIq63Al4Org4qVHgrIa62rretI03TYxGAVGGKcFQXNvrzYYprUSAzTQ6uDipUdyojrbeut64iScZhDYMErViFDGHSTA6uDSp4VCoirreut60jTTMeVnSKAAAIAAD+2wbbBtsARQBYAFsAXwBnAGoAiQCjAAABBiYvASYnLgEnBgcGBw4BJzY3PgE3PgE3JgcOAgcOAQcGBwYnJicmJz4BNzY3NjM+ATc+AhcWBxQOAQcGBxceARceAQMWBwYHBicmJyYnNx4BNjc2NzIFEycJAREJARcDJwMXNxcBBREBFwcnBgcGKwEiJCcmNTQ2MzIeARceATMyNjc+AjcBEQEGACMiJzQnETY3Njc2NxEFMiwBMzIHEQLrARoXFzIxCE4ETU1dGwUjAwdXGJMQE04DCXUJLSICAgEBBh0aHBULBQEHKg1CNnIDC0sNCh0EBQIDHSADHTtJDo8FBQ7sAwcOLCIiHhoQBQEDJxY3KRYTAyNIn/tlAxn85wWKdM5z93Uz8v3rAo/+1LU+LZWnQiZgWv7sSAkMCQUfJgVTxlFtpGERJCoMAc78jBD8xwgPBgEDAgYQeTICfQIBawFoBRcBAgsDCAkKFyEGPQJ2WW0RAgQCBWQb0B8inQoBJgINCQECFAELBggIBRMHEwIHAxITKAIoBQMMAQEOGAI5QgU5XSAHOwMBOAIlEQ8aEg4BAxoRHgQDBQQQDgKn/v0w/UEBCQSc/vX80CMC7yP9nCR+SgOx0gGy+TgPt0xfHQ5aNAgKCQ0RFQIqOCEpCBQYBgUl+y8BGQf+6g8BAwTQCgEHBigRAbfjfnoY/iMAAAAADAAA/tsIAAbbAA8AJwA3AEcAVwBnAHcAhwCXAKcAtwDAAAABMhYVERQGKwEiJjURNDYzBR4BFREUBiMhIiY1ETQ2MyEyFh8BHgEVATU0JisBIgYdARQWOwEyNhE1NCYrASIGHQEUFjsBMjYRNTQmKwEiBh0BFBY7ATI2ATU0JisBIgYdARQWOwEyNhE1NCYrASIGHQEUFjsBMjYRNTQmKwEiBh0BFBY7ATI2ATU0JisBIgYdARQWOwEyNhE1NCYrASIGHQEUFjsBMjYRNTQmKwEiBh0BFBY7ATI2ExEjIiY9ASERAUlLbGtMkktsa0wGt0JQq3r8JUtsQC4DAC5tIK4gLvy3FRCSEBUVEJIQFRUQkhAVFRCSEBUVEJIQFRUQkhAVASQUEJMQFBQQkxAUFBCTEBQUEJMQFBQQkxAUFBCTEBQBJRUQkhAVFRCSEBUVEJIQFRUQkhAVFRCSEBUVEJIQFW22LkD9JAUlbEv7JEtsbEsE3EtsuyeGT/ySeaxsSwbcLj8tIK4gbi3625IQFRUQkhAVFQE1khAUFBCSEBUVATSSEBUVEJIQFBT9x5IQFRUQkhAVFQE1khAUFBCSEBUVATSSEBUVEJIQFBT9x5IQFRUQkhAVFQE1khAUFBCSEBUVATSSEBUVEJIQFBQBxwElQC23/bcAFAAA/tsGSQbbAA8AHwAvAD8ATwBfAG8AfwCPAJ8ArwC/AM8A3wDvAP8BDwEfAS8BPwAAATIWFREUBiMhIiY1ETQ2MwEVFBY7ATI2PQE0JisBIgYRFRQWOwEyNj0BNCYrASIGERUUFjsBMjY9ATQmKwEiBhEVFBY7ATI2PQE0JisBIgYDNTQmKwEiBh0BFBY7ATI2ETU0JisBIgYdARQWOwEyNhE1NCYrASIGHQEUFjsBMjYRNTQmKwEiBh0BFBY7ATI2ETU0JisBIgYdARQWOwEyNgE1NCYjISIGHQEUFjMhMjYRNTQmKwEiBh0BFBY7ATI2ETU0JisBIgYdARQWOwEyNhE1NCYrASIGHQEUFjsBMjYRNTQmKwEiBh0BFBY7ATI2ATU0JisBIgYdARQWOwEyNhE1NCYrASIGHQEUFjsBMjYRNTQmKwEiBh0BFBY7ATI2ETU0JisBIgYdARQWOwEyNhE1NCYrASIGHQEUFjsBMjYGAB4rKx76SR4rKx4CABUQSRAUFBBJEBUVEEkQFBQQSRAVFRBJEBQUEEkQFRUQSRAUFBBJEBWSFRBJEBQUEEkQFRUQSRAUFBBJEBUVEEkQFBQQSRAVFRBJEBQUEEkQFRUQSRAUFBBJEBUCSRUQ/pMQFRUQAW0QFRUQSRAUFBBJEBUVEEkQFBQQSRAVFRBJEBQUEEkQFRUQSRAUFBBJEBUBJRUQSRAVFRBJEBUVEEkQFRUQSRAVFRBJEBUVEEkQFRUQSRAVFRBJEBUVEEkQFRUQSRAVBtsrHviTHiwsHgdtHiv+t0kQFBQQSRAVFf7MSRAVFRBJEBQU/stJEBUVEEkQFRX+zEoQFBQQShAUFP6CSRAVFRBJEBUVATRKEBQUEEoQFBQBNUkQFRUQSRAVFQE1SRAUFBBJEBUVATRJEBUVEEkQFBT6WdwQFBQQ3BAUFAJZShAUFBBKEBQUATVJEBUVEEkQFRUBNUkQFBQQSRAVFQE0SRAVFRBJEBQU+35JEBUVEEkQFRUBNEoQFBQQShAUFAE1SRAVFRBJEBUVATVJEBQUEEkQFRUBNEkQFRUQSRAUFAAAAAIASf7uBW4GJQAdACUAAAkBERQGIiY1ESMRFAYiJjURASY0NjIXASEBNjIWFAAUBiImNDYyBU7+sktqS0lMaUv+siBAXCABBAGlAQQgXED+bZXVlpbVBGn+svxTNUtLNQG3/kk1S0s1A60BTiBcQCD++wEFIEBcAQbVlZXVlgAABQAA/24HbgZJAA8AHQAzAEMAUQAAARQOASMiLgE1ND4BMzIeAQEUBiMiLgE1NDYzMh4BBTIEEhUUDgIjIiQjIgQjIjU0PgIlIi4BNTQ+ATMyHgEVFA4BJTIWFRQOASMiJjU0PgEDeytlRVeORCtlRViNRP56YFhXllBgWFeWUAHChwE50idISzFO/u9IS/7eVNGAvu4Bd0ZkLEWMWEZlK0SOAZdYYFCWV1hgUJYEwEV6WYOzU0V6WYOx/YNbh3+yVFuJf7M23/7BgzVGIQxnZqdi8ceH8Vl6RVWxg1l6RVOzg3eIXFWxf4dbVbN/AAAAAQBJ/tsDJQbbABUAAAEUBgcTFgYrASImNxMuATU0EjYyFhIDJYNsMwIpHdweKQMzbYJhrMKrYgSApuEq/FYeLCweA6oq4aaSARazs/7qAAADAAD+2wduBkkAAwAHAB8AAAUBEQEnCQIFERQGBwEOAScBLgE1ETQ2NwE2MhcBHgEEAALb/SVJAx784vziBtUpJPzcIEwg/NwjKjUrAyUZMhkDJSs1agGPAtb+9oEBIwEi/t4D/JMoRRP+SRIBEwG3E0UoA20uSxABJQkJ/tsQSwAAAAAHAAD+2wm3BtsAAwAHAAsADwATABcAQgAABSURBSctAQUBJREFJy0BBSclEQUnLQEFAREUBgcBBiInASYnBgcBBiInAS4BNRE0NjclETQ2NyU2MhcFHgEVEQUeAQLbAbf+SUkBzv4y/jMGqQG3/klJAc3+M/4yMgG2/kpKAfj+CP4IBtQsJf4AHUkd/gAGAgIG/gAdSB3+ACYrMSgB8DEoAgAaPhsCACgxAfApMG7cAWe8gMbGxv0z3AFnvIDGxsaJvQEwvIDY2Nj82P4lKUcT/wAQEAEAAgMCA/8AEBABABJIKQHbK0oS1QHJK0kT2wsL2xJKK/431RJKAAAGAAD//gklBbkAAwAJAB8AJgAuAEEAAAEhFSEBIgYHISYDMjY3MwIhIgA1NAAzMh4BFRQHIRQWJSEyNTQHITUhMjY1NAchJSEyHgIVFAceARUUDgMjIQhA/bgCSP7gZ4AHAdMVvkiHFPxy/or1/t8BK+ue6nQD/RCD+ogBUurj/qcBQVlo2f7X/sMCp2OchUjEgoU4X4KTUP1GBViO/qd4Z9/9ZEk//qEBLfbuATqb/p0TIn+KOb/OAdlUWKUB9iBMkGjPXiW9i1aMYEIeAAAABwAA/24G2wZJAA8AHgAlACwAQQBHAEsAAAEyFhURFAYjISImNRE0NjMTIREhMjY1NCc2NTQuAgMjNTMyFRQDIzUzMhUGBSImNSE2NTQmIyIGFRQWMzI3Iw4BAzIXIT4BAyEVIQWSiMHBiPu3iMHBiPH+WAG1hrajeixVYFjJuohv09iOAQJVTlIB1gGqlJK7tJnqSJ4NUziBDf7dBVB5AWz+lAZJwYj7t4jBwYgESYjB/l38fISBtS87gUFaMBT+lNNnbP6B+IF3JFdPCxeXysWUmrzaJy0BootASwEwWAAEAAD/bggABkkABwAbACcAPwAAABQGIiY0NjIANCYjIgcXHgEHDgEnLgEnHgEzMgE0JiMiBhUUFjMyNjcUACMBDgEjIiYnJREFNjMyFwE2ADMyAAcQo+ekpOf9M6d3Hx52WEskI65XGF0XJYZRdwRczZCRzc2RkM2r/s/X/g0O3peK1Rz++QG9WmsPGQFFAgEx1tcBMQS256Sk56P7Iu6nBzAjrVdYSSQJJQpFUwRskM3NkJHLy5HY/tD+lJPMrYVpAeqzNwIB0dYBLf7PAAAABAAA/24G2wZJAAgAGwBCAEsAAAA0JiIGFRQWMgAUBiMiJicWFxY2NzYmLwE2FzIBERQGIyEiJj0BFx4BMzI2NwEyNhAmIyIGBwEmIyIHJRE0NjMhMhYBFAYiJjQ2MhYFi4K3gYG3/cmEXkBrHTs1RYkcGzpFXhkXXgSNwYj7t4jBxRenbXewCwGLq/Hxq6nxAv7/ChZWR/6twYgESYjB/uai5aGh5qEDnbaCg1pbgv6cvoNCNxcXGzpGRYgcJgYBAsb7t4jBwYivT2mJoHUBIPEBVvHvqf6QASqIAheIwcH+bnKioeWioQAAAAAGABL/PgftBtoADQAeAC0APABLAFwAAAEDByUuAScuAT4CNxYbAScOAw8BAy4BPwE2NycBAw4BDwEGBxcBExcWJDcBBgMlJwE+ARceBQETFgYHDgUHJgElAzcDJTcuAy8BBTYWHwEWA7sRAv4gKUcSDQgRCyYDWDPOqEhvNyMEBNkTAwgJKFqgB27XDjgVFVGpCf758QjCAQNB/L82+f6WFgEBF1suGzkoNhw3AvXzFQ0ZDy4pRiZQDCf++AFmjqL7/iGtJ15PRBQTAc8jPg0NLQGj/lwZIQNBKx9AVClpCA4CjP5PaVKmeGAYGAGYHkQUFEiPY/2d/mYhKAQECAa7AaMBnsYSGRkEOUj+V9YOAZYjIQUCFxkyHT7+mP5iKlooFycZGQsVA1IBoN8BD1/+VRdiZrBqTQ8PAQMfERFGAAQAAP8lCSUGSQAHABEAGQBDAAAANCYiBhQWMhMhAy4BIyEiBgcANCYiBhQWMgERFAYrARUUBiImPQEhFRQGIiY9ASMiJjURNDY7ARM+ATMhMhYXEzMyFgIlbJdra5eVBIlmAhwK/JIKGwMFu2yXa2uXASMVEG6At4D7boC3gG0QFZZqIHgauXADbnC5G3ggapYBtZZsbJZsAiUBmAkWFgn8r5ZsbJZsASX+SRAVkluAgFuSkluAgFuSFRABt2qWAd9rkZFr/iGWAAAAAAQAAP7bCSUG2wAzADsARQBNAAABMhYVERQGKwEVFAYiJj0BIRUUBiImPQEjIiY1ETQ2OwETPgE7ARE0NjMhMhYVETMyFhcTADI2NCYiBhQBIQMuASMhIgYHADI2NCYiBhQIJWqWFRBugLeA+26At4BtEBWWaiB4GrlwkxQQAgAQFZJwuRt4+R2XbGyXawGXBIlmAhwK/JIKGwMEuJdsbJdrAtuVa/5KEBVJW4GAXElJW4GAXEkVEAG2apYB32uSAQAQFBQQ/wCRbP4h/dxrl2xslwG5AZgJFhUK/ERrl2xslwAAAAEAJf7bBrcG3AAzAAAkFAYjIR4BFRQGIyEiJjU0NjchIiY0NwEhIiY0NwEjIiY0NwE2FhcBFhQGKwEBFhQGIyEBBrcsHf3wAQspHP6SHSkMAf3wHisVAcz++h4rFgHL4R4rFQG3FjsWAbcWLB3iAcwWLB7++wHLZzwrE6IrHSgoHSuiEys8FgHMLDsWAcwsOxYBtxYBFf5JFjss/jQWOyz+NAAABAAA/24G2wZJABUAKwBEAFAAAAE0JyYhIgcGFRQWMzI3NjMgFxY3MjYTNCckISIHBhUUFjMyNzYXIBcWMzI2EzQnJiQjIgcOARUUFjMyNzY3MgQXFjMyPgEQAgQgJAIQEiQgBAUIIt3+3piwMB8ZBiSXfwECxBYPFiBuKP7x/pyvqzcoHQgii5QBP+8bEB0oey6Q/oPJ6bcaJC8jDSGYx7YBV3YYFiEx6uv+bf4i/mzr6wGUAd4BkwF1JRWDJwoxFyEJH3YNAR8BDS4YoTAPOh0oCiYBjQ8nATk2GlNWNggqIiMxCSoBTkYOMGf+I/5s6+sBlAHdAZTr6wAAAQAA/24EkgbbABMAAAkBFyERIQcDByERASchESE3EzchBJL+phsBP/29MqMi/qgBWhv+wQJDM6IiAVgFgf1nI/4lIv7IIgFaApojAdoiATgiAAAAEQAAAKAKSQUXAA4AJQAvADsAPABHAFMAYQBiAHAAfgCMAI4AnACqAL4A0gAAJRMDLgEjIgYVAxMeATMyJTcDNCcmIgcGFQcDFBMVFBcWMzI3NjUBFwcGIi8BNzYyNxcHBiMiNSc3NDcWAQMTAxQjIicDEzYyFxMDBiMiNQMTNDMyFxMDBgciJjUDEzQ2MzIJARMDFAYjIicDEzYzMhY3EwMUBiMiJwMTNjMyFjcTAwYjIicDEzQ2MzIWATEDEwMUBiImJwMTNDYyFhcTAxQGIiYnAxM+ATIWEwMxFAYiJi8CEzU2NzYzMhcWFwEUBiMhLgE1ETQ3NjMyABc2MzIWA4ASEgEPCwoREBABDwsZAVQNDg8JEgkPAQwNBwoQDQoK+1cXFwIQAxMTAhFkHh4CCQobGwoJAULXHR0MCwMYGAIYbBoaAg4PGBgPDm0YGAIQBwoXFwoHEAG4/rYYGAwIEgIVFQISCAxrFhYMChUBExMCFAkNcBUVAhcWAhISDwkKDgHB4hERERcQARAQERcRcRAQEhkTAQ4OARMZEfMQFB4VAQcGDQIMCg0JCBACBQe+hfx9DxQgYW7fAUcTPUGGvbsBFAJWCxAQC/2q/uwLDzzxAp0SCgYGCRMG/WoB/vMBCwgNCggPAaCSkAoKkJIKUOzoCgvn7AoBAf3xAjH+6P7xDQ0BDwEYDgb+4P7pDw8BFwEgDyT+9f7nEgELCAEZAQsHCv3QAsb+Tv7nCA0VARkBshUNWv3q/ukJDRYBFwIWFg0l/b7+6xgYARUCQgoPD/ymA1X9uf7vCxIQDQERAkcNDw8j/c7+8g0SEg0BDgIyDhIS/cD++A8VFQ+ChgLXAxEKCAUJFf07hrwCFQ8EAxoMJ/7T2xm+AAQAAP7bBtsG2wANABsAKQA5AAAAICQ3FRQGBCAkJj0BFgAgJDcVFAYEICQmPQEWACAkNxUUBgQgJCY9ARYAIAQWHQEUBgQgJCY9ATQ2Al8CHgHWiOv+a/4l/mvriAHXAh4B1ojr/mv+Jf5r64gB1wIeAdaI6/5r/iX+a+uIAfgB2wGV6+v+a/4l/mvr6wNuYmDCT4dPT4dPwmD8MGJgwk+HT0+HT8JgAVViYMJPh09Ph0/CYATCTodPkk+HT0+HT5JPhwAIAAD+2wbbBtsAEwAaACMAXgBjAHUAgACIAAABHgEVERQGIyEiJjURNDYzITIWFwcRISYnASYBESEiJjURIREBFhc2MzIXFgcUBgcVBiMiJicGBwIjIi8BJicmNz4BNzYXFhU2NzY3LgE3Nhc7ATIXFgcGBxYdAQYHFgE2Nw4BAQYXNjc0NzY3Jic0JjUmJxQHAzY3LgEnJicGBwYFJiMWMzI3NAaOIC1ALfoALkBALgQALm0glwGuCw7+mg4Blv4lLkD8kgNsJjpDQqgjEhACAQdLN5lI/cOvZREPHAEFCwQKa2IQCgI7P04pGw8PDSMYARoOFQsCAgECDj/91TtiOlQBuBEPAQcIAQQBAQEBDgGNmqoCGQZXOh9AIgLRG4VXNxAEBSkgbi362y5AQC4HJS4/LSBO/lIhDgFmDvk5BJJALgHb+SUCpR4iCDgZIgECAgErLiUbRP7VCA4BBAsfLnUzChACA2GAm5FesDouAREYNgcCAwYijU+7/dYbmS5kA/kwZwgrAy4FBAEBAQECGRABAv0LPh4BFAZNfGJ/QA0bIAIBAAAABAAA/tsG2wbbABMAGgAjAFEAAAEeARURFAYjISImNRE0NjMhMhYXBxEhJicBJgERISImNREhERMVMxMzEzY3NjUzFx4BFxMzEzM1IRUzAwYPASMnLgEnAyMDDgEPASMnJicDMzUGjiAtQC36AC5AQC4EAC5tIJcBrgsO/poOAZb+JS5A/JJ4ULy1kwgDAgUDAQYEkra7UP6pZ3EGAgIFAwEHA6SCpQIGAQUEAwIGcWcFKSBuLfrbLkBALgclLj8tIE7+UiEOAWYO+TkEkkAuAdv5JQQAe/0NAioXHhIJGwMnC/3WAvN7e/4MFx4YGAYlCgJv/ZEKJAcYGB4XAfR7AAQAAP7bBtsG2wATABoAIwBTAAABHgEVERQGIyEiJjURNDYzITIWFwcRISYnASYBESEiJjURIREBFSE1Izc+AjsBFhceAh8BIxUhNSMDEzM1IRUzBw4BDwEjJicmLwEzNSEVMxMDBo4gLUAt+gAuQEAuBAAubSCXAa4LDv6aDgGW/iUuQPySAVgBQVV1BgwFAQMBBAIGCAR6VwFNTtvfTP7BVXYFDQQCAgEFBwx5Vv61TtjeBSkgbi362y5AQC4HJS4/LSBO/lIhDgFmDvk5BJJALgHb+SUBC3l5uAgWCQUGBQgKBbh5eQE4AUJ7e7UIFgUDBQYNDrV7e/7K/rwAAAAFAAD+2wbbBtsAEwAaACMANwBCAAABHgEVERQGIyEiJjURNDYzITIWFwcRISYnASYBESEiJjURIREBFSE1IzUzMjc+ATQmJyYjIRUzEQEjETMyFxYVFAcGBo4gLUAt+gAuQEAuBAAubSCXAa4LDv6aDgGW/iUuQPySAUkBdmqcVzBNWlRIN17+W2oBKoiJOyRARyMFKSBuLfrbLkBALgclLj8tIE7+UiEOAWYO+TkEkkAuAdv5JQELeXm/ERqTuokfFnv9hgFAATIUJl5mIxEABQAA/tsG2wbbABMAGgAjACoAMgAAAR4BFREUBiMhIiY1ETQ2MyEyFhcHESEmJwEmAREhIiY1ESERAREhNTcXAQQiJjQ2MhYUBo4gLUAt+gAuQEAuBAAubSCXAa4LDv6aDgGW/iUuQPySBSX7btuSAbf+EraAgLaABSkgbi362y5AQC4HJS4/LSBO/lIhDgFmDvk5BJJALgHb+SUCAP6S29ySAbaSgLeAgLcAAAkAAP7bBtsG2wADAAcACwAPACMAKgA3AEoAUgAAATUjFQU1Ix0BNSMVBTUjFQEeARURFAYjISImNRE0NjMhMhYXBxEhJicBJgERISImNREjFSM1IREBExYVFAYiJjU0NzYTNTMVMzIWAjI2NCYiBhQC25IBJZOSASWTA7MgLUAt+gAuQEAuBAAubSCXAa4LDv6aDgGW/iUuQJKT/bcC63oJpv2mCRhxklsZJ9d5VlZ5VgUlkpKTk5OSkpKSkpIBuyBuLfrbLkBALgclLj8tIE7+UiEOAWYO+TkEkkAuAduSkvklAzj+cR8dX3x9Xh0fSAF8k5Md/dQsOywsOwAAAAAGAAD+2wbbBtsAEwAaACMAOQBMAF4AAAEeARURFAYjISImNRE0NjMhMhYXBxEhJicBJgERISImNREhEQEWBxEUBwYHIi8BIyImPQE0NjsBNzYBMjc2EicuAQcOARcWEAcGFhcWJzI3NhAnLgEOARceAQcGFhcWBo4gLUAt+gAuQEAuBAAubSCXAa4LDv6aDgGW/iUuQPySAjMXARYJBQ4MvpYQFBQQlr4SAfIjFpMBlBI+FxgFE3JyEwUYFdgfF2NjFT4rAhU7ATwWAxYXBSkgbi362y5AQC4HJS4/LSBO/lIhDgFmDvk5BJJALgHb+SUDogkZ/ZIZCQIBC78UENwQFL8R/OQbtgHSthgHFBM9GI3+lYwYPRIRqRdqASBqFgIpPRZBqkEXPBUTAAAFAAD+2wbbBtsAEwAaACMAMwBDAAABHgEVERQGIyEiJjURNDYzITIWFwcRISYnASYBESEiJjURIREBMhYVERQGIyEiJjURNDYzBRYVERQHBgciJwE1ATY3FgaOIC1ALfoALkBALgQALm0glwGuCw7+mg4Blv4lLkD8kgLcO1dXO/5JO1dWPAPpFxcJBRAK/tEBLwoQBQUpIG4t+tsuQEAuByUuPy0gTv5SIQ4BZg75OQSSQC4B2/klBABXPP5KO1hXPAG2O1gDCRn9bhkJAgELATBmATAKAQEAAAAABgAA/tsG2wbbABMAGgAjADcASwBbAAABHgEVERQGIyEiJjURNDYzITIWFwcRISYnASYBESEiJjURIREBPgEfAR4BBwMTFgYPAQYmJwEmNyEWBwEOAS8BLgE3EwMmNj8BNhYXAS4BNxM+AR8BHgEHAw4BJwaOIC1ALfoALkBALgQALm0glwGuCw7+mg4Blv4lLkD8kgGTCR0NOg0DCdDQCQMNOg0dCf79EBAElxAQ/v4JHg06DQMJ0NAJBAw6DR4J/j4PEQKeAhkPSA8RAp4CGg4FKSBuLfrbLkBALgclLj8tIE7+UiEOAWYO+TkEkkAuAdv5JQQADQMJLAkeDP7q/uoNHQksCQQMAVgWFhYW/qgNAwksCR4MARYBFg0dCSwJBAz8mQIZDwO2DxECDAIZD/xKDxECAAAAAQAt/4gGrwbbADYAAAEVBiMGAgYHBicuAwoCJyEWGgEWFzYTJgI1NBIzMhYVFAcOASIuASc2NzQmIyIGFRQWMzIGr3NvSua6NVteIEt4coNuZB4BQx5ki4tawYeiue7Ny9pCCB1NQ0oVIwFDOT1J8LpHAyriGpv+y7geMzYTPYOjAQEBLQGi7fn+Y/7I4m7BAQ9SAVPT2wEY8du2kQEFDi0kdlxjaHFo1fYAAAgAAP7bCAAG3AADAAYACgAOABIAFQAZAC0AABMBEQEFNycJASUFJy0BBScBEQkBFxEFJQERBREUBwEGIicBJjURNDcBNhYXARb3ArH+gv6G3d0DqAKx/s3+glgBN/7J/smfAX79TwV83f6GATP9TwOoJ/xYGDIY/FgnJwOoGDIYA6gnAaP+NQGaAP8pk5T8aQHLzv+Z0NDQawD/AZr+NP7IkwEnKc0BzP5mMv2QLxr9kA8PAnAaLwJwLxsCcA8BDv2QGwACAAAAAAklBkAAIwBaAAABHgEVFAAjIiYjISsCJgA1NDY3JjU0NjMyFzYkMzIEEhUUBgEUFjMyNy4BJwYjIiY1NDYzMh4FMzI2NTQmIyIHHgIXNjMyFhUUBiMiLgUjIgYICX+d/vK/BRED+poBAgbC/vJ+aQ68hW1YVgFRzL4BQLoB+g7Ajp11EkgOTVg/WFg9Ml1KSlRcgkqKv8CNo3AQIywLS1g7W1RBMVtKS1RefkiLwwNpNeOLu/71AQsBCbx+1D4tMYO5QrDXuP7Fuwcb/smLo3IXUxBKTD49TTBOXV5OMKSIiqJvEikyDklLO0FPME5eXk0woQAAAAAGAAD+2wgABtsADwAXAB8AJwAvADcAAAAgBAASEAIABCAkAAIQEgAkIAcXNjIXNwE3JjQ3JwYQACA3JwYiJwcSIAAQACAAEAUXNhAnBxYUAzABoAF7AROiov7t/oX+YP6F/u2iogETAyT+TsTeXsJe3vtc3iAg3mcClQGyxN5ewl7e5wFsAQH+//6U/v8D4N5nZ94gBtui/u7+hP5g/oX+7qOjARIBewGgAXwBEhBn3SAg3ftd3l7CXd7D/k39bGfdICDdAVABAQFrAQH+//6VCd7DAbPD3l7BAAAAAQAl/wAH2watACEAAAEUAgAEICQAAjU0EgA3EQYAERQSFgQgJDYSNRAAJxEWABIH25z++P6S/m7+kv74nN0BgOz9/rR0xAEOASoBDsR0/rT96wGB3QLbyf6T/vidnQEIAW3J8wGpARIk/vsz/m3++ZX+8sN1dcMBD5QBBwGTMwEFI/7t/lcAAAEAFv7bB+sG2wBjAAATNhI3MDMUBw4EHgEXHgE+AT8BPgEuAS8BLgMvATceAR8BNiYvATcXDgEPAT4BPwEXDgEPAQ4BFhceAT4BPwE+Ai4ELwEmMzAXHggXEgIAISIkAAIWCffhBgIJLUpAJQVUUjl3WEcSEy0fER8PEAsvMzAQD3ctWBcWAS0YFri2JiwDBRlbICB1Ml4VFiMnFjYmZlxRGRhFUxwFJDA4LxAPEAgLLjRaOE4xNyAVAQP9/jX+3NP+hP70mAL1+AGwkwECCTt0iK6qvlE5LRIkExI6loNyIiEdOCYdBweEE1EeHjd+JSPRzjWBJyYqUhMUhBBSISFAstNJMyQXJhMSPY6IjYB2X0YTEw8DISdMOVtVdHeVUf7Y/in++aoBGwGDAAkAAP7bCAAG2wAMABsAKABQAF0AbAB5AIkAmQAABRUmJCc3Fhc3FhcHFgEHFhcHJhA3FwYHFwYVFAEXBgQHNTY3JzY3FzYDBRYUBwUGBycGBxMGIicTJicHJiclJjQ3JTY3FzY3AzYyFwMWFzcWARUGBxcGBycGByc2JAAQByc2Nyc2NTQnNyYnNycHJicHJic3Jic1FgQAEAIAJCAEAAIQEgAEICQAEhACAAQgJAACEBIAJCAEAAPn7v5sekMhMkqp/BNK/ZReGR9CcHBCIhZdKAXAQ3n+a+5AShP7qkoyi/71EBABCiNN1EFnNztqOzdnQdRNIwEKEBD+9SZL1ENlNzJ8MjdlQ9RL/edKQBP7qkorKEF5AZIEpXBCHxleKShdFiJCGkEoK0qp/BNASu8BkgE0m/78/pf+dP6X/vybmwEEAWkBjAFpAQTNov7t/oX+YP6F/u2iogETAXsBoAF7ARN1SwfsxSc4OUHAMmMOAl0gRTsmzgHVzSVAQCBygXz+wCfF7AdLAQ5jMsBBOQKxWzBjMFtpWLlNFP7sCwsBFBVMuVhpWzBjMFtqV7lOFAETCwv+7RVNuVcCdUwCDGMwwUAwQCbF7P1W/ivOJjtFIHZ8gHMgQEAlLCZAMEDBMGMNAUwH7PySAYsBaQEFmpr++/6X/nX+l/77mpoBBQL+/mD+hf7uo6MBEgF7AaABfAESoqL+7gAABwAA/24G2wZJAAcAEAA5AEUAaQBzAIMAAAEUByI1NDM2AxQjIjU0MzIWNzUGIyYjIgYVFBYXFQYVFBcVBhUUHgIzIDU0JicuATU0Nz4BNTQnNhMzJicRNDcjFhcRBgU1BiMiNxEzMhYzNSM0NyMWHQEjFTY3MhYzFSMVFB4DMzIBNCYiBhUUFjI2JREUBiMhIiY1ETQ2MyEyFgKZanpwdClVWFgpLL5ZQjlEYodDMisvgS1OVzEBAG5ZHzg4WGcLKlGdAgEDnQMBAQJDIiw9ATsKKAt4A6AFRSkBAxMFAwYVI0ArSv6bN1I4OVA4ArvBiPu3iMHBiARJiMEBBUsBSEkBAc5hYGc7K48hIYNiOXcRAxNPPRsDKnUzTSgS101IEAYkGzIJEX5bGyAK/iYfPwG6NRoaN/5AOQuLGF0BAQKGXhYbIzaGAwECAvgqPkMsGwNCKT8+Kik9Pl/7t4jBwYgESYjBwQAABgBO/tsHsgbbAAcAEAA8AEgAbAB3AAAlNCMiFxQXMgM0JiMiFRQXMgEVBgcWFRQGBw4BFRQeBRUQBSIuAjU0NzUmNTQ3NS4BNTQ2MzIXFgEjNicRNCczBhcRBiUVBiciLgM1ETM1IiYjIgc1MzU0JyEGFTMVIiYrAREUMzIAFAYjIiY1NDYzMgKovbUBxK1DRUOOjogBMykxEqeOLiw0UWJiUTT+YU+LfkrQTUhSbdmgbl5wAfT9BQEE/QUBAQK0UXZHZjkiCQMIHAcYK24HAQMHxBFCEGFkRf2lWUFCXFpEQhlydnMBA9dGXaWaAQIP5w4LMS+RzBsJKy0jLxoYIzNfQf6lAR1BelW9RAUvYX0fBRvBXZ/TNQH8RzNnArhrJyZo/URny+AtAS1FbmREAZEEAwfZVz4nL43ZBP5flgSjhWNjQkNlAAIAAP9uBtsGSQALABsAAAkBIwMGBycDIwERMwERFAYjISImNRE0NjMhMhYDnQEwgLQbFzCxiQEsdAM+wYj7t4jBwYgESYjBAmACOv6cNzJpAWT9zf6OBAv7t4jBwYgESYjBwQACAEH+2wV2BtsAHQBJAAAAFAYjIicGBwATFgYHIyImJyYSPgI3NjcmNTQ2MgQQAgQjIicuATc+ARcWMzI+AjQuAiIOAhUUFxYOASYnJjU0PgIzMgQDwoJaRTpHPf7mNAEfGAYXIgIQGCtQTi5GUBKBtwI1s/7NtUlMGBsGBikYOkFvzJJXV5LM3cySVzsLDisvDElqs/eGtQEzBKm3gShNWv5Y/dMZJgMfF5ABFtrPlURnVigwW4E0/pf+zbIQBioYFxoED1eSy97Lk1dXk8tvgncXLhYQFY2iiPeyabIAAAEAFf7bB+sG2wBpAAABJic0NjcmNjc0Ejc2MzIXHgYfARYVFAYVFB4BFR4BFRQGIyIuBCcmIwcGBx4CFw4BBwYhIi4BJyYnJiInDgEjIi4DNTQ2Nz4BNzI3NjUnLgEvASIHDgEHIyImJyY1EAE1CQEaDgEUENOPn9OYmDheRTknIxcOAT8VAwVYYywpChkTGA0SAQECBkNUF18/CQIFBkn+8D2DXUkRCRBJCS/GXihNh2BKFiQNQxcFCwICN4kPBgUJFVMuAgUEAxoDQhYmF0ISGUcOnwFVRUs+GD5CWlBxW0IGX00QOw4BBgUBguZ8MYIRFyQYJAIBBLBPFyo1MAUbB28VGRYGAgUCMy8EER49Ky4sIQIaAQICAwMN2EYEFy9MBQoBPjUBOgAAAAYAAP8iCSUGlQAJABUAHwArAEcAWQAAADQmIyIGFBYzMgE0JiMiBhUUFjMyNgA0JiMiBhQWMzIBNCYjIgYVFBYzMjYBJgciBAIVFBcGByIuAycFNyQRNBIkMzIEEgEUBgcXJwYjIiQCEBIkMzIEEgKXOS8xTEwxLwOKOi4fMzMfLjr+8jgvMUtLMS8DDjstHzMzHy07/tAjLcH+u7oaKCUeN0cfXQv+31L+td8BfOLJAWXyAsidhj/jq07B/ru6ugFEwrgBRMQEnl06O1o6/iMgMjMfIDMyAjZdOjtaOv4jIDIzHyAzMgHnBQGw/tSyWVUDAQQLBRMDkvroAUjBAUS7l/72/NqG82TPfSqhARQBRwEVoaH+6gABAAD+2wf/BtsAHgAAARYHAQYHBiMiJyUBBgciJy4BNREJASUmJyY3ATYzNgfgJgf+2wYeEBQNDv36/uwVIw8LFhoD3Ps6/j0qBAInB20RFBcGzxsu+SQhEgkF1P6vGgEFCCYXAY4Eu/vfuRAvLhUESQoBAAIAAP7bB/8G0QAaACAAAAEWBwEGBwYjIiclAQYjIicuATURJSYnJjcBNgETAQUJAQfgJgf+2wYeEBQNDv2m/qsVIRAKFhn95SoEAygHbSj+n/35mQGAA9r93gbPGy75JCESCQX2/ooYBQgmFwIE3RAvLRYESRj5NQXo/E+dAtr8cQAAAAIAAP9uBtsGSQA0AEkAAAAQAgYEIyIkJyY2PwE2MxYXHgEzMj4CNC4CIyIGBxcWBwYnISImNRE0NzYfATYkMzIEFgURFAYjISImPQE0NjMhETQ2OwEyFgbbi+v+u7LF/p59CAEKnAsSEghT84h32J1dXZ3Yd3DOUJ0jExMx/gAeKy4tIpR6ATuosgFF6/2wFRD+kxAVFRABABQQSRAVA47+m/687IullwsdCZ4KAgttd12e2O3Ynl1SS54iLS4BKx4CADATEyOTc3+L7K3+ABAVFRBJEBQBkxAUFAACAAD/bgbbBkkADwAbAAAAIAQGAhASFgQgJDYSEAImABACBCAkAhASJCAEBAL+1/7xw3V1wwEPASkBD8R0dMQByuv+bf4i/mzr6wGUAd4BkwW3dcP+8f7X/vHDdXXDAQ8BKQEPw/6I/iP+bOvrAZQB3QGU6+sAAAABAEf/bge5BkkAhQAABSImIyIGIyImNTQ+Ajc2NQM0JyYHISIHBhUDFBceAxUUBiMiJiMiBiMiJjU0PgI3NjUnETQ2LgQnLgEiJjU0NjMyFjMyNjMyFhUUDgIHBhUTFBcWMyEyNzY1EzQnLgI1NDYzMhYzMjYzMhYVFA4CBwYVExQXHgMVFAYHgjLKNDLJMhsfJzNCEiYBAQ8r/P0rDwECKxJJOS4dGzbTNTHCMBodIy8+ESYBAQEDBQkQCxFENSkbHDXTNDDBMB0dJzFAEigCAQ8dAx8dDwEBKBVcOx0dMskyMcUxHRwoM0ISKAImEkU2KRySCAgvHCMjBAwLGIgBvxgMBQEECxn+WKIZCwgBISMeMggIMBsiIwUMCxqKQQOhAzUfOScsHAcLBSAjHjIICDIeIh8CBwwYnv6SGA0DAw0YAW6fFw0DGyseMggIMh4iIAEGCxqe+8qIGAsJAiEiHjIAAAEAG/9uBbUGSQAsAAABFRQGIyIHBgcGBxEUBisBIiY1ESMRFAYrASImNREmJyYnJic0NzY3NikBMhYFtSsbOQUeBgMBKR17HSmjKB57HiiocJBLSQFlZYp/AV0CJB0pBgNTIUkBBx0NPPrbHSgpHAVw+pAdKCkcAjcONkKKhqK+iYcvKikAAAAJAAD/bgbbBbcAAwATABcAGwAfAC8APwBDAEcAACUVITUlMhYVERQGIyEiJjURNDYzARUhNQEVITUBFSE1ATIWFREUBiMhIiY1ETQ2MwEyFhURFAYjISImNRE0NjMFFSE1ARUhNQGS/m4DJR4rLB3+2x4rKx4B2/wlAQD/AAbb/Lf/AB4rKx7+3B4rKx4EAB4rLB3+2x4rKx4Ckv8AAQD8JZKSkpMsHv7cHisrHgEkHiwBtpKSAkqTk/ttkpIFJSwd/tseKyseASUeK/23LB3+2x4rKx4BJR4rk5KSAkqTkwAAAAABAAD/bgbbBkkAJQAAATIWEAYgJjU0NyUGIyImEDYzMhclJjU0NiAWEAYjIicFFhQHBTYFbpjV1f7Q1gL+ZWmQmNbWmJBpAZsC1gEw1dWYkGn+ZAICAZxpAknW/tDV1ZgOGc5i1QEw1mLOGQ2Y1tb+0NVizhkbGc5iAAAAAgAA/24G2wZJACUANQAAADQmIyIHJT4BJyUWMzI2NCYiBhUUFwUmIyIGFBYzMjcFBhUUFjIBERQGIyEiJjURNDYzITIWBbePZWBF/uwCAQMBFEZfZY+PyZAC/u1HX2WOjmVfRwETApDJAbPBiPu3iMHBiARJiMEBIcmQQokSEBOJQpDJj49lCBKJQY/Jj0GJEghljwRu+7eIwcGIBEmIwcEAAAAHAAD+2wgABtsAEQAvAD4ATABYAGQAcwAAAC4BBw4BBwYWFxYzMjc+ATc2ARcBFxYGDwEWFRQCBgQgJCYCEBI2JDMyFzc2Mh8BAQYjIi8BJjQ3NjIfARYUEwYiLwEuATc2Mh8BFhQ2FAYrASImNDY7ATInFRQGIiY9ATQ2MhYXBwYjIicuAT8BNjIXFhQCmBc3HHu+MwsXHA8NMBQnlGAdBD81/ulOFgEVSmZ/2P7W/rn+1th/f9gBKqTQuEkWPBZNAR8LDg8LaAoKCx4LZwv8DRsMZwsBDAofCmgKJRUQbRAVFRBtEMYVIBUVIBWsaAsODwsLAQxnCx4LCgQeORcMMr57HTcLBi5gkycNAeo0/upOFjwWSbjQo/7V2H9/2AErAUYBK9h/ZkkWFk4BVwsLZwseDAoKaAog/u8KCmgKHwsLC2cLH9YgFBQgFbduEBQUEG4QFBRPZwsLCh8LaAoKCx8AAAMAAP7bCAAG2wAEABQANQAAASUFAyECIAQAEhACAAQgJAACEBIAATYTNQcBExcmJRcFJTcEBzcTAScVEBc3BRMHFiQ3JxMlArgBSAFIff5rBgGgAXsBE6Ki/u3+hf5g/oX+7aKiARMFDqoBdf7uSJmr/u49/rj+uD3+76yaR/7udasiAXSfhIYBGYWEnwF0Azfu7v6ABSSi/u7+hP5g/oX+7qOjARIBewGgAXwBEvqc6AEeBGYBAAFxDetXjra2jlfrDf6P/wBmBP7h55Yt/qtPLQEsTwFVLQAAAAAMAAAAAAgABkkADwAfAC8APwBJAFkAaQB5AIkAogCyALwAAAEVFAYrASImPQE0NjsBMhYDFRQGKwEiJj0BNDY7ATIWARUUBisBIiY9ATQ2OwEyFgMVFAYrASImPQE0NjsBMhYlIiY9ASEVFAYjARUUBisBIiY9ATQ2OwEyFgMVFAYrASImPQE0NjsBMhYBFRQGKwEiJj0BNDY7ATIWAxUUBisBIiY9ATQ2OwEyFgEVITU0BQQdASE1ND4EJCAEHgQRFRQGKwEiJj0BNDY7ATIWERUUBiMhIiY9AQIAFRDbEBUVENsQFdsVENsQFRUQ2xAVApIVENsQFRUQ2xAV3BQQ3BAUFBDcEBT9cCArAksrHwNtFRDbEBUVENsQFdwUENwQFBQQ3BAUApMVENsQFRUQ2xAV3BQQ3BAUFBDcEBQBt/21/kv+S/21Eztboc0BMwFsATLOoVs7ExUQ2xAVFRDbEBUrH/5JHysBANsQFRUQ2xAVFQGn3BAUFBDcEBQU/jnbEBUVENsQFRUBp9wQFBQQ3BAUFKcrH5OTHyv9ktsQFRUQ2xAVFQGn3BAUFBDcEBQU/jnbEBUVENsQFRUBp9wQFBQQ3BAUFAHCDwx3AwFzDA8TPFdWWEIqKkJYVlc8/hvcEBQUENwQFBQBhJMfKysfkwAAAAUAAP7bCAAG2wAQABQAJQAvADkAAAERFAYjERQGIyEiJjURATY3IREhEQERFAYjISImNREiJjURITIXAREhETQ2MyEyFgURIRE0NjMhMhYDJSweKx79tx4rAR0IGwNS/twEkise/bceKx4sAeUbCPxm/m4UEAFKEBQDAP5uFBABShAUBW78kh4r/W4eLCweAkkD5RoB/NsDJfwA/bceLCweApIrHgNuGwFk/wABABAUFBD/AAEAEBQUAAAAAQAA/tsIAAbbABwAAAAWFAcBFwcGBCcBIzUBJhI/ARcBNjIWFAcJAjYHq1Uq/jWst7r9+tP+Ys8Bno42urerAckrelUr/jcBDAHKKwUAVXkr/jest7o2jv5izwGe0wIGurerAcoqVHor/jb+9QHJKgAAAAAEABz+6QfkBtsACQAUADkAZgAAARQGIiY1NDYyFgUUBiImNTQ2MzIWARE0JiMhIgYVER4FMjYzNhcWFxYXNhcyHgI+BTcGBRIHBgcGJyY3AzUuAScDFgcGJyYnJhMkJyY2Fx4BFxE0NjMhMhYVETc2FgPmkcyRkcyRAj2QzJGRZmePAQJKWvsJX0MxaFFoO2UgYQNOHgcFHicIfwZIGk4rUjpTRlXiiv7hYHtLhndZYgUCCSUIAgVjWniGSnhf/uGKHTEsAxMDbEwFnU1rGC0wA45fiIhfYIeHYF+IiF9gh4f+0gL6Y1ROafz/GicZEQgBBAEgBwMdHWgFAwECBAcMExojHKp2/rrOgSglNjqCAXQBAgoB/n6COjYlKYPOAUN2qio7HgIMBAMaUnR0UvzmEh88AAQAcv9uB44G2wADAAcADwAZAAABESMRIREjERMBESERIRU3AREBIQcjNSEREwQApgJtpqYBIfqrAXX4A47+EP6L+Pj+OX0E6/4QAfD+EAHw/JwBIgON+1H4+AVU+3v+EPj4BSsBSgAABQBm/t0GeQbYABYAKwA/AE4AZQAAJRUCBwYHBiQnJicmNz4BNzI3PgEXHgEDBg8BBCcmJyYnJj4BFzIXFh8BHgEBDgEHBicmAycmNjc2FxYXHgEXFgEWBwYnASY3NiQXFhcWEgUWBwYFBgc3BiYnJjc2Nz4BNzYXHgEXA3MBBQ4tPv7dKA8EAQUFRK0BRBE4HBsfqwM4if7GFCgWDgUJFDAoD9hQM2AaHQOvCME6Kh4QwzUQBRQoNwGH6FkJIPz5BkRCQP5QCR8vAXxDLgoDKwL7AyER/plNGwEaNRAiIgFVjzkKICs3qwf4kf6yDyUICmswERgOEAtVzFAWDAoLLAEFPxEtZQECJx05V85OAlghFScKMf6NPvQXEBgLAT1YGDkYMRMBLUsfCBkCpnUXE2QCrCgfMWoRCygV/W/lLRYLVxEKAwcXGTYtAXTDTAYWExr9QQAAAAAKAAAAAAklBkkAAwAHAAsADwATABcAGwAjACwAOAAAASERIRMVITUBESERARUhNQEVITUBFSE1ARUhNQERIxEUFjI2JREhERQHITI2ExEUBiMhIiY1ESE1BJL+SQG3k/0kAtz9JAW3/bcCSf23Akn9twJJ/bf7bpMsOywHbfklDQafHiuTgFz4kluAASUEkv5J/tySkgNu/SQC3PySkpIBJJKSASWSkgElk5P7tgRK+7YeKyseBNz7JCYjKwWM+pJbgIBbBNySAAQAMAAPCPUGSQAJAB8AOQBRAAAkIiY1NDYyFhUUNyIuASIOASMiJjU0NzYkIAQXFhUUBgEiJyYkIyIOAyMiJjU0NzYkIAQXFhcUBgEiJyYkIAQHBiMiJjU0NzYkIAQXFhcUBgSpLqaOXo93AleRlZFWAxWsC1kBDgEHAQ1aC6wBIw0Nm/72rmHDkXNCAhOsC5cBrgG3Aa2XCwGsASMNDc3+Sf33/kjNDQwTrQvWAk4CZwJN1gsBrQ+oFyUyMyQXjjk5OTmrFQ8LWGRkWAsPFasBNgp4cTNGRzOsFA4Ml6anlgsPFasBNgqzt7a0CqwUDwvV6enVCw8VqwAAAA0AAP7bB24G2wAHAA8AFwAfACcALwA3AD8ASwBTAGMAawB7AAAENCYiBhQWMiQ0JiIGFBYyADQmIgYUFjIANCYiBhQWMgA0JiIGFBYyADQmIgYUFjIANCYiBhQWMgA0JiIGFBYyARE0JiIGFREUFjI2ADQmIgYUFjIBETQmIyEiBhURFBYzITI2EDQmIgYUFjITERQGIyEiJjURNDYzITIWAbdWeVZWeQINVnlWVnn+n1Z5VlZ5A8RWeVZWef6fVnlWVnn+n1Z5VlZ5A8RWeVZWef6fVnlWVnkDw1Z3V1d3Vv5KVnlWVnkCDCse+kkeKywdBbceK1V5VlZ56Fc8+bc7V1c7Bkk7WD16VVV6VVV6VVV6VQIMeVZWeVX+nnpVVXpVAgx5VlZ5VQIMeVZWeVb+n3lWVnlVAgx5VlZ5Vv0lAbc7V1c7/kk7V1cDbHlWVnlWAgABJR4rKx7+2x4rK/50eVZWeVYDbvklO1hXPAbbO1dXAAIACv7bBsgG2wAnAEUAAAEWBwIhIyIGDwEDBw4BIyEiJjc2EjYSNzY7ARY3Njc2NzY3PgEWFxYnFAcCBwYHFCMnIgcGAwYjISImNwE+ATMhMhYXHgEGyBUaY/3eMx0rBQU/AgYsHf7hGBsDCikUKQsGK5WYdsiAdTwbDQEEBAVarzRb/oGfZ2dyFQJfAQ3+rxkhAwEJBjQhAqsnkTd6gQP5YIn+BSYeFv51ER4mIxhAAQCAAP9AKgIaLXdtrVBIBwMBBEPMepP+9l4uAgEBbgn9qwsmGQaRISsdFi+8AAAABACI/24HfAbbABEALgA8AFwAAAEeAgYHLgQnLgE+ARcWJR4EBgIHBiMiJy4BNz4BLgInJjY3NjMyFgEGByYnNicmJxYXFhcWAR4DEgoBBw4BIyInLgE3NhI2LgMnJjY3NhcyFgKwFhsMLDEYaXFxQwRHLU6ZR54B5Q0WPSQXF1ZOOmM+MkEcLkUvEjciCCMzSCcvNl4BiBM/EzUdIx9MgnAKBx4BIQoiQjEdElpTGWU6LShNOiNCSQ0VKDAaBSc0SiozOGEEPUaPtbZLXa50WioBJ5aOLSdf3R0wtqL43v7/blIkLp1CYfzM0FURSJgkEzn80besloPH1cu8Z4oqMc0DJhNLwtX+zf7M/oa1Nz4SI55NkAEs9/GskTwHSqInFwE6AAcAAP9uCkkGSQAIAA8AGAAcAD4ASQBZAAABIzY/AT4BNxcFAyYjIQcEJQMnLgEnEzMBAzMTIwUmIyIGBwYXHgEVFAYjIi8BBxYzFjY3NCcuATU0NjM2HwElIyIHATM3MxYXMxMRFAYjISImNRE0NjMhMhYI0Z4QPAMFDgMO+blCDUn+zgMBZAE1uRMeh1KayAErK753vgL3T1uNsgEBpjcsRSxiURkaVX6VswOgODM4NVA+EQIAk0oZ/ufHKPIGEbCSVzv22ztXVzsJJTtXAnAqowoLJQs/iQFRPg9aaf4MZVCIIf26Atz9IgLeEh+HbHVRGioYIiUmDaUnAYlyeU4dJxgZJgEdCbE+/WBuGVUETPpJO1dXOwW3O1dXAAAAABAAAP9uCkkGSQAHABIAGgAkADEATwBsAIIAlQCjALkA1QDkAPMBHQEtAAABIyIVFBcyNiUzNTYuBCMGBSMiFRQXMjYlNCMiBhUUMzI2JTMDIzcHIycHIxMzFyUUBwYHIzcGIyImNTQ2MzIXND4BNTQjIgc0NzYzMhcHJiMiFRQWFxYVFCciJzQ3FjMyNTQmJyY1NDcyFzMHIw4CFRQXMjcHBiMiJzQ3NjczFxQHIwYWMzI3BwYjIjc0NjMyFjcGByYGByM3NjczBz4BNwcmIyIGFRQWMzI3BwYjIiY1NDYzMhcUBwYHIzcGIyImNTQ2MzIXNjc0IyIHNDc2MzIXBgcmBgcjNzY3MxQHPgE3MwMjNwYjIiY1NDYzMhcWEAIkIyIHFhcjJicGByM2NyYjIgQCEBIEMzI3JiczFhc2NzMGBxY3MiQBERQGIyEiJjURNDYzITIWAv8PNhcTGgHERwEBAQMHCwggAmANNxcTGQFuIhYbIBcc+Y1jMkAkUSwFJzwyXAMBYAUSATYBFysaIjw2EAoBASkhIggrIVWyCRkWHwoULmQnGwghGSULEzFgInwgCCICCgYWCQkJGBYxAgkDGj7iCH8DHR0iIAoiIG0BPzAoL54PChkUE0AEGQg6AxAa6QogGSMuHh0YHwwgGTM9UUAe4QQPBTQBFy0aIDo2EQkCASkhIwkrIlOhEAgaExRABBYLOwQRGrRAMjwDGiEjKz8qIxqMpf7hqc+okTI5MoKCMzkykajPqf7hpaUBH6nPqIkzOTV5eTQ5M4moz6kBHwG7Vzv22ztXVzsJJTtXArEkGQEjRAQFBQoIBwUBVCQZASM5Ly4jMC3G/tXl5eTkASu6QAcpcw4ZHiUdLTEBAwYFARcMBTINBTgDEwkJCBYvUgEHAjYJFQgLCRcsUgEFOxM3IgMSAQM2CDYOMheQeBoiGRkQPgltP1EwLBotAjt0EJVOJhgUKkEQPzEiJw9ECUY7UGaBFRtaJxkeJR0tMQEIBxcMBTINBBssAjl2EHdsDRkYFDL+1RUaNy49WCHnAVMBHad+hb+rdnarwIR+p/7j/q3+46d9f6+ebG2dr39+AacEovpJO1dXOwW3O1dXAAAADAAA/24KSQZJAAoAEQAbAB8AQgBXAGIAagBxAH0AigCaAAABFAcGJyM1MzIXFiUUByM1MzIFNCYrAREzMjc2FzMRIwE0JicuATU0NjMyFzcmIyIGFRQWFxYXFhUUBiMiJwcWFzI2BTUGIyImNTQ2MzIXNSYjIgYUFjMWAREOAQwCBSEyNgA0JiIGFBYyJRMjCwEjEzczNSM1MzUjNTM1IwEzJzY1NCYrAREzNTMBERQGIyEiJjURNDYzITIWAWYpIUUUFEYgKQftSRUWSPhfclptbVUzRCNKSgFtLz4hGR8YIRwnL0EyRSk1KgkWIBk3GzAyUjpJAT4qLzhISDQxLC4tVXZ1VDAFrUq2/pf+eP3O/tkHAR4r/DN5q3l5qwEnpVFnZlGi7tKIhISI0gG/W3hXR0BvSwoBSlg/9uU/WFg/CRs/WANjOiYeAfsfJBA7AXSDVWr+hCs6ZQF8/vcuMhcLFRASGB8zKj8uKC4TDwYOGRcfMi1JAUYvWCpKOTdNLFgXc6dzAf1kAlouZKeToDcrAymseXmseQkBh/8AAQD+eQtAZ0BUQf6EoBJZNjv+hJgCcvpXQFlZQAWpQFlZABIAAP9uCkkGSQACAAsADgAVABwAIwAmADoATwBbAM4A4gD5AQUBCQEkAT8BYgAAEzMnATcnIxUzFSMVJRc1FzQHIxUzMiU0KwEVMxYBNCsBFTM2BTMnJREjNQcjJxUjJyMHIxMzExEzFzcBFA4EIiYjFSMnByERIRc3MzYBFSMRMxUjFTMVIxUBERQGIyEiJjURMzczFzM1FzM3FSE1NzIXFSE1HgI2MzczFyE1FzMRIxUnIxUnISIHNSMVJiMhBycjFScjBxE0NjMhMhYVESMiBzUjIgc1IRUmKwEVJiMhBychESE3FzM1MzI3FTM1MzIWHQEhMjcVMzYBFAYHHgEdASM1NCYrARUjETMyFgEUBgceAR0BIzQ2LgMrARUjERcyFgEVIxEzFSMVMxUjFQERIxEBFCsBNTMyNTQmIi4BNTQ2OwEVIyIVFBY2HgElFQYrATUzMic0JgYuAjU0NjsBFSMiFRQeAQMRIycVIycjByMiNTQ7ARUiJg4EFRQWOwE3MxMRMxc1iGY0ApRUULqiogFqcdgtYF8uAUswXl0x/sIwXl0xAg1lMvuHTGtBbJYdmh1QhW1+eWFYAvcMFCAbLRsvCpBcX/7cASlbXu18/rT4+K6pqQapWD/25T9Yfxw/HfkWgRcCagsLAQE/GkkvYQodQB0BAyfQzhzUGv7jTy3FGzj9MjEx4xnBWVg/CRs/WIk6I8o/Gv6XI0HuGk7+9D45/nEBiD888RhDJMcJCQQCXUEkwET8xhwZHRRKGydPSrA3Qv7DHBgeE0oBAQYOGhVQSa84QgJd9/etqan+xksDY3WQkCcnODknPC6UiCkoODgoAREbSY+PJgEcKzEqHT0uk4cpQlupaouXHpkcVpOYSAgwEiMOEwcfKSFpb31xggPQe/0sWlo4Pj5ZfvhEJgFOLSFFAQI6IUUBLHs2/srz8/PzRUUBNv7aASbS0v2FFyIXDwgCAWhnZwE1ZWUBAR9AATZBOD8+/YL++j9aWj8DB0VFNDQ1NXEBEGIaDg0CA0VFQkIBsDMzMzMZGRkZb28zM80Bvz9aWj/8+RkZGRkZGRkZQkL+UEREZg91cQQJZBwcAQEeGi4KCiciPTMmGHEBNSIB5RsuCwomIj0KKREZCwhwATYBIf0XQAE1QDg+PgMK/soBNv0XYkIdEgsILCktL0EcEgsBByoQcyhCHQ8NAQYMKyItL0EcFwUHApX+y+joRUWYnkMCAQQLEyIVKy7z/tsBJdfXAAALAAD/bgpJBkkACwAXACMAOgBTAG4AhQCfAK4AuQDJAAABFAYjIiY1NDYzMhYlFAYjBzc2OwEyHgEFFAYjIiY1NDYzMhYlNCYrASIHAwYWOwEyPwE+AjIWMzI2ARM2JisBIgcmByIGFRQWMzI2NwYXFDsBMgA0JisBIg8BJyYrASIGFRQeARcGFRQ7ATI3ASU0JisBIgcDBhY7ATI/AT4CMhYzMjYBEzYmKwEiByYHIgYVFBYzMjY3FAYVFDsBMhM1NCsBIgcDBxQWOwEyNwEOASMHNzY7ATIWAREUBiMhIiY1ETQ2MyEyFgNTOiohKDkqICoDgjMyJRQCDRQZHhwBkTspISk5KiAr+eRYR7YWAksBCQdXFwIVAQ4UEhoDYnABYS8BCQdWEAQfTVJ0T0IgRRQFAQ5PFgICCQZYDQd5MwYTVQYJLDQBXg9YDQgBIwG1WEe2FwJKAQkGXg4EFQEOFBMZA2JxAWEvAQkHVxAEHk5SdE9CIUUTBA9PFvwPVQ0BSwEJB0wWAvhTBjAsJhMCDRYuKQiCVzv22ztXVzsJJTtXAtAqOCQgKjsmiTAiAXoNBRjBKTkkICo7JqJDPRX+LQcLFn4JCwQDb/7+ASoHCyUuAXtTQ1EcFg4KEgE9CwoLsqsSCgYCgpcFgAkPDAGkQEM9Ff4tBwsPhQkLBANv/v4BKgcLJS4Be1NDURwWARIFEgHpARAM/iQCBgoWATooGQF6DRsCJPpJO1dXOwW3O1dXAAAKAAD/bgpJBkkACgAPADIASABXAFsAbAB0AIsAmwAAARQHBiMiJxE2MxYFIzYzMgE0JicuATU0FzIXNyYHIgcGFRQWFx4BFRQHIiYnBxYzMjc2ATcjNQ8DMxUUFxYXMjc1BiMiPQEFNSYnIgYHJyMRMxE2NxYTMxEjBTQnJiMiBycjETc1FjMyNzYANCYiBhQWMgE0JyYjIgYVFBcWMzI3JwYHIicmJyE2ExEUBiMhIiY1ETQ2MyEyFgchGBYlGhUhIEEB9X4HOTv5DUtOKSUsQksVTV1YNTdKTS0jNyFeIxVSbl03OgFRFm6TFTQURzIrVCU1JQ0wAcERDyU1CwyWrB5AEjarqwLGMy5RST0Jl6wpJV86Rf3qNUs1NUsENzc5bG5+SD95c0QTQVExFxoGARwCklc79ts7V1c7CSU7VwLTTyooCwEAIgFhcP71Q0sdDxkQHgElgCUBKy1QQkocEBoSIwEdFIEvKy4BTX+aGIIJdvpgKSIBDYcIOeEdnwMBJSJA/eYBXSMBAf6AAhr+i0I7QDb9HxytDUBKAgVMNDRMNv7EgUhJl4KSRT8udiMBFhY1EQMT+kk7V1c7Bbc7V1cAAAMAEP7bCRQG2wALABcAPwAAARIFFAYjIRQGIiYnBTI2IyImNTQiFRQWARYGBwEGJi8BJjY/ASY1PgMSNTQANyY1NDYyFhUUBx4BFwE2FhcG9UYBDlc7/gCs8qoBASQSARNDYSV2BMwJAQv3pQsgCWAJAQzUFjleZUYsAQzZCUBbQAmO2TwB3gsfCQMO/mnlO1d5rKt5yCRiQxISU3YHJAsfCvjCCQIMbQsgCbglJjBpqMMBFJ+uASogFhcuP0AtFxYVk2oBnwkCDAAAAAQAEP7bCRQG2wALABYAJgBOAAAENCMiJjU0IhUUFjMJAS4BIyIOAhUSARQGIyEUBiImJzchJgM3EgEXFgYHAQYmLwEmNj8BJjU+AxI1NAA3JjU0NjIWFRQHHgEXATYWBKUTQ2EldlP9rQPqMM+Yaq9nNwEFbVc7/gCs8qoBqgNhvkV/RQFxYAkBC/elCyAJYAkBDNQWOV5lRiwBDNkJQFtACY7ZPAHeCx/JJGJDEhJTdgIxA2VlhUhwfDr+Sf4AO1d5rKt5k9YBN2/+aQVSbgsfCvjCCQIMbQsgCbglJjBpqMMBFJ+uASogFhcuP0AtFxYVk2oBnwkDAAAAAAUAAP9uBkkGSQAPAB8ALwA3AFsAACURNCYrASIGFREUFjsBMjYlETQmKwEiBhURFBY7ATI2JRE0JisBIgYVERQWOwEyNgEhJyYnIQYHBRUUBisBERQGIyEiJjURIyImPQE0NjMhNz4BMyEyFh8BITIWAkkUEEoQFBQQShAUASUVEEkQFRUQSRAVASQUEEkQFRUQSRAU/ZMCADcIDP6WCwgD7BQQbmxL/ElLbG0QFRUQAWFQEVkuAW0uWRFQAWIQFLcDJBAVFRD83BAVFRADJBAVFRD83BAVFRADJBAVFRD83BAVFQR+hQoDAguqSRAV+8VfioVfBEAVEEkQFb4qPDsrvhUAAwAA/24G2wZJACwAPABIAAABFRQOAiMiADU0ADMyHgMdARQHIyI9ATQmIyIGFRQWMzI2PQE0NjsBMhYAIAQGAhASFgQgJDYSEAImABACBCAkAhASJCAEBSJThIpB6v7FATfoJ192XUAShxKWUqDK0aJOoAoHiAcL/uD+1/7xw3V1wwEPASkBD8R0dMQByuv+bf4i/mzr6wGUAd4BkwIQfTlZMRkBPuzoATcKHy9SNHwSARNQMTjRp63hNzBQCAoKA591w/7x/tf+8cN1dcMBDwEpAQ/D/oj+I/5s6+sBlAHdAZTr6wAAAAIAAP9uBtsGSQAOAGIAAAE0JiMiDgIVFBYzMj4BBRQOAgciBiMiJyYnDgEjIiY1NBIkMzIWFz8BPgE7ATIXFgcDBhUUFjM+BDUQACEiBAYCEBIWBDMgNzYWHwEWBwYHBgQjIiQmAhASNiQzIAAEV3psSItwRnpvbrdhAoRUjaBVBxYIbTUgBju2bLjKlwECmGOcLAIMAQsGhgYJBgKJBhwlIEJlSzf+cv6zlf7xw3V1wwEPlQEFyg0dCS8JAQIMdf7imLL+u+yLi+wBRLMBiQHkA2Z7jEZ8vW+AjJjkFH/EcDoDAT0mOUtl2sezATCxUUkWQAcNDAYM/UIbHC0dAQotRYdZAU4BjnXD/vH+1/7xw3WlCgINOA4NDwtfZovsAUQBZQFE7Iv+GwAAAAIAAP7bCAAG2wAjACgAAAAWEAcFFx4BDwEGIi8BAQYrAQUnEzU0NwEnLgE/ATYyHwEBNgkBJwEVBynXa/7+dwsBDPALHgt4/U8qPej+20mSKwKxeAsBDPALHgt3AP9q/E8Cktv9bgbb1v7Ra/53Cx4M8AsLeP1PKpNKASToPSoCsXgLHgzwCwt3AQFr+W4Cktz9btwAAAAAAgAA/tsH/gbbABAAKQAAATIWFRQHAAcGIyImNTQ3ATYBHgEfARYAIyIuAjUeAzMyNz4EBzZQeDT+hZhvipDPaQLZRPxCLZpfAQX+zvaN2IRCCE5ARxEvEB1JVXV3BttqUEhk/TGNaNSRkmAClj37Y1d8GVHz/s1ruemHBjktJipLa0MpEgAAAAUAAP7bCAAG2wArAGwAfACMAJwAACURIREyPgE3PgEyFhceAjMyPgE3PgIzMhYXHgIyPgE3PgEzMhYXHgITFSImJy4CIyIOAQcOAiMiJicuAiMiDgEHDgIjIiYnLgIjIg4BBw4BIzU0NjsBESERIREhESERIREzMhYBFAYjIiY1ND4ENTIWBRQGIyImNTQ+BDUyFgUUBiMiJjU0PgQ1MhYIAPgAM1wrICIyUC8kISlcNDNcKSMYGi0bKDEiICxbZ1wrICIxKCcxIyArXDMoLyQhKls0NVspIRkZLhsoMSMhKVs1M1wpIhgbLBwoMSIgK1wzNVspIiIxKIBbSgEkASUBJAElASRKW4D6SVJAPVUVICcgFitnAklSQD1VFSAnIBYrZwJJUkA9VRYgJiAWK2eS/kkBtyAfHB8ZGh4dHiAhHR0WEhAaHhsgICAfHB8ZGh4bICABbtsZHx0dICAeHBYSEBkfHR0gIR0cFhIQGR8bHyAgHhwfGdtbgAIA/gACAP4AAgD+AIADgFheVT0hMhwkJEIrqVdYXlU9ITIcJCRCK6lXWF5VPSEyHCQkQiupAAIAAP9uCSUGSQAFAAsAACEVIREzEQkBIREJAQkl9tuSBtwBJPiTAgACkpIG2/m3BJL8AAKTApL9bgAAAAMAAP9uB7cG2wALABAAFgAACQEGBCMiJAIQEiQzEyEUAgcTIREyBBIDbgJwef68s+/+bOvrAZTv1QN0iXy8/JLvAZPsAuL9kHuJ6wGUAd0BlOv8krP+vXoDAwNt6/5tAAIAAP9uCSUGSQAFAB8AACEVIREzEQERFAYvAQEOAScJAScBNjIXCQEnJjYzITIWCSX225IIACwTiv0tCx4M/vb+JNsCnQseCwEKAhOLEhQYAfEQFJIG2/m3BZL+DxgTEor9LQsBDAEK/iXbAp0LC/71AhOKEi0VAAEAAAAACAAE9gBgAAABFBceAxcEERQGIyIuBicuAyMiDgEVFBIzMjc2NxcGBxcGISIkAjU0PgIzMh4GFxYzMjY1NC4GJyY1NDYXHgEXIx4CFwcmJzUmIyIGBcULCyM7KSsBc/GqQ3lZVzlBIjgNJUNliV1ux3X0s8pdQB9gESEBlv7aqP7om2Om5HhjpXVkQkMwQx1unV2DLEhdZGRVQA0DyH9ZYTcBDhkiBZQeIBpUOFADtwcoIS8fDwto/uyn3Co+bVuRWpogXXdlLX7Mbrf+721IPa4nKQGutQElp3jnrWksR3BymYOnPuVvXDBEJSMbM0N4UBIUfrsEAxswDR40BnE4GAEYSwAAAAACAAD/bgbbBkkAVwBnAAABNCUuAic0LgE1NDYzMhcjFhc3JicuASMiBhUUFx4BFx4DHQEWBiMiJy4FIyIOARcVHgIzMjc2NycOASMiJjU0NjMyFhceBzMyNhMRFAYjISImNRE0NjMhMhYGZf70KCkuCgUCOCk+EwEXFmotCyZOO1uOAhJwciEuOR8BX0NvUBpCLE9ak19z0HkDBWrHfdVpFw1FMIJmg668doCFNQkoGS8pP0BXMHqudsGI+7eIwcGIBEmIwQIpxksLECogAg8NAik2EREqUT4MIReEWwgTbmQhCREgLx4GQlClNqp0iFM4gNNyAXvRgX4fG31bU8eGeMB7iBhsQmhCTS0fnwNP+7eIwcGIBEmIwcEAAAMAAAAACSUFtwAPAB8AMwAAADQuAiIOAhQeAjI+ASQ0LgIjIRYSEAIHITI+ARIQAgYEIyEiJCYCEBI2JDMhMgQWBSVdntjt2J5dXZ7Y7dieA8pcnth3/keIn5+IAbl32J7vdcP+8ZX8kpX+8sN1dcMBD5QDbpUBD8MCZe3Ynl1dntjt2J5dXZ7Y7dieXWf+zf6g/s5nXZ4B4/7X/vHDdXXDAQ8BKQEPw3V1wwACAAAAAAklBbcAEwAjAAAYARI2JDMhMgQWEhACBgQjISIkJgQyPgI0LgIiDgIUHgF1wwEPlANulQEPw3V1w/7xlfySlf7ywwVd7tieXFye2O7YnV1dnQJHASkBD8N1dcP+8f7X/vHDdXXDpl2e2O3Ynl1dntjt2J4AAAAABQAAAAAKSQW3AA4AEgAYACwAXAAAASEiJjcTJiciBhAWMzI2AzMmJwUBIQcWFwQQJiMiBxMWBgcGJyInAwYHFBYgABAAIAA1NDY3JwEGKwEGBCMiABAAMzIXNyEiJjQ2MyEVIScjIiY0NjMhMhcBNjMyA2f+mS4oHNdKU5fX15eDyrvVFUEBpgFJ/dtxeBgFvdeXRUXHEQwZERgoFMdqAdcBLgFp/tT+Wf7TWlBK/m0VJuEa/uDA0/7TAS3TgnSc/wAeKywdAbcB8WH+HissHQElJhcBMWhz0wG3UCQBHyMB1/7S16YBEWFIqQG3l3aq4AEu1xz+1xo8EA0BIQEpbZSX1wJB/lr+0wEt02/GSHD96B67/AEtAaYBLT/RLDssk5MrOywg/jcyAAAABQAA/tsG2wbbAAcADwAfACsASwAAADQmIgYUFjIkNCYiBhQWMhMDLgEjISIGBwMGFjMhMjYANCYjISIGFBYzITIBESMVFAYiJj0BIRUUBiImPQEjETQ3Ez4BJCAEFhcTFgG3VnlWVnkE6FZ5VVV5IlMGJxv75xooBlIGLCIEviIs/vcgF/0lFyAgFwLbFwHpklZ5VfySVnlWkh11CssBQwGHAUTKCngaATF5VlZ5VlZ5VlZ5VgJXAbcaIiIa/kkiNTUCxy4gIC4g/Pr9T5I9VlY9kpI9VlY9kgKxgH8CB1mHRESHWf35dQAAAAADAAD/dwklBtIACwAuAFIAAAAUBiMhIiY0NjMhMgU0JyEiJjU0NjMhJiQjIgQCFRQXITIWFRQGIyEWBDMyJDYSARQGKwEWFRQCBgQjIAAnIyImNTQ2OwEmNTQSNiQzIAAXMzIWBog5KfzdKTk5KQMjKQEuG/ueKTk5KQQOZf6wxsr+qMgaBGMpOTkp+/JlAVHFlwEVx3cBqDoplROW+/6jv/7n/jFx2Ck5OSmXE5X8AVzAARgBz3HXKToDTVA7O1A6YmJgOSgpOaPByP6pymJhOSgpOaPBdsgBFAG7KDlhYb/+o/yWATD4OSkoOWFivwFc/ZX+0Pg5AAYADf7bBaoG2wAHAA8AGwAsAHUAowAAAQMXEic0IwYBFhc2Ny4CARQTNjMyFwMmIyIGAxQeATMyNjU0Jy4DIyIGAxQXFgQzIDc2ETQuAScmJCMiBwYVFB4ENzIzMhcWFwYHBgcOARUUFhUHBhUmJwYjFhUUBiMiJjU0NxYXFjcyNjU0JiMiBgc0NjcmNTQ2MzIXAjU0NjMyExYXPgUzMhYVFAMeAxUUAgYEIyInJgIEQYKGvQErQv5XIgQqJw4vKf6itRUjEUWKVjcWFlt2lycQGiQPLEFLIRc7tBxDAR20AQOxrgIYF0D+nYQqDg4yTWRkXiESCBsTEQUgTkYkSWYqAwWdCgklAl09XsElOwpYQA4hyCExPoJhayCMRSEvul5Zlt0HAgc1L0xHWitRXrZGWisQa8L+4K5/gKr5BSv+ihgCA01AAfvuWwkwHAIJBwQGcP4dCwUBkfso/IYpvqAeEBtZJVtwST3+ai9IprvCwQEnMTdXFTg8DAYiJzwgFQUEAhYWKSAdGRw1m08jhCIODgIL7AIIED1Tsl0nJUkOdwETDif9ZT9zjh5VIUeMEQIQeFtz/WgTBxKSfaZzU3BUe/4HEUdsakmr/tbZfjBBATQAAAQAAP9uCSUGSQAaADYAWwBfAAABMw4BIyICNTQSMzIWFyMuASMiBhUUHgIzFiUzDgEjIgI1NBIzMhYXIy4BIyIGFRQeAjMyNiU0JicuAicmISAHDgIHDgEVFBYXHgIXFgQhIDc+Ajc+ARMRIREDge0QwZW51NWgqcAP6AZFO0FIDB0+LWwDPusQwJS51NWgqcAP6QVHOUFICx49LDg/AaEjNAcRIAJi/UX9NmEGHBQHMyIiMwcVGgcyAb8BOgK5ZAYbFAU1Itz22wJbtc4BCeXeAQzHt0lQioY3UkwpAZ+1zgEJ5d4BDMe3SVCKhjdSTClW0O3lRQkOFQJISAURDwlF4+/u40UJERAFJiVLBQ8QC0XhBFb5JQbbAAAAAgAAAAAGJQZJAB0AOwAAAREUBisBIiY1ETQmIyERFAYrASImNRE0NjMhMgQSAREUAgQjISImNRE0NjsBMhYVESEyNjURNDY7ATIWBG4VELcQFLeA/skVELYQFRUQAhKaAQWYAbeY/vua/e0QFBQQtxAVATeAtxQQtxAVBBL9yRAUFBACN4C3+twQFRUQBgAQFJj++wF5/BKa/vuYFRAESRAUFBD8kreAA+4QFBQAAAAEAAD/bgbbBkkADwA+AFMAYwAAARUUBisBIiY9ATQ2OwEyFgERNCYrASIHJicjIgYVERQ7ATI3ETQ2OwEyFhURFDsBMjURNDY7ATIWFREUOwEyJTU0JiMhIgYVERQ7ATI9ARY7ATI2ExEUBiMhIiY1ETQ2MyEyFgXaHxvnGyAgG+cbH/3QSj2YTh8gTpU9SRg+GQEeHWsbIRg+GSAbbxsfGT8YAqFLPf7TPUsZPxgjSNo9S5Cbbvs3bpubbgTJbpsDGYIbISAcghshIf7eAR49Sjw7AUo9/uIZGQEHGyEgHP75GRkBBxshIBz++RmHsD1KSj3+KxgYzjBKAv37N26bm24EyW6bmwADAAD/bgbbBkkAAgAJABkAAAEhEwEhASEBIQkBERQGIyEiJjURNDYzITIWBBb+sKgBCgFj/o7+Cf6OAWMBtgLCwof7t4fCwocESYfCAgICdvwaBJP7bQFnAwf7t4fCwocESYfCwgAAABcAAP7bCSUG2wBNAFUAZABrAHAAdQB7AIIAhwCMAJQAmQCfAKMApwCqAK0AsgC7AL4AwQDEAM4AAAEUBgcDFhUUBgcDFhcUBiMiJyEGIichBiMiJjU0NwMuATU0NwMuATU0NjcTNCY1NDcTJjU0NjMyFyE2MhchNjMyFhUUBxMeARUUBxMeAQEhASMBITYyARYVFAcTMh4BFzcRJwYHASEXJSEGIgE2NycHIzcJARcBNxMhATYFMwEhERcWAyE3AQ8BMzUHFhEUFhUUBxcRNxEXAQMnBxE3JwYlIwETFQkCJScRBQczCQETLwImPQEDJicJAhEDEyMTAQMTNxMmJzQ3CwEXNgklHhfqAxwX3QMBJhwdEf42EzsU/jgTHhonBNwXHQTsFxwfF+MBJ+8FJxoeFQHEEj4SAccVHhonBe0aJQjVFh37mgG8/nqk/nkBnBUv+9YBAu4CBgYD19YPEgMJ/kTaAnn+wBIzAxEBBUkUIhn+4P6uSAGtEkr+GAF9CfvuBQGH/lYEERUBy0n+n7Pdu8AEAQnEIq8BU///BOraBwP2E/078/6tAWMBUv0fmwIrMGEBTwEQlwMBGgn3Bgj+DAFi/Eq7u7u7BNg3lC7tAgEExJNYBgLdGCQE/mkKCxcjBf5/CQkaJxQXFxcmHAkNAX8FIxcKCwGXBiMXGCMFAYkBBAIpEQGfCwkbJhgYGBglHAcN/mcBJhkPEP6NBSL8VwGV/msSA44FCQsH/mUCBAHkAYzeCQMCAOTkEvqpBwZOW3gBMP6hSf5cIAFi/ngFEgGV/oEHBgGuTAFvvv3YygkDqgECARIQygE0DP6dtAFnAQ7+Cv7TVOYCDf8A/v8x/pj+lAFeEqH+u/wzAcD+4QLKBQEYDxMCAa4BBP3v/ooCPgD//r78Cv69AUP+/QEDUAGdCwUBEQFS/UVeAwAAAgAA/tsGSQbbAA0AGwAAETQ2MyEBERQGIyEiJjUlJxE0JiMhIgYVERQWM9GWA1ABktGW/IWW0QWAyUk1/dc1SUszA9KW2gGZ+XCX2dqWKs0B5jVLSzX9zjVMAAAEAAD/cQbbBkYACgAUAB4AKQAAAQQAAyY1NBIkMzIFFhcEAAMmJxIAARIAJRYXBAADJgUmJwYHNgA3BgcWBCv+lv3eiBfqAZPtXgGXalH+Q/10f2pHgAKH/nGDAl0Bli4Q/rL+AIh2BFrdxpqxfQF46RhbSgYwiv3Y/pNmY+4Bk+ueSmeB/W/+Q1JnAbkCjPqNAZcCYIdpdon9/v6xEBc5S2Ab6gF7fq6XyAAAAwAA/24JJQWtABYAKwA7AAABEyInJiMgByYhIgcGKwETJCUgFzYlBAEyFhcDJiMgByYhIgcDPgIzMhc2JQMGByYjIgcDPgEzMhc2FwhzspaQ5dz+/qqp/v7d5JKOBrEBAAEnAQqwsAELASb+y5Pss47D4f8ArKv/AOHEjXiKyWfnxMUBFD7xqq79ybeCju6G77zF5wUb+lNBaKmpaEEFrZEBenkBAfsHQUoEj1mhoVn7cTEyKHt7JwQNBayxTPvNOjl0egYAAAAFAAD/mAklBh8ADwAfAC8APwBcAAAlETQmKwEiBhURFBY7ATI2JRE0JisBIgYVERQWOwEyNiURNCYrASIGFREUFjsBMjYlETQmKwEiBhURFBY7ATI2JRQAIyEiADU0NjcmNTQ2MzIXNgAzMgQSFRQHHgEGsiIXahciIhdqFyL+vCMWdBciIhd0FyL+siIXdBciIxZ0FyL+siIXcxciIhdzFyIGU/7yvvpyvv7zkHgLuIF1WDMBVdiqASGoEJrFvQNFGCMjGPy7FyMjFwJeFyMjF/2iFyMjFwHqFyIiF/4WFyMjFwGdFyIiF/5jFyMjvb7+8wEOvYXhOSctgbhN0QEMqP7gqktBJvoAAAAAJwAA/yIG2wbbAAQACQANABEAFQAZAB0AIQAlACkALQAxADUAOQA9AEEARQBJAE0AUQBVAFkAXQBhAGcAawBvAHMAdwB7AH8AhQCJAI0AkQCVAJkApQDVAAARIREJASURIREJATUhFRMVIzUXFSM1FxUjNRcVIzUXFSM1FzcXBxc3FwcXNxcHFzcXBz8BFwc/ARcHPwEXBz8BFwcBFSM1IRUjNSEVIzUhFSM1IRUjNSEVIzUhFSM1IRUjNQEVIzUzFTcVIzUhFSM1IRUjNSEVIzUhFSM1IRUjNQU1IzUzFQc1MxUHNTMVBzUzFQc1MxUHNTMVJSImNTQ2MzIWFRQGARQeAjYWFRQjIicjBxYzMj4CNTQuAQYmNTQ+ATMyFhczNy4GIyIOAgbb/Ir8mwZp+gkC9AMD+gldKioqKioqKioqSBF4ESMReBEiEXgRJBF3EVp4EXiJeBF4i3gReIl4EXj7uIIBO4MBPIMBO4IBO4IBPIQBPYQBPIP7HCqDuYMBPIMBO4IBO4IBPIQBPYQBE1qEKioqKioqKioqKv0uk9PSlJXQ0P6uLURORC2Abx4DI01sIT9AKD9cWj8vLhgnUxEEIgMqCiIQHhkOIT88Jgbb+cr+fQGDSgQi+97+sAXk5ub+rISEqYSEqYSEqoODqYODoyc2JhAnNCcQJzUnDyY1JiY1JjVrNSc1bDQnNGo2JzUFgSkpKSkpKSkpKSkpKSkpKSn+fFqDKSkpKSkpKSkpKSkpKSmDWimDqoSEqYSEqYSEqYODqYODKNGVk9LSk5XRAbMpLwoGARUYODpIMAsaMiM1NggCDRcYGwcZGkIBEQQMBAcCDBo0AAAAAwAA/18JJQZYAAcAEAAqAAAAECYgBhAWICQQJiAGFRQWIAERFAYjISImNRE0NjMhMhYdASE1NDYzITIWA9q1/wC1tQEABJC1/wC2tgEAAiVINPfSM0hIMwHtMkkDXkkzAewzSQHAAQC2tv8AtbYBALW1gIG1BNP5+zJISDIGBTJISDK4uDJISAAAAAACAAAALgklBYoAAABaAAABBTIWFRQGIyIuByMiBhUUFjMyNjc+AjMyFhUUBwYEIyIkJjU0ADMyHgUzMjY1NCYjIgYjIiY1NDY1NCYjIg4CIyImNTQ3PgEzMgAVFAc2BmIBKanx+rRhsIyCd3aCia5fsN7ttnL3YQYlIAkQGEVz/s+SmP7/mgFD7InztaaYmbxndZiUbCJ2FBcjFPa2QnpGOQkRGR1DymvaASMFQQRB6eGns+8/aYmYl4lpP9Gvs9VWRQUhFhgQGz1le4T1meoBN2Ofv8CfY4x0bZIrIxYVWRe27SoyKhgRFh5NU/7h2SohEQAABAAA/24HbgW3ABsAIwArAFcAAAA0JisBNTQmIgYdASMiBhQWOwEVFBYyNj0BMzIAFAYiJjQ2MgQUBiImNDYyExEUBgcFHgIVFAchMhYUBiMhIiY1ND4BNwMjIiY0NjMhMh4EFyEyFgVuLB2TKzwrkh4rKx6SKzwrkx79mFV5VlZ5BFVVeVZWeeglHPtWAQkFGwQbHisrHvtuHisZKgPL6R4rKx4BJRIdEQwFCAEFXR4rA5k8K5IeKysekis8K5MeKywdk/zPelVVelVVelVVelUESf23GyoEiwghHAsSNyw7LCwdEDtNBQOtKzssDxUjGSoILAAAAAAEAAD/bgduBbcAFwAfACcAUwAAADQmIg8BETQmIgYVEScmIgYUFwEWMjcBABQGIiY0NjIEFAYiJjQ2MhMRFAYHBR4CFRQHITIWFAYjISImNTQ+ATcDIyImNDYzITIeBBchMhYFtyw7FqgrPCuoFjssFgElFjsWAST9OlV5VlZ5BFVVeVZWeeglHPtWAQkFGwQbHisrHvtuHisZKgPL6R4rKx4BJRIdEQwFCAEFXR4rA5k8KxanAU8eKyse/rGnFis8Fv7cFhYBJPy6elVVelVVelVVelUESf23GyoEiwghHAsSNyw7LCwdEDtNBQOtKzssDxUjGSoILAAAAAAHAAD+2wklBkkAAgAFAAkADAAQABQAJgAAEwkDIScTIQkCISUhAyEBIQEhJQEWBgcBBiInAS4BNwE2MyEy8gLI/qkCLwGP/OKc6f7V/rYEjwLI/o/8TAML6f7HAsgBi/63/tUBigG3EAMS+7cVQhT7thICEAG3FSUFJSUDbv0IAvj8jQNzkgG3/kn8dgL4kgG3/kkBt3T9txU1E/ttFxcEkxM2FAJJHgADABb+2wkPBtsASQCXAKAAAAU2Mh8BBycHBiIvAQcGIi8BBwYiLwEHBiIvAQcGIi8BBwYiLwEHBiIvATcXNzYyHwE3NjIfATc2Mh8BNzYyHwE3NjIfATc2Mh8BJQYiLwE3Fzc2Mh8BNxEDJjY/AREzNSE1IRUhFTMRFx4BBwMRNzYyHwE3NjIfAQcnBwYiLwEHBiIvAQcGIi8BBwYiLwEHBiIvAQcGIi8BARUlBTUjNSEVCBYWOxaSZ19fFT0VXl8WOxZfXxY7Fl9eFjwVX18WOxZfXxY7FV9fFjsWkmdeXxY7Fl9fFjsWX14WPBVfXxY7Fl9fFjsVX18WOxZf+VgWOxaSZ15fFjsWX0nwExciypIBJQElASSSyyIXFPAWFjsWX18WOxaSZ19fFT0VXl8WOxZfXxY7Fl9eFjwVX18WOxZfXxY7FV8BbQG3AbeS/bcWFhaSZ19fFhZfXxYWX18WFl9fFhZfXxYWX18WFl9fFhaSZ19fFhZfXxYWX18WFl9fFhZfXxYWX18WFl+LFhaSZ15eFhZeSQFPAWceRQxCAVaSkpKS/qpCC0Ye/pn+sRUWFl5eFhaSZ19fFhZfXxYWX18WFl9fFhZfXxYWX18WFl8EsJOTk5OSkgAAAAQAAP9uBkkG2wADAAcAQwB2AAAhEy8BARMPAQEmJyYjIgcOAScmByIHBgcWFx4BFx4JMzI+AzsBMh4DMzI+CDc+ATc2ARQGIyEiJjU0PgM3JzMmNTQ3JjU0Nz4BNzYzMhYyNjMyFx4BFxYVFAcWBzMDHgMCkm5ukgG3kpJuASUCAwtjUG4IIAhvUGIMAgMCAwINAgINAw4GDwwUFBsOKTUWCw8NDQ0PCxY1KQ8aFBQMDwYOAw0CAg0CAwHdp4r8GYqnCiE1XTxn9RkC3vATUCklMiJ7RXsjMiQpTxTw3ggf9V5IZjASAgCSSf0lAttJkgKCBQIJFQIBAxYBCQIFFQoDCAgFJQkeCRcIDgQFHSgmHR0mKB0FBA4IFwkeCSUFCAgDCvwpip6di0aCnH5vHvtJSQ4XLkBBMEekMCpGRiowpEcwQUAuXVr+/yaRt6MAAAMAAAAACkYFtwBMAFwAcAAAARYOAicmACcmNjcnBgIVFAYjISMGBCMiABAAMzIXNyYHIyImNDY7ATIeAhchMycjIiY3PgEzITIfATc2OwEyFh0BFAYrARc2Fx4BATI2NyEiJyY3EyYjIgYQFigBNhAmIyIHExYGBwYnIicDBgcUCkYOTpXWdbj+8RIOWlpRbn0qH/7bTxr+4MDT/tMBLdNXVxuNzkkeLCweklmZcTMhAkmDYf4iKwUFKxwBISYXUIIWHnQeKysezYSWpKPo982Dyhr+mSgXFRSoNjKX19cGSQEu19eXRUXHEQwZERgoFMdqAQI7dtqbVwgNAQS3f+NSelv++5UfLLv8AS0BpgEtHzR+ASw7LB85IhmTMyIaIyB4ghYsHZMeK8RIHx74/bGmfyMlIwE9D9f+0tfXAS7XHP7XGjwQDQEhASltlJcAAAMAAP7bBkkGtwA1AE8AVwAAIRQOAQQgJC4BNTQ+Ajc2FhcWBgcOBAceBDI+AzcuBCcuATc+ARceAwERFAYrAREUBiMhIiY1ESMiJjURNDYzITIWAhQGIiY0NjIGSYzr/uj+1f7o6o1LhYlRHjIFBiQeQm5BLRIBAzhwlNrz2pVwNgQBES5BbkIeIwUFMh5RiYVL/kkrHkkrHv7bHitJHitWPAG3PVVtltWVldVIc0YkJEZzSDhaPigOBiQeHjIECyAbGhMEDSMoIhcXIikjDgUQGxofDAUyHR4jBQ4oPloDyP5JHiv+SR4rKx4BtyseAbc9VVUB5NSWltSWAAIAAP9tCAAGSQAbAD8AAAEhDgEPAQEGJicBJichMjY3GwEeATMyNjcTFxYBFAchJy4BBwYHCwEuASIGBwMhJjU0ACEyHgIXPgMzIAAFtwFcBgsEBP04FTsU/TcGEgGlGSgGUNkHJxkYJwenQBQCdnb+W38JKBYzDZTgByczJwWF/h12ASIBAEeUflwpKVx+lEcBAAEiAkkHCgMF/VIVARQCsAIVHxgBQf0GFx4eFwIqgCgB6aax/RMXAgYv/hUDEBceHxj97bGm+wEcMVNKKSlKUzH+5AAAAAIAAv7bBSUG1wArADMAAAEUAAcRITIWHQEUBiMhERQGKwEiJjURISImPQE0NjMhESYkAjc2EiQ3NgQSJBAAIAAQACAFJf6u+AEAEBUVEP8AFBBJEBX/ABAUFBABAKv+6pMNDZ8BAZjCAVXH+20BLQGnASz+1P5ZBEn9/osc/tcUEEkQFf8AEBUVEAEAFRBJEBQBKRLIATmxmQEHpxEWp/7CFf5Z/tMBLQGnASwAAAAAAgAA/24G2wZJACcALwAAATIWFREUBisBIiY1EQEWFRQOAiAuAhA+AjMyFwEhIiY9ATQ2MwAgABAAIAAQBpIeKxQQSRAV/kyQaLLz/vX0sWhosfSF6LMBtP7WEBUVEP0IAacBLP7U/ln+0wZJKx7+JRAVFRABK/5KsuiG87FoaLHzAQzzsWiQAbUUEEoQFPm3AS0BpgEt/tP+WgAAAgAA/tsFJQbbAD0ARQAAARYSFRQABxUzMhYdARQGKwEVFAYrASImPQEjIiY9ATQ2OwE1JgA1NBI3JicmNjsBMhceASA2NzYXMzIWBwYAIAAQACAAEAO1psr+rvhuEBUVEG4UEEkQFW4QFBQQbvj+r8qmvUgHFhRPGAky2wEO3DIJIUYTFgdH/U0BpwEs/tT+Wf7TBXJS/sO+/f6KG5cVEEkQFG4QFRUQbhQQSRAVlxsBdv2/ATxSbsoSHxZ5lZR6FwEeE8r7RQEsAacBLf7T/lkAAAACAAL+2wZJBtsAQgBKAAABNDYzITIWFREUBisBIiY9AQEWFRQABxUzMhYdARQGKwEVFAYrASImPQEjIiY9ATQ2OwE1JiQCNzYANzYWFwEjIiY1ACAAEAAgABAEkhUQAUkeKxQQShAU/t6Q/q74bhAVFRBuFBBJEBVuEBQUEG6q/uqUDRIBSuiH+2UBI5kQFf0tAacBLP7U/ln+0wa3EBQrHv63EBQUEJn+3bXl/f6KG5cVEEkQFG4QFRUQbhQQSRAVlxLHATix6QFWGhBLUAEiFRD6twEsAacBLf7T/lkAAAIAAP7bB24G2wBrAHMAAAE0NjMhMhYVERQGKwEiJj0BARYVFAAHFTMyFh0BFAYrARUUBisBIiY9ASMiJj0BNDY7ATUmADU0NycHDgEvAS4BPwEnFRQGKwEiJjURNDYzITIWHQEUBisBFzc+AR8BHgEPARc2IBcBIyImNQAgABAAIAAQBbcUEAFKHisVEEkQFf7ekP6v+G4QFBQQbhUQSRAUbhAVFRBu+P6vkDxzCh4MNwsBCnh/FBBJEBUrHgFJEBUVEJh5YwoeCzcLAgtnQrUBy7QBJJoQFP0sAacBLf7T/ln+1Aa3EBQrHv63EBQUEJn+3bXl/f6KG5cVEEkQFG4QFRUQbhQQSRAVlxsBdv3mtDx+CwIJMgkfDIOAmRAUFBABSR4rFBBJEBV6awsCCTMJHwtxQJCQASIVEPq3ASwBpwEt/tP+WQAFAAL+2wf+BtgAOAA+AEsAUgBfAAABFgIEBxEhMhYdARQGIyERFAYrASImNREhERQGKwEiJjURISImPQE0NjMhESYkAjc2ADc2FzYXFgABNhAnBhADMjcmERA3JiMiABAAAREmJwYHEQEyABAAIyIHFhEQBxYH/g6U/uqrAQAQFBQQ/wAVEEkQFP22FBBJEBX/ABAUFBABAKv+6pMNEwFS6uvEw+zqAVL8FZKSktyDdrCwdoPT/tMBLQNmnYiInQKT0wEt/tPTg3awsHYEf7H+x8cT/tcUEEkQFf8AEBUVEAEA/wAQFRUQAQAVEEkQFAEpEsgBObHrAVgWGIODGBb+qP15lgGglpb+YP7QQb0BAgEAv0H+1P5Z/tP+SQEpEVtaEv7XAbcBLQGnASxBv/8A/v69QQAAAAAEAAH+4giSBtsARgBQAF4AbAAAATQ2MyEyFhURFAYrASImPQEBFhIHBgAHBiQnLgM3NhIkNzYWFwEjIiY9ATQ2MyEyFhURFAYrASImPQEBFhcWFwEjIiY1ATQnBgIVFBc2EiUUEhcmJzQANy4BIyIAATIANTQCJxYXFAAHHgEG2xUQAUkeKxQQSRAV/t5XSBoj/svR8P5xTIbuqFsJCp4BApuH+mYBI5kQFRUQAUkeKxQQShAU/t5DJ9CnASOZEBX9twS5+gW5+fwA/r0DAQE16D38m9P+0wRJ0wEt/b0DAf7L6D38BQAQFSwe/rcQFBQQmf7dbf7wktD+1x4h+dsHdbr+iJoBDKoREEtQASIVEEkQFCse/rcQFBQQmf7dVWwKhAEiFRD+bhcrHf7jvxcsHQEev8D+4BshI/ABbCuJp/7T+3YBLNTAASAaISLw/pMqiacABAAH/tsJJQbbAEoAUABcAGgAAAE0NjMhMhYVERQGKwEiJj0BARYSBwYABwYnBgcVMzIWHQEUBisBFRQGKwEiJj0BIyImPQE0NjsBNSYkAjc2ADckFzYzMhcBIyImNQE2ECcGEAAQADMyNyYQNyYnIgEyABAAIyIHFhAHFgduFBABSR4sFRBJEBX+3ldIGSX+0c//1IafbhAVFRBuFBBJEBVuEBQUEG6x/uOOGh0BM9QBANWnx+a0ASOZEBT8kpKSkv0kAS3ThnOwsHOG0wOv0wEt/tPThnOwsHMGtxAUKx7+txAUFBCZ/t1t/vCSzv7XHyeOWRGXFRBJEBRuEBUVEG4UEEkQFZcT1AFLudYBNiEnjm+QASIVEPtRlgGglZb+YQGj/ln+1EG/AgC+QQH8AAEsAacBLUK//gG/QQAAAAACAAD/bgbbBkkAOwBDAAABMhYVERQGKwEiJjURBxcWFA8BBiIvAQcWFRQOAiAuAhA+AjMyFzcnJjQ/ATYyHwE3ISImPQE0NjMAIAAQACAAEAaSHisUEEkQFfOgCgo1Ch4LoFmQaLLz/vX0sWhosfSF6LNZxQoKNQoeC8Xz/tYQFRUQ/QgBpwEs/tT+Wf7TBkkrHv4lEBUVEAEr9aALHgo1CgqiW7LohvOxaGix8wEM87FokFnFCx4KNQoKxfQUEEoQFPm3AS0BpgEt/tP+WgAAAgAC/uAFJQbcADkAQQAAARYAFRQCBCcmJAInJhIkNzUjIiY9ATQ2OwE1BwYiLwEmND8BNhYfARYUDwEGIi8BFTMyFh0BFAYrAQAgABAAIAAQAtv4AVLH/qvCmP7/nw0OlAEWq7cQFBQQt2kLHgo1CgrnFjsW5woKNQoeC2q3EBUVELf+5AGnASz+1P5Z/tMD+xv+ivy//sKnFhGnAQeZsQE5xxKXFRBJEBW8aQoKNQoeC+YWARXmCx4KNQoKabwVEEkQFfrcASwBpwEt/tP+WQAAAAACAAUAAAiTBSIAOQBBAAABFgYHAQ4BLwEuAT8BIREUBisBIiY1ESMGACMiJAI3NhIkNzYEEhczETQ2OwEyFhURIScuAT8BNjIXACAAEAAgABAIfRYBFf6wCiAKMwsBDNP+sBQQShAUlxv+iv2//sOnFhGnAQaasQE5xxKXFBBKEBQBUNMLAQwzCh8L+pIBpwEs/tT+Wf7TAsYWOxb+sAsBDDMKHwvT/wAQFBQQAQD4/q/HAVTDmAEBnwwOk/7qrAEAEBUVEP8A1AofCjQLC/x8AS0BpwEs/tT+WQAAAgAA/tsFJQbbABcAHwAAARQABxEUBisBIiY1ESYANTQ+AiAeAgAgABAAIAAQBSX+rvgUEEkQFfj+r2ix9AEL87Jo/JoBpwEs/tT+Wf7TBEn9/osc/UUQFRUQArsbAXf8hvOxaGix8/16AS0BpwEs/tT+WQACAAAAAAUlBSUABwAXAAAAEAAgABAAIAAQDgIgLgIQPgIgHgEEkv7U/ln+0wEtAacBv2iy8/719LFoaLH0AQvzsgG/AacBLP7U/ln+0wKG/vX0sWhosfQBC/OyaGiyAAABAAD/bgbbBkkAJAAAATIWFREUBiMhETMTITU0NjM3NSYjIgYdASMRMxEhIiY1ETQ2MwZ6KDk5KP5B5CL++jZOi0iDm7vk5Py4KDk5KAZJOSj55yg5AqgBCalAQAHtCrenw/73/Vg5KAYZKDkAAAAAAQAA/24FtwbbAEwAABE0PgMzMgQSFRQOAyMiJicOBg8BJyY1NBoBNyY3NDYzMhYVFAIVFBYzMj4ENTQmIyIAFRQeAhUUBiMiJy4DVpfE4na1ATfCLF2HxXVOmSELKg0iGTA5KhALETFnCCUBdlxGTWRnST9rSDgfD/vJ5f7OHSEdIxkCETpbMRkEMXvbonc7mP7et27SwpNYSUAtqDFxMV5TOgULsyRpAQYBiyNKd1+mXEdL/uJHSF85Y3aGeDbG3P7Y4zJeNzELIGYDEV56fQAAAAADAAD/ZwbbBlAAKwA+AFEAAAAyFhcWFxQHDgEjIicuAScmNzU2NzYzMhYzMhYXHgEVFAYVFBcWFxYXFjMyAzIkNhIQAiYkIAQGAhUUFwMlFhIgBBYSEAIGBCMiJwUTJjU0EjYEVx7BBQIBFBJ+NUGZcKRXUgEDURshBxsIFhEJCTlOBSdOQGwODBGAkQEKwHJywP72/t7+9cByiVoBFLUnAV4BPueJief+wq/fwv4jm3uJ5wKCZAsGCyYxLTxHM6eAemQJaE0ZAw8YF5wIGFMLCApTST03CP4ScsABCgEiAQvAcnLA/vWR6Lz+9Vh2BiuJ5/7B/qL+wueJa5kBz8vxrwE/5wAAAAAJAAAAAAgABkkAAwAHAA8AEwAbACMAJwArAC8AADchNSERITUhADQmIgYUFjIBITUhADQmIgYUFjISNCYiBhQWMhMRIREBESERAREhEZIEk/ttBJP7bQcAQFtAQFv5QAST+20HAEBbQEBbQEBbQEBbrvgACAD4AAgA+ACSkwG2k/1AW0BAW0AEt5L9QFtAQFtAAolbQEBbQPy3/kkBtwJJ/kkBtwJJ/kkBtwAAAwAA/24JJQZJAAcAKwBOAAAAIAAQACAAEAEhMhYdARQGIyERFAYrASImNREhIiY9ATQ2MyERNDY7ATIWFQEUFjMhEQYjISImNTQ+BTMyFx4BMjY3NjcyFyMiBhUD2v6V/v8BAQFrAQECkwGSDxYWD/5uFg/bDxb+bg8WFg8BkhYP2w8W/LdWPAEkTnX8GYqnCBglPVB0RRYXWq3LrVoXFpdh/ztXAtsBAgFrAQH+//6V/mwWDtwPFf5tDxUVDwGTFQ/cDxUBkg8WFg/9bjtX/vA5nYs9c4VzbE0uFEZFRUYTAW5XOwAAAAMAAP9uCRoGSQAHADIAVQAAACAAEAAgABAJARYVFA8BBiInCQEGIyIvASY1NDcJASY1ND8BNjMyFwkBNjMyHwEWFRQHAQcGFRQfAQYjISImNTQ+BTMyFxYgNzY3MhcOARUUFwPa/pX+/wEBAWsBAQMYAR0KCpsKIAr+5P7jChAPCpwKCgEd/uMKCpwKDxAKAR0BHAoQDwubCgr8qs8qKl8YGvwZiqcIGCU9UHRFFhewAXmwFxYgISAeKgLbAQIBawEB/v/+lf2R/uMKEA8KnAoKAR3+4woKnAoPEAoBHQEcChEPCpsKCv7kARwKCpsKDxAL/uTPKj49Kl8DnYs9c4VzbE0uFIuLEwEHHzUlPioAAwAAAAAJJQW3ABIAGgAkAAABITIWFREhESERIRE0NjsBMhYVADQmIgYUFjIhNTQAIyEiBhURASUHth4s/tv5Jf7bKx6SHiwCkqzyq6vyBhr+/rX82x4rAkkrHv4AASX+2wVuHissHf3Q8qur8qxJtgEBKx7+SQAAAgAA/tsG2wbbABYAGQAAAQMzFSEHIRUhCQEhNSEnITUzAyEBIQkBEyMG29vb/sc/AXj+K/5o/mj+KgF4P/7H29sBJQFxAbABcf23e/cG2/4A25Lc/EkDt9yS2wIA/JMDbfqTASQAAAADAAD+2wbbBtsAFwAfACMAAAEyBBURFAQHFxYGIyEiJj8BJiQ1ETQkMwAyNjQmIgYUAREhEQTb0wEt/uLO8xISGftJGRIS9M7+4QEt0wESt4CAt4ADbvrbBtvVmPwAldIG5xEuLhHnBtKVBACY1foAgLeAgLcCEwJJ/bcABQAA/tsG2wbbABcAHwAjACsALwAAATIEFREUBAcXFgYjISImPwEmJDURNCQzADI2NCYiBhQBESERADI2NCYiBhQBESERBNvTAS3+4s7zEhIZ+0kZEhL0zv7hAS3T/v6Xa2uXbAKT/ZIEkJdra5dsAW79bgbb1Zj8AJXSBucRLi4R5wbSlQQAmNX6JWuXbGyXAgMCSf23/ZJrl2xslwIDAkn9twAEAAD/eQgABj4AEgAVABwAKAAAAREUBiMiJwEuATURNDYzMhcBFhcJAhEUBiInJQEUAAcJATYzMhcBFgKqHBwTEv3sGCEXFhAiAkgDSQJj/Z0FDSA3Gv4IAmb9tTL+QgFzEygQDgJqBQT6+sQdKAkBCws2GgUXFyAR/tsEdfwiATACmftMHSMP+wRzA/xIUQLUAlsgB/7LAgAAAAACAAD/bgbbBkkACwAPAAAJASMDBgcnAyMBETMBESERA50BMIC0GxcwsYkBLHQDPvklAmACOv6cNzJpAWT9zf6OBVT5JQbbAAAYAGD+4gngBtsACwAXACMALwBEAE0A/AEGARIBGwElATIBPAFHAVABXQFrAXYBsQHAAdcB5wH8AgsAAAUOAQcGJicmNjc2FgUeARcWNjc2JicmBjceARcWNjU0JicmBgUOAQcGJjU0Njc2FgEzIgceARUUBiMiJwYVFBYzMjY0JiUmJAc+Ah4BARYHFhUWDgEHBiYnBCUOAScuATc2NyY3Nhc2NyY3Nhc2NzQ3Nhc2FxYXNSInLgEnJjc2Nz4CFhczFhcWFz4BNyYnJic0Ny4BJy4BNzY3NhYXFB4DFxY3NjcmBzc2NzY3LgQnJAEWFxY3Mz4DPwE+ARcWFxYGBw4BBxUGBwYHHgEXNjc2NzM+AR4BFxYXFgcOAQcGIxQHNjc2FzYXFhUWFzYXFgcWFzYBFAcWFzYmJyYGBx4BBzY3NjcuAScGByInFhcyNzYmBTY3JjU0JgcOARcWFyY2NzEmJw4BBxYXNjcGDwE1BhcWBR4BFx4BNz4BNyYAIAYVFBYgNhADJgc1BhYXHgE3PgEmBT4BJic1BiMOARYXHgElBhYXFjY3PgE3BgcWBxYEFzYkNyY/ATUVLgEnBgcGJyYnJicOCCMGJw4DByIGIiMGJwYnJicmJyYnBgcWAzY3LgEnJg4BFx4BFxY2NxYXNjcuAScGBxQGFRYHBgcGByMGFxYXBCUkJwYHBicmJwYHIxUyJTY3NjcHNjcmJyYnJjcmJyYnBgcWBTYuAQcOAQcUFx4BNz4BAiIJKxUdPAIBXR8aGQXzCCsWHTwBAl4fGRlBD2MnM1WaNy41+aYPYiczVZo3LjQDLwIvKB8mPSw7IAaAWluBgQEBcf7qjh9/j4dcA14JFggBZ5M9N2UZ/O/9chpkOGLWAgIGFgkHHBAfCAsNHyEjDhohKB0VFw0IPWQMCgoRWQInKyAGDzUQAwILMAsRERpOAUeBICUYCRJVGkMDBAIFCAUfODc5Los2RnSmnBcwOyZHDQKoAWFwRGEqAQYIBAIDAQNDGlMVCBglIH9EURwQEw0vCwEEEjMPBiArJwJaEAoIDmU8CwkBFxUeJyAbECYdHwwLCCAPGv7PC14iBR8gFyRZKBwPTSIPBgNBOhFVIhAwDRgZEiP42iJeCiYWIB8uIU4PHSgqEjo/BQvUEEQWKTQ1HxwEZgkTBAMPFC4yARz+t/73vr4BCb4+eXgBCAshlCMKBQb+zAkDBALyAwUGBg0nmf5lEi5BERUDAwwGTt8DKZcBPr7FATyxJgQDE0sSHj86JAYECAwCBwoIDgkSCRYFeUEFDSMSIAICBQHNGwI+NjIOCRMLQiEBXQMBE04tL4plBiiVPTpjDxoF3+FwvW8HGgIjCg4yCxYBAgMWYQJgArz+3sdXWwkJSkru7QEBBUkFGxAWAgMBEREwEAojAgESDunM4gK3BmWJMCtPFAQLYjs+lJ8SKggKHBYZSwYFOxgSKggKHBYZSwYFO2UfSgsPKCY1fAYGYScfSgsPKCY1fAYGYQTdEQkzHyg5MRoWVXh4qXj5fTNMRVMHLn36IA0jGhNAgVADAjYwHR0vNwIDsl8ZFCMNCwkZISEKCw8XECEJDiAGCQUQUwILUDwrMkclEysLHBUGFAMFAQYBDQYuBAcEAiYjKYFAkDwSGiEBHhIcEAMQAjUgBRU0Qj1TEAkRDwkQA5D+0WCdCxUDEBwREBAgGxM7kEGBKCUlAgwCLwYNAQYBBQQVBRUbCSsUJUcuLz1PCwI4GxEECAUgDgogEhUPCwsgIhgIBDYhHCVyKo0hFgWHMJhCDyQQEEl0EhELAYOOA06ZOHIlHSAVBRYhjZ8jEEKYMAcREnJLE0qOfgUPFgFmegMtK6IVFQgJF5ZEAwLfvYWGvL0BCv3iAgIBH4YIEAEMA1NM1AVkZRUBAxdgXgURA+VDiRwJBxQSqiEClRoPoeM/ON6vDxgKAQECCAJnMCssBwkPOAYJBwYDAgMBAQoXExcMBAIBE0FICgk1Dw4hKgcFAv0pEBJRhw0OPXo+PVsCAkT8SECBRTucbwUKAgcBFRUaDQ8NX0wm6xgYqDgoGQMDGCBFkgE1PkwrJgFYVgkUChwXFAUFBQnZa0SgPno9Dg2IUBIQOEQCAlsAAAMAAP8oCkoGjwAHAA8AOwAAJBQGIiY0NjIEFAYiJjQ2MgEeBQwBMzIeBA4DBwYHPgUuAiQHBiQuBwbObptvb5v9Fm+cbW2c/PlBepuc3+oBUgFl95/xrW8zAzBRe45Y03QhbWpuUCsNW7D+3srA/rL72JWDTk4lNjGbbm6bb2+bbm6bbwXvRWVWOi4aEAYMGiQ2QFJdc3xKs2c6hG11XFxEOiQSAwISIjs7VERgP1wABwAA/tsIAAbbAA8AHwArAD8ASwBnAHcAAAAgBAYCEBIMASAkABIQAiYkIAQAEhACAAQgJAACEBIAEzIVERQHIyI1ETQ3BDIWFRQGBxUUBisBIiY9AS4BNTQCIAQSEAIEICQCEBITFRQWOwEyNj0BNDYyFh0BFBY7ATI2PQE0JiAGARE0JiMhIgYVERQWMyEyNgTB/n7+oP+XlwD/AWABggFgAP+Xl//9DwGgAXsBE6Ki/u3+hf5g/oX+7aKiAROCEhIlEhIBsXpVKCEUEEoQFCEoXQHeAZPs7P5t/iL+bezs8BQQSRAVltSWFRBJEBTr/rLrA9srHvwAHisrHgQAHisGkpf+/qD+ff6g/5aWAP8BYAGDAWD+4KL+7v6E/mD+hf7uo6MBEgF7AaABfAES/OwT/dwSARMCJBIBSlU9KEIUghAUFBCCE0MoPQPD6/5s/iP+bOvrAZQB3QGU/sduEBUVEG5qlpZqbhAVFRBup+vr/A8CSh4rLB39th4rKwAAAwAAAAAKSQW3AAMAFwAvAAABESERATMRIxE0JiMhIgYVERQWMyEyNjUBERQGIxUUBiMhIiY1ETQ2MyEyFh0BMhYIkviTCACSkhUQ97cQFRUQCEkQFQEkVjxsS/e3S2xrTAhJS2w9VQSS/JMDbf1uAbcBSRAVFRD7txAVFRADAP5JPVW3S2xrTARJS2xsS7dVAAAAAAMAAAAACkkFtwADABsALwAAAREhEQEyFhURFAYjFRQGIyEiJjURNDYzITIWFRkBIxE0JiMhIgYVERQWMyEyNjURASUFtgLcPVVWPGxL97dLbGtMCElLbJIVEPe3EBUVEAhJEBUBJQNt/JMDJFY8/kk9VbdLbGtMBElLbGxL/QABtwFJEBUVEPu3EBUVEAFJAAMAAAAACkkFtwADABsALwAAAREhEQEyFhURFAYjFRQGIyEiJjURNDYzITIWFRkBIxE0JiMhIgYVERQWMyEyNjURASUEAASSPVVWPGxL97dLbGtMCElLbJIVEPe3EBUVEAhJEBUBJQNt/JMDJFY8/kk9VbdLbGtMBElLbGxL/QABtwFJEBUVEPu3EBUVEAFJAAMAAAAACkkFtwADABsALwAAAREhEQEyFhURFAYjFRQGIyEiJjURNDYzITIWFRkBIxE0JiMhIgYVERQWMyEyNjURASUCSQZJPVVWPGxL97dLbGtMCElLbJIVEPe3EBUVEAhJEBUBJQNt/JMDJFY8/kk9VbdLbGtMBElLbGxL/QABtwFJEBUVEPu3EBUVEAFJAAIAAAAACkkFtwAXACsAAAEyFhURFAYjFRQGIyEiJjURNDYzITIWFRkBIxE0JiMhIgYVERQWMyEyNjURCbc9VVY8bEv3t0tsa0wISUtskhUQ97cQFRUQCEkQFQRJVjz+ST1Vt0tsa0wESUtsbEv9AAG3AUkQFRUQ+7cQFRUQAUkAAQAA/uEFHwbbABwAAAEWBwYjIRMWBg8BBiYnAwEGIyInJjURNDc2FzIXBQ8jExMx/kzmCxcbyx02Ddr+nBYeDg0uLg4NHxUCMyIsLv3gHTcMVgsXGwIF/psWBhMwBrcwFAYBFQAAAAABAAD+2wQABtsAJQAAASAZATMVIxEQITMVIyAnBiEjNTMgGQEjNTMRECEjNTMgFzYFMxUDt/6SkpIBbklJ/smAgP7JSUkBbpKS/pJJSQE3gIABN0kGSf8A/iWT/ZP/AJOnp5MBAAJtkwHbAQCSpqcBkgAAAAkAAP7bCSUG2wATABcAGwAfACsALwA3ADsAQQAAASMRMxEhNSEVIREzESMRIRUhNSEFFTM1IRUzNRE1IxUlNTMRIzUhFSMRMxUFNSMVASERIREhESEBIREhAREhESEVCSWTk/5J+kn+SZKSAbcFtwG3/tuS+ACTkwbckpL6SZKSBtuS/bcBt/wA/kkEAPySAtz9JASS/tz+SQUl+23+SZOTAbcEkwG2kpKSkpKSkvklkpKSkgSTkpL7bZKSkpIEkvySASUDbv0kAkn8kwJJ/kmSAAAACgAA/tsKSQbbAB8AIwAnACsALwAzAD8AQwBHAFcAAAEjETMRITUhFSERMzUhFSERMxEjESEVITUhESMVITUhBRUzNQEVMzUhFTM1ETUjFSUjFTMlITUzESM1IRUjETMBNSMVITUjFRkBIzUhETMRITUhFTMVITUKSZKS/kn8AP5Jk/5J/kmSkgG3BAABt5MBtwG3/tyS/JKS+beTkwZJkpL63AQAkpL8AJKSAkmSBkmSk/5Jk/5J/kmSBAADbv0k/kmTkwG3k5MBtwLcAbaSkv5Kk5OTkpIBt5KSkpL63JKSkpKSkgLckpL9JP0lkpKSkgEkAtyS/kn+SZOTkpIAAAIAAP9uBtsGSQARABgAAAERISImNRE0NjMhMhYVESEiBhchBg8BBgcEkvvcLkBALgYALj/+JS5AkwGzETnTOV0BSf4lQC0GAC5AQC773EBSXjnTOREAAAADAAD/bgbbBkkABgAPACMAAAEhETY/ATYlIREhESERNDYBERQGDwEOASMhIiY1ETQ2MyEyFgZA/uUhDdQO/ssBSfpJBABAAgktINMgbS77bi5AQC4GAC4/ASX+5AsO1A6zBAD6SQFJLkAEJPtuLm0g0yAtQC0GAC5AQAAABgAA/24KSQZJAAsAGAAnAEEAVABkAAAAFAYHBisBNTMyFxY2FAYHBisBNTMyFjMWBREhERQGIyInFR4BHwEgJTUGBwYmNDYXFhc1LgEvASYOAhQeAjc2JTQmJzU+ATU0JiciJiMhESEyNhMRFAYjISImNRE0NjMhMhYItiQaCQyurgsKGg8iGgMPnp4DDQIa+sH++1ZNe4s9my8wAXcDMHF0e4uLe3NyN3cgIJHRcDIycNGRdAPBYkxBSV1MAxUF/fgCMVVsklc79ts7V1c7CSU7VwKFPCoGAqACBsg5JwUBlAIF/wFg/qBCVESAERMBASaBOwkJcNVwCQg7gA4RAgMHLlxthW5bLgcFoj5PBQQJTDU/SwQB/blTA6z6STtXVzsFtztXVwAFAAD/bgpJBkkABQALABoALgA+AAABEQ4BEBYkECYnETYAEAIEIyIuAjU0EiQgBAE0AiYkIyEiBAIVFBIEMyEyJDYSAREUBiMhIiY1ETQ2MyEyFgPVeZeXArmXeXkBjLP+y7WI+LRqswE1AWsBNQJpf9L+6pb+qMn+r8jHAVXGAViTARnSfwGJVzv22ztXVzsJJTtXAVEDGC/Y/vXY2AEL2C/85y8CE/6V/suzarT4iLYBNLOz/g6fARe+brn+q9TD/rDCc8IBDgN0+kk7V1c7Bbc7V1cAAAADAAD+2wgABtsADwAfADsAAAURNCYjISIGFREUFjMhMjYTERQGIyEiJjURNDYzITIWARUjNTQmIyEiBhURFBY7ARUjIiY1ETQ2MyEyFgduFg/7JQ8WFg8E2w8WkmtM+yVLbGtMBNtLbP5JkhYP+yUPFhYPt7dLbGtMBNtLbG4E3A8VFQ/7JA8VFQTr+yRLbGxLBNxLbGwBbLe3DxUWDvskDxWTbEsE3EtrawAABgAA/tsJtwbbAAIABQA1AD0AVQBtAAAJASEJASEBDgEHESEyFh0BFAYjISImPQE0NjMhES4BJyEiJj0BNDYzIT4BMhYXITIWHQEUBiMEMjY0JiIGFAEUDgIiLgI1ND4DNzYyFx4EBRQOAiIuAjU0PgM3NjIXHgQHt/5JA274kv5JA24B8xBILQK2EBUVEPoAEBQUEAK3LkcQ/c4QFBQQAjIYcI1wGAIxEBUVEPzbSzY2SzYFN2qjqJeoompQgnJ3BRVWFQV2c4JQ+klqo6iWqKNqUIJzdgUVVhUFdnOCUATb/NwDJPzcBAAuSBD6PRUQSRAVFRBJEBUFwxBILhQQShAUQVFRQRQQShAUEjVMNTVM+91ThUwlJUyEVA2f79DVCCYmCNXQ758NU4VMJSVMhFQNn+/Q1QgmJgjV0O+fAAACAAD+2wbbBtsALQBNAAABEAIHFhIRMzIWHQEUBiMhIiY9ATQ2OwEQEjcmAhEjIiY9ATQ2MyEyFh0BFAYjAT4CEjUhFBIeARceARQGBw4CAhUhNAIuAScuATQ2Bknzt7fzbhAUFBD5bhAVFRBt9Le39G0QFRUQBpIQFBQQ/TBYpIRQ+25Qg6VYFhobFVilg1AEklCEpFgWGhoGSf7W/jZ6ef42/tYVEEkQFRUQSRAVASoBynl5AcsBKhUQSRAUFBBJEBX81yGRzAEUl5f+7MyRIQgmLSYIIZHM/uyXlwEUzJEhCCYtJgAAAwAA/tsG2wbbAC0AMwA/AAABEAIHFhIRMzIWHQEUBiMhIiY9ATQ2OwEQEjcmAhEjIiY9ATQ2MyEyFh0BFAYjKQEUFyE2ETQCLgEnIQ4CAhUGSfO3t/NuEBQUEPluEBUVEG30t7f0bRAVFRAGkhAUFBD/APtuCgR+Ck6BoFf++VeggU0GSf7W/jZ6ef42/tYVEEkQFRUQSRAVASoBynl5AcsBKhUQSRAUFBBJEBVLR0X5cpUBEMuRIyORy/7vlAAAAwAA/tsG2wbbAC0AMwA7AAABEAIHFhIRMzIWHQEUBiMhIiY9ATQ2OwEQEjcmAhEjIiY9ATQ2MyEyFh0BFAYjKQEUFyE2Ay4BJyEOAQcGSfO3t/NuEBQUEPluEBUVEG30t7f0bRAVFRAGkhAUFBD/APtuYQPQYUE+0Xb++XbRPQZJ/tb+Nnp5/jb+1hUQSRAVFRBJEBUBKgHKeXkBywEqFRBJEBQUEEkQFevMzPt9oeYwMOWiAAAAAAIAAP7bBtsG2wAtAEcAAAEQAgcWEhEzMhYdARQGIyEiJj0BNDY7ARASNyYCESMiJj0BNDYzITIWHQEUBiMBPgISNSEUEh4BFx4BFAYHBgchJicuATQ2Bknzt7fzbhAUFBD5bhAVFRBt9Le39G0QFRUQBpIQFBQQ/TBYpIRQ+25Qg6VYFhobFZ16AyB6nRYaGgZJ/tb+Nnp5/jb+1hUQSRAVFRBJEBUBKgHKeXkBywEqFRBJEBQUEEkQFfzXIZHMARSXl/7szJEhCCYtJgg6pqY6CCYtJgAAAAMAAP7bBtsG2wAPADkASQAABTIWHQEUBiMhIiY9ATQ2Mzc+CDcuCCchDggHHggXEzIWHQEUBiMhIiY9ATQ2Mwa3EBQUEPluEBUVEHADHidCOFs8ZTMxMTNlPFs4QiceAwWyAx4nQjhcO2YyMTEyZjtcOEInHQRwEBQUEPluEBUVEEkVEJIQFRUQkhAVST93YmVJVTRKIiAgI0ozVkllYnc/P3diZUlWM0ojICAiSjRVSWVidz8G2xQQkhAVFRCSEBQAAAACAAD/bgbbBbcAQQBqAAABIgYdASM1NCYjIgYVESc1NCYjIgYVERQXARYHFBYzITI2PQE0NxM2NRE0JiMiBh0BIzU0JicmIyIGHQEjNTQmJyYnMhc2MzIWFzYzMhYVERQHAwYVFAYjISImNQEmNRE0NjMyFz4BMzIXNgNuPVYkSTc1SyVJNzVLKAFjLQEsHQLcHisLfAtJNzVLJDosEAo1SyVKOQYJYEpBTEN3Jx8kcqAOfQeAW/0kYHv+oFehcQ0GB55tOzVSBSVWPZJqN01MNP4VI8Q3TUw0/wA2KP6uLUgeKyseHS8pAfIpLwEZN01MNCWPLkoJAks1kos6WQUCkjknPjgIpHL+5zpB/g0bNluAhWABU1N1AQBxoQFtlBhPAAAAAgAA/tsHSQbbADEAWAAAACIGFREjETQmIgYVGQEnJiMiBhUUFwEWMyEyNjcTNjURNCYiBhURIxE0JiIGFREjETQmMhYXNhcyFh0BNhYVERQHAw4BIyEiJicBJjU0NjMyFxE0NjMyFzYEImlLJUtpTLArST1WHgG3K0kDEyc9CFcGTGlLJUtpTCTOm4QjFhpxonisCVcQj1z87UV8Kf5JOqt6WTmhcRoWIwZJSzX9EgJcNUtMNP2k/tzqOlU9MSf9tzoyJwHPJR4COTVLSzX+yQJcNUtMNP2kAu413VFFBQGhcRQHoHj9xy4x/jNaeD82AklOYnmsJwHwcaEERgAAAAUAAP9uCAAGSQAmADUASgBiAIMAAAUjIicmJzUuATU0NyEiJjQ2OwEnLgE1NDYzMhcBITIWFREUBgcFBgMPAQ4BFRQWMzI3JS4BNQE0JiMiBwUOBBUUFjMyNyU+AQkBJiMiBhUUFhcFFSEiBhQWMyElNTQ/AQMyNyU+ATURNCYjIQcGFREUFjI2PQEzFRQHHgEVFAYHBQTKyrpIGgFHUwb+1nmsq3qBM1Vnq3k1MwLOAcp5rHtj/n1qo7G6IipMNB4XAYI4SAFuSzUeF/61IBUxEhJIORcUAZMiKf73/RkbGj1VNCoCWf0lPVZWPQJjAQo1f3xeUwGEMT5WPf6gmylLaUwkQTtQNSv+nZKhODwGIoZPKwyr86sTIJZceasT/u+sef0FZZ8YYRoDLFFUED8mNUsLsAtcOf7cNUsMlg8JHhgqGjlJCrcQPwOBARwJVjwuTBDkSVZ5VnnjSDF0+24WYQ1OMwL7PVWQJjf+rTVGUDTu7lAyCV08MFIUoQAAAAIAAP7bCSUG2wAkAGIAAAEyFhcBFhURFAYjISImPQElISImPQE0NjMhNyEiJicmPQE0NjMBETQnASYjISIGFRQeARc+ATMhFSEiBhUUFx4BMyEzMhYVFA8BDgEjISIGHQEUFjMhMhcFHgEdARQWMyEyNgUjRn4pAo6HgFz+SVuA/rn9kFuAwYgB4DD88HKpCUqAWwe3av1xLUn7uB4rBBITCzskA7b8Sh4sBAlSNALbaC5ABkkLOiP+BktsKx4CgRIPAWsbISwdAbceKwbbQDj8hLbk/mpbgYBcyqSAWyWIwZKacVp2JVuA+NwBlrORA307Kx4lKDQXIywlKx4yEDJDQC0REtshK2tLJR4rCLUPNB/hHisrAAACAAD+2wiSBtsAQQB0AAABIgYVFBcTIwMuASMiBhUUFxYaARURASYjIgYVFBcBFjchMjY3Ez4BNxM2NTQmIyIGBwMjEzY3NCYjIgYHAyMDLgEBISInAS4BNTQ2MzIeBBcDJjU0Njc+ATMyFhcbAT4BMzIWFx4BFRQHAwYVFAcDDgEDpTdIA6wehQpGLDZJBANTSf6hJzE7VkACRCcwAxkmOwlyCQUIhQNLNitHC3EelwMBSTcrRgulkrsKRgK2/OdhTv28OUGreB04JzcZPwuMCIlpEJhmX5QXdl4XlV9jlhNqjgiEBg9zFooGSU42EBD9NgInKzhONg0UD/6u/s4F/v0BBh5TPE0w/k4eAS8kAcoihSACIw4PNUs6Kv4tAnIQEDZLNyz9UAMMKzf4kjsBsiuAR3ipDA0iEjEIAkkoG2qeDGODdV3+FwGOXXV7YgubayIf/d8ZNDpB/jZWbQAABQAA/tsHbgbbADIAWgBeAGIAZgAAASIGFRkBJyYHIgYVFBcBFjMhMjY3EzY9ATQmIgYVIzU0JiMiBh0BIzU0JiIGHQEjETQmJzIWHQE2MzIXNjMyFzYzMhYdARQHAw4BIyEiJicBJjU0NjMyFxE0NgERIxEhESMRIREjEQLbPVWsL0w7VR4BtytJAzUZKAZpG0BbQCVJNzVLJFV6ViRVPnqrGQxxVDY7gVIfIWuVIGkSeEv8y0V8Kf5JOqp4UUSrAQwlAUkkAUklBklWPP23/knnPgFWPDEn/bc6HxgBpG5w+C9EQC1FN01MNElmP1tWPW0Ciz9akrF6+wJPGGMIm2v4hXz+W0ldPzYCSU5ieK0oAnF5q/m3Abf+SQG3/kkBt/5JAAUAAP7bBtsG2wAlADQASQBhAIIAAAEyFxYdARQHAw4BIyEiJjURASY1NDYzMhYfATU0NjIWFRE2FzIWByIGDwIzMhYXEzY1NCYXIg4DBwMGBxQWMzI2NxM2NTQmARQXARU3NhczExE0JiIGFREjAy4BIyIGATI2NxM2PQEDDgEjIiYnBisBNTMyNjQmIyEiDwERFBYzBcBFNaEaYRifZP0Eeav+7hOreluWIBOs8qsfGE+G1SY+EFVRPzlbDLALS8gZKxgdCg6XCwFMNCY/ELcKSfqTCQEcdDFJ4nlWeVZJ5BBMLT1WBLMyTwxhFqETUzA9XAkyUO7uNU9HNP6uOCaQVjwD+BpIu8praf58YnyseQHKAs4zNXmsaFUygXmrq3n+1gYBUz8pIruxSDgBghceNUuaExIxFSD+tRceNUsqIgGSFRc5SAGaGRz9Gk9/NQEBCgJkPVVWPP0kAloqM1X6MT0yAYNTXmj+nis1TztBJUtpTCqb/qA9VQAAAgAAAAAIzgSSABkARwAAARUUBiMhERQGKwEiJjURISImPQE0NjMhMhYFExYHBisBIiYnCwEGJyMiJwsBDgErASInJjUTPgE7ATIXExYXPgE3EzYXMzIWA9MVD/6rFA+aDxb+rQ8WFRADig8VBKNYAQoLEJkOFAE12AkYiRcK1zQBFA6aDwwKWQEVDqIXCvwLCwMQBP0KF6EPFQRuhg8U/GAPFhUQA6AUD4YQFBUM+7YPDQsTDgKg/hoWARUB6P1eDhMLCxEESg4TFf2tGx8IKAoCUxYBEwAABAAA/tsIAAbbAAkAKgA6AEoAAAE0JyYrAREzMjYXExYHBgcjIicDIxEUBisBIiY1ETQ2MyEyFx4BFRQGBxYCIAQGAhASFgQgJDYSEAImABACAAQgJAACEBIAJCAEAASnRSZfjblLUzvrCQsJFa4XCd6xFRCZEBQUEAFQkkdhcWJTBzT+qv7J4YaG4QE3AVYBN+GGhuECHqL+7f6F/mD+hf7toqIBEwF7AaABewETA7hlJRX+v1T4/lYTEBIBFAGh/nAQFRUQBEkQFRwjs3RpqCkMA6yG4f7J/qn+yeGGhuEBNwFXATfh/gz+YP6F/u6jowESAXsBoAF8ARKiov7uAAQAAP7bCAAG2wAtAFsAawB7AAABMjc2LwEmJyYPAQ4FIyImNTQ2MzIWHwEWNzY/ATYnLgQjIgYVFBYhMjc2LwEmJyYPAQ4FIyImNTQ2MzIWHwEWNzY/ATYnLgQjIgYVFBYCIAQGAhASFgQgJDYSEAImACAEABIQAgAEICQAAhASAAKzr3cQDDQHFBINBQUQFx8iKxVXcG1VKk8SEw0QEgo8DxEDEzI8XjSp4N4De693EAs0CRMSDQUFEBcfIisVV3BtVSpPEhMNEBIKPA8RAxMyPF40qOHeLf6q/snhhobhATcBVgE34YaG4f1OAaABewEToqL+7f6F/mD+hf7toqIBEwFadxUUXg8EAg4EBQ0QEQ4Ic1hXcSAQEA0BAg5ZFxYFEiMdF92lp9p3FRReEAMCDgQFDRARDghzWFdxIBAQDQECDlkXFgUSIx0X3aWn2gTLhuH+yf6p/snhhobhATcBVwE34QE8ov7u/oT+YP6F/u6jowESAXsBoAF8ARIAAAIASf/bCNsF2wALABcAAAkEFwcnCQE3CQMnNxcJAQcBBwEDSQG3/kn9AAMAwG5S/dwCJN3+tQMAAwD9AMBuUgIl/dvcAUpu/koDSf5J/kkDAAMAwG1S/dv93NwBSAMA/QD9AMBuUgIkAiXd/rhtAbcAAAAAAwAA/tsIAAbbAAsAFwAnAAAlCQEHFwcJARc3JwkFNyc3CQEnBwAQAgAEICQAAhASACQgBAADMwE2/sFk227+wgE+LmSS/foDoAIG/fr+ygE/ZNtuAT7+wi5kA8Wi/u3+hf5g/oX+7aKiARMBewGgAXsBE9ABNgE/ZdpuAT8BPy5jk/35/gICBwIH/sr+wWXabv7B/sEuZQJB/mD+hf7uo6MBEgF7AaABfAESoqL+7gAKAAD/1wpJBeAACwATABwAJQAvADkARQBTAFsAgAAAARQGIyImNTQ2MzIWJBQGIiY0NjIFNCYiBhQWMjYkNCYjIgYUFjIlFAYjIiYQNiAWJBAGIyImEDYzMgAQACMiDgEQHgEzMgEkBSAFMh4CFTQ+AgAQACAAEAAgEyEOAQcWBxQCBCMiJCcGBy4BJwYEIyIkAjU0Ny4BJyE2JCEgBALoPystPz8tKz8FJz9ZPz9Z+5qBt4GBt4EFJoFcWoKBt/u8uoOFursBB7oFJ7qFg7q6g4X8bf7K2o/zjY3zj9oEMf7e/qf+k/7ehvKvaGOq7AKl/sz+S/7LATUBtQQBtjJHCn4BsP7TsZj+9ls2XQ1hJVv+9pix/tKwfQpHMgGhqgHXAQMBAAHBAmgtPj4tKz8/A1k/P1k9a1qDgraCggG3gYG3gduFurwBBru7Av75u7sBB7r95AG1ATaO8/7i9I0En38BfWiw84WD765s/JkBtQE2/sr+S/7LBJc6kjqt1LL+0q+AcUCNGYsqcYGvAS2z1aw6kTtygYAAAAAAAwB0/tsFQwbbAAgAEQBKAAAAIAA1NAAgABAAIgYVFBYyNjQBHgEOAgcGBxcBFhQPAQ4BJyYnAQ4BLwEuATcBNyYnLgM2Nz4CFhceBDMyNj8BPgEeAQOy/lP+0AEwAa0BMP5j05WV05UBVw8FDy4zLYPlUwEyIiIOI2MjTeT+ziNiIw0jASQBMVLogi0zLg8FDwspN0kmBhdLUoBBaL4qLCZJNykCzwEw1tcBL/7Q/lQB1pZqaZaV1P1RHzMpLyYdUxhS/s8jYyIPIgEjTuT+ziIBIw8iYiQBMVIYUx0mLykzHxciEBQeBRAoHRo7HB0eFBAiAAQAAP9uBtsGSQAHADYAPgBOAAAAFAYiJjQ2MgEuAQYHDgIiJi8BLgEGBwYWFxYXBwYHBhQfARYyPwEWFxYyPwE+AS8CNjc+AQIQJiAGEBYgAREUBiMhIiY1ETQ2MyEyFgQjapdqapcBXwsqQyMLLI6Vhh8fI0QpDBkuTV+jOqI5GRkLGUUa2oJYGUYZChkBGto7oWBNLVHZ/s7a2gEyAtTBiPu3iMHBiARJiMEEkJdqapdq/awXGwYcCRwuKhQVHQUbFzNEMj0QO6I4GUUaChkZ2oNXGRkKGUYZ2jsQPTJEATgBM9nZ/s3ZAi77t4jBwYgESYjBwQAAAgAA/24HrgZJABIAKAAAATIWFREUAgAEIyIkAAI1ETQ2MwEyNwE2NzQmIyIHCQEmByIGFRQXARYG/UpnnP77/pPIyf6T/vmbaUkDJjYoAc0qAU84Nij+j/6PKDU4TyoBziYGSWhK/a/J/pL++ZqaAQcBbskCUUlp+0AmAbsoOThPJf6dAWMmAU84Oif+RSYAAQAA/4kKSQYtAEwAAAUBBgAHBiY1JgAnLgIjNCY1IRUOAhcWABc2EjcmAicmJzUFFQ4BFxYSFzY3NiYnNjQ1Mj4BMxUOAQcDFgAXAS4CJzUFFwcGBwAHBqv+rx3+0EsBPF7+c2IYaIUyAQKaLVw7Eh4BszQj+RkW9CEruwJKRUwYJnslfkgbTmwBSfSoFUeCJvMPAQYIAfgQUkMeAg4BAZ9H/acmdgMbOP21mAEBAd0DheY5hGIGKwo6AiBCKEP8EnNGAdYwLQIpPE8COQE1AjU1UP7vTvWqPzgCCCkHAQI4Akg5/gcm/bUTBIorOBABOgUCMwWg+pJWAAAABQAA/tsIAAbbAAoAGABxAIEAkQAAARQGIyImNTQ2MhYXAQ4EBwE+BCUUBy4CIyIVFBcOAQcnJiMiBh8BBiMiJz4CNTQjIg4BByYCJzc2NzQmDwEmNTQ3HgIzMjU0Ji8BNiQ3FxYzMjYvATYzMhcGFxQyNx4BFwcGFRQWPwEWEhACJiQgBAYCEBIWBCAkNgAQAgAEICQAAhASACQgBAAEPSYdHisnOSwRAZAKhpmfbQP+cQiJl6BsAuZ3AyAdBA9DVfyWEgEQBgcCElJV48YBGxYPBxkaAoG1I04LAQ0FThB8AiYfBQ8dFxdYAQCXEQIQBgYBEVFI6cgtARoqf68jQAsMBUEQYZH0/q3+jP6t9JGR9AFTAXQBU/QA/6L+7f6F/mD+hf7toqIBEwF7AaABewETAt8eKyUdHislXwKYCX2OlGgH/WkIfoyWaETmwgIVEQ4LKICzJU0LDAVOEXgCKyIFDyItBFYBAZcRAw4GBwERUkzrxwEaEg4HFQ4OgLAiTQsNBUwPfUAKD0lW/ZUOAhAGBwIOUv74AXUBUvWRkfX+rv6L/q71kZH1Atz+YP6F/u6jowESAXsBoAF8ARKiov7uAAAEAAD+3Qf/BtsACwAWACIAKgAAASQXBBMlJgQHATYkCQEWBDcBJgACNRAlFhIKAQcEJQE2AickIBYQBiAmEAP9ARLxAQmJ/LC3/s46/sSSAaP9jwGBUgE+sP758v504we7QgRy7KP++f7OAc9lDXT99wEeysr+4soG2wKLmf7wLQq/pwHltsX+M/0Ko6oh/f0mARwBtvsBMj6r/pH+tP7eXpgQAsiWAWyHB8v+48vLAR0AAAABAAL+2wgABp0ATQAAASAAAyYCGgE3Az4BFzYkNw4BFx4DFxYGBw4CBxcnBh4CNz4CFx4BBw4EJw4BJx4BPgI3Ni4BJx4BFzYCJwQAExYCDgEEBAj+vf4Fe0IVUK51DA2CDzABDoU+lQgdVTphCREMHQYaZkARnxUYO1svOmxTKkZBCgEEEBkvHUXBj1XKt6p6HzEJTDRjcx8RppwBLwFPBQJhuff+wf7bAVgBHJYBhAF0AVVr/r4QBBRdggMz7UUJDQQFAQZcKAgbNgzYTTFYQB8ICjotAgVCKQIJFA8JA21cDUYxI1R0PWjoxysrX1HCAYt/WP4x/piR/tz8xHIAAgAA/tsIAAbbACMANwAAASYjIgQHBgIHFRYSFxYEMzI3BgQjIicmJAACNTQSACQ7ARYEARQCBwYjIic2EhEQAic2FzIXFhIGqr3dsf7EdFZmBAVlVnUBO7HevIr+ocEhEMj+l/77maIBEwF70APAAV0B4LCbd4edh7Dk4rCImoh6mq0F136nkWr+4qIwof7ja5GnfnuKAgmpARABcsrQAXwBEqIBiPyJ2/56kEhgQAGVAQQBAwGVQl8BSo/+ewAABAAA/u4IAAbJACsANQA/AEYAAAEUByEUFjMyNjchBgAEIyInBCcgETQ3NjcSAQYBEgAhMhckMzIeAhUUBxYDNCYjIgceARc2ARQWMzI3LgEnBgEhLgEjIgYIAAj63fqpccY5AeNA/vv+osDWwf77vf7xMxNq4wE80v7qSAH4AUEiEQEjzEl3YTdVc1B5YHuniuhPOvjib2KDrYvRNXACQANABvakpfUCrUA3p+FqYLb+6ZhfhQEBLIO4RcABmwEaWv7FATkBkgKGHj5wTIXCzwHtX3BQNsF/mvrXYmpfUv6Z6wKeotraAAIAAP9uCJIGSQAPADMAAAERNCYjISIGFREUFjMhMjYTERQGIyEVITIWHQEUBiMhIiY9ATQ2MyE1ISImNRE0NjMhMhYIABYP+NwPFhYPByQPFpJrTPy3AZMQFBQQ/EkQFRUQAZL8t0tsa0wHJEtsAUkESQ8WFg/7tw8VFQRY+7dLbJIVEEkQFBQQSRAVkmxLBElLbGwAAAAAAgAZ/24H5wZJABcAPgAAEzMGBw4DHgEXFhcSFxYXISImNRE0NikBMhYVERQGKwE2AwUOAwcGJy4CJy4BNjc+ATc2HgMXJSae4VBAKTUQAxsVFQUCOiNBbf7JN05OBZsBYDdOTjfL8hL96AIXMFg/jVclL0YnKBgMFBdhRTNYQTsoEwIXTgZJSWFAh5h6tGxmFgr+8GjDd003BdM3TU42+i03TfABlXMzVVA4Dh5MH07ZurrlWSsvSQ8ODRo2OCRyyAAAAAQAEP7bBkEG2wAlAEYAqwDFAAAFBwYHBgciJyYnJicmJyY3NhcWFRYXFhcWFxYzMjc2PwE2FxYXFgEHFxYHBgciLwEHBiMiLwEmNTQ/AScmNzYXMh8BNzYXFgUUBwYHDgEgJicmJyY1IyY3NhcWFzMRNTY3NjMyFhUUBiMiJyY3Nh8BHgEzMjY1NCcmIyIHBhURFjcyPgI1NCcmIyIHBg8BDgInLgE1ETQ2MyEyFCMhETM+ATc2MzIWFxYXFgMWFAYHBiMiJyYnJiMiBwYnJjc2NzYzMhcWBkEHgaewur2tqX+BRzAOBTw6BgEVIDl0cJOXpKOYknAGCxIOGCn9z0xIGCATEQsLR0sGCxETAhUJTEwSIhUPBwhKShUiHwIINTNdW/X+7PVbXjERAQo7OQsqRQEDcnipqO7vp0I+IBESIRAQKg53pFJRd3pSSX6XbsuZU6Gg4+WgPRsCCQwlGRgkGBQD6iIi/GEBLo40fYuK9VtdMzUjCg0MHg8KCHl0kqmYlB8UCgEDD5XBu66dDQaCRkkBSkiAgKZ2YiAKCSABBGdPjnRwPkBAP28HCwQDFisCp0tIGCATAQxGTAYTAhEQCAxKSxIiFQEFTEoTISBUh314XVtqaltedyUIHxQSIHFOAYMDm2527Keo7RINOToJBAMHo3ZzUVFcUmX+KE0BU5nKbOKioKA9JwINCgsJBhoRAwkRGn392DBgFTVpXF13gAISCRcSDx4IaDBAOAs2HQ4SBUFJQwAEACH+2wfcBtsAGwA+AHQAggAAJTYWFAcOBCMiJC4CJy4BPgEWFxYXBCU2JRYGBwYHBiY3PgEnLgMOAiMOAyoCLgEnJjY3NhYBFB4CHwEBLgEvASYnDgMuAjU0PgU3NTQnJgciDgMHJTQ+AzMyHgMVARQXFjc2NzY9AQ4DBu0RGREPR5Ov/4eI/vDOvHMmCQUHCw8G23wBvQHU2QHSDRQXJzoTFQsYNRMGGCYdMxUxAgcPCgoGBgQDAQIHejk1jf5OHyorEA/+/S5ZFhUNECuInKSWd0dAZY+JoHE5GCdjBxhFO0UU/rAyZ5DKdXK5b0od/QBQS1RgIhBDd31KRQcHIhUSP11NOEdohmovChIKBgIEhjjJYi7wEns4Xy4QCxYzrxkICwMCAgIFAQEBAQECAhI3BwgNAeUjTDkwDA3/ACpYFxcNGUNkLgc3X6RoYKBqUy8gCgORSiU9AQIZKl4/H0WGfF04OVNqWyf9R2I2MhkdcDNAuQIXNmwAAAUAAP7bB24G2wAjADMAQwBHAGsAAAEyFhURFAYjISImNRE0NjsBNTQ2OwEyFh0BITU0NjsBMhYdASURFBY7ATI2NRE0JisBIgYFERQWOwEyNjURNCYrASIGAREhEQEhMhYdARQGIyERFAYrASImNREhIiY9ATQ2MyERNDY7ATIWFQbbO1hXPPm3O1dXO5NrS0pLawG3bEtJS2z+3BQQSRAVFRBJEBT8khQQShAUFBBKEBQFJPm3A24BABAVFRD/ABUQSRAU/wAQFRUQAQAUEEkQFQW3Vzv6STtYVzwFtztXbktra0tubktra0tubv62EBQUEAFKEBQUEP62EBQUEAFKEBQU+TkEkvtuApIVEEkQFP8AEBUVEAEAFBBJEBUBABAVFRAAAAAABQAA/tsHbgbbAA8AEwAjADMAVwAAARUUBiMhIiY9ATQ2MyEyFgEhESElETQmKwEiBhURFBY7ATI2JRE0JisBIgYVERQWOwEyNiURFAYjISImNRE0NjsBNTQ2OwEyFh0BITU0NjsBMhYdATMyFgUlFRD9bhAVFRACkhAV+20GSfm3AbcUEEoQFBQQShAUA24VEEkQFBQQSRAVAbdXPPm3O1dXO5NrS0pLawG3bEtJS2ySO1gB20kQFBQQSRAVFf2DBJLbAUoQFBQQ/rYQFBQQAUoQFBQQ/rYQFBRa+kk7WFc8Bbc7V25La2tLbm5La2tLblcAAAUAAP7bB24G2wAjACcANwBHAGsAACUHBiIvAQcGIi8BJjQ/AScmND8BNjIfATc2Mh8BFhQPARcWFAEhESElETQmKwEiBhURFBY7ATI2JRE0JisBIgYVERQWOwEyNiURFAYjISImNRE0NjsBNTQ2OwEyFh0BITU0NjsBMhYdATMyFgT2NQoeC9fXCx4KNQoK2NgKCjUKHgvX1wseCjUKCtfXCvuSBkn5twG3FBBKEBQUEEoQFANuFRBJEBQUEEkQFQG3Vzz5tztXVzuTa0tKS2sBt2xLSUtskjtYrTUKCtjYCgo1Ch4L19cLHgo1CgrX1woKNQoeC9fXCx7+twSS2wFKEBQUEP62EBQUEAFKEBQUEP62EBQUWvpJO1hXPAW3O1duS2trS25uS2trS25XAAAFAAD+2wduBtsAFAAYACgAOABcAAAJAQ4BJwEmND8BNjIfAQE2Mh8BFhQBIREhJRE0JisBIgYVERQWOwEyNiURNCYrASIGFREUFjsBMjYlERQGIyEiJjURNDY7ATU0NjsBMhYdASE1NDY7ATIWHQEzMhYF0f23Cx4M/rcKCjUKHgv8AfsLHgs0Cvq3Bkn5twG3FBBKEBQUEEoQFANuFRBJEBQUEEkQFQG3Vzz5tztXVzuTa0tKS2sBt2xLSUtskjtYAo79twoBCwFJCx4KNQoK/AH8Cgo1Ch781QSS2wFKEBQUEP62EBQUEAFKEBQUEP62EBQUWvpJO1hXPAW3O1duS2trS25uS2trS25XAAAAAAEAAP7bCAAG2wAdAAABMhYVEQE2MzIWFREBNjMyFhURFAYjISImNRE0NjMCAB4rAmUTGh4sAmQTGx4rKx74kh4rKx4G2yse/AYB6hArHv5PAeoQKx763B4sLB4HbR4rAAMAAP7bBJIG2wAMABQAJAAAATI3ERQGKwEiJjURFgIgABAAIAAQJTI2NCYjIgYVFBYyNjU0NgJJS0crHpIeK0WlAeQBV/6p/hz+qQJJEBUVEKfrFCAVwQIAEf0UHiwsHgLsEQTb/qr+G/6pAVcB5VYVIBXspxAUFBCIwQADACr+2wfWBtsAGwAlADsAAAEeAQ8BBiMhIiY1ETQ2MyE1NDY7ATIWHQEhMhcBIREUBisBIiY1ATIWFREUBiMhIi8BLgE/ATYzITUhFQfKCwEMoSAu+gAeKywdApMrHpIeKwJJLiD8RQEkKx6SHisDtx4rLB36AC4goQsBDKEgLgJJASQFiAseDKEgLB0BJR4rSR4rKx5JIPtF/bceLCweBEksHf7bHisgoQseDKEg29sAAAAEAAD+2wklBtYAGwAfACMAJwAAARYVERQGBwEGJwkBBiMiJyY1ETQ2NwE2FwkBNgURARElESURAREFEQkFIBoU/SQbG/1A/UALERYTIBkVAtsbHALAAsAl+mQCkvq3Am4Fkv2TBs8XJvm3FyQI/tsNDQEZ/ucGDRcmBkkXJAgBJQ0N/ucBGQ+w+lT++QWsD/pU+AWs+kUFrPj6VAADAAD+2wgABtsAEQAjADUAAAEyFhURFAcBBiMiJjURNDcBNiEyFhURFAcBBiMiJjURNDcBNiEyFwEWBxEUBiMiJwEmNxE0NgJJDxYU/dwICQ8WEwIlCAWbDxYT/dsICQ8WFAIkCPsJCQcCShUBFg4JB/22FQEVBtsVD/luFwn+2wUWDwaSFwkBJQQVD/luFwn+2wUWDwaSFwkBJQQD/tsLFvluDxYEASQLFwaSDxUAAAQAAP8ACAAFtwAHAA8AFwA4AAAANCYiBhQWMiQ0JiIGFBYyJDQmIgYUFjIAEAAEISInBgUGBwYmJyY3Pgc3JgI1NAAkIAQC21V5VlZ5AgxVelVVegIMVnlVVXkCDf7u/in+6X5zxv7VOygOFgQFHAYqECYRHhARBqe/ARIB1wIuAdcCn3lWVnlWVnlWVnlWVnlWVnlWAVn+c/6uwxXGQAsEARAMERoGJRAqHjc3TC1nASGjxwFRxMQAAAAABQAA/tsIAAW3AAcADwAXAC4AVwAAABQGIiY0NjIEFAYiJjQ2MgQUBiImNDYyACAEAhUUFh8BBwYHNj8BFxYzMiQSEAIBFAAEISInBgUGByMiJic1JjYmPgI3PgU3JgI1NBIsASAMARIC21V5VlZ5AgxVelVVegIMVnlVVXn+9v4u/mrvpJRkHxs1rowxQU9G6QGW7+8Bgf7u/in+6VBW4v7VOEsFERwFAwYBCwIOAgg3GC8bIwyzz6IBEwF7AaABewETogMYeVZWeVZWeVZWeVZWeVZWeVYBt5/+8p2A6FQ5bmhdSHwrBwmfAQ4BOQEO/lXH/q/DCchMEAoYFAEFEgQSAxACCT0aQDVSLmYBK6uVAQ/EdHTE/vEAAAAEAAD+5gSSBtEAAwAGAAoADQAACQERCQERARkBAREJARECSQJJ/bf9twJJ/bcCSQJJAYoBUf1d/q4D9f1dAVIFR/1d/q0CpP6vAVH9XAAAAAEAXv+3B6EGAAAkAAABAgEAJSIDJgMCJyIHJz4BNzY3NhYXEhcSMzI3Njc2IyIHEgUEB6EL/pD+g/76onAyZVJhFXxYG8A1smFthBsyGT9KOnZzCg+MQUmJAYMBHwSL/vL+Jv4TAQEstwFwASsBV3AYrC6eCQqTn/64Yv7juLhhnx4BwQwKAAACAAD/bgbbBkkAAwAKAAARIREhAQMTIRMDAQbb+SUE2P39/Sv9/QFrBkn5JQHhAtEBU/6t/S/+pAAAAAAEAAD/bgbbBkkAAwASAEAAVAAAESERIQEHFwcXNxc3JzcnIycjBwUyFgc3NC4CIyIGHQEjFTMyFREUBg8BFSE1Jy4CPgE1ETM3ISI2PQE0PgIBNScuATQ2NREhBxcWFxEUBg8BFQbb+SUEDg5WJB16eh0jVQ1tPSQ9/mMlHAHGKEtSOJiXblcXDA5UAgCqBwYCAQHbK/74BwkEDSACzz0IBgL+xhpeGgEOEFAGSfklBW0lX4IdQUEdgl8lbm66JDYYP1UrEISPUpIJ/ksQDgEIZGIQAQEFBAwGAbqSDgNcHx4iDPxNYgoBBAMOBwJScxkIF/5ZEAoDCmIAAAAEAAD/TggABtsALwA5AFEAWwAAARQGBxYVFAIEICQCNTQ3LgE1NDYzMhc2JRM+ARcFPgEzMhYUBiImNSUDBBc2MzIWARQWMjY0JiMiBgE2NCcmIgcOASImJyYiBwYUFx4CMj4BAjI2NTQmIyIGFAgAQzoO8/5b/hL+XfMMOkeFXmFF+QFUhAMcEAGmFVIxR2RkjmP+gncBV/pCYl+E+d5jjmRkR0ZkA50NDQsiDS+3trcvDSILDQ0xrGxkbKwZjmNkRkdkAxVCbR01ObH+06+vAS2xNjYdbkNehUiuCwJUDxIEXCozY45kY0dV/eQKrUaF/r5HZGSOY2T+JA0iDQsLMC4uMAsLCyQNMTkKCjkBHGRHRmRjjgAAAQBP/t4HsQbbADAAABMzNhI+ASQzIAQXFhEVIR4DPgE3EQYMAScmACcCADcOAQchNi4ELwEGBA4BTwESYabZASapAQgBon93+voBecDx9eZUaf7F/nCh2P7oAgMBBPE3RBMC1gkkR1tdThkZmv7j4rADT5ABCOiqYvHi1v7d13+6XiQdTTr+UT9UAj1TAZPgARUBhHBFlWxYkFhAHhEBAgZalawAAAAABAAA/24KSQZJAAkADQARABsAADURIREUBiMhIiYBFSE1IRUhNQEyFhURIRE0NjMKSWtM9yVLbALbAbf8kwEkB0lLbPW3a0wlArb9SktsbAFLk5OTkwUka0z/AAEAS2wAAwAA/tsHogbbAAkAIwBEAAABMhYUBisBFSMRAQ8BAgAhIiQAAhASACQzIAAfAg4BBwYBBAEgABMlBgQjIiQCEBIkIAQXJSYAISIEDgICEBIeAgQG6j9GTkGbHQF6BAaB/g/+2tD+hf7toqIBEwF70AEXAeGIAgki80EH/eMBt/44AR4B5X7+uFL+zrWt/tqsrAEmAVoBJlYBQIX+LP7wiP7927mASEiAudsBAwPTQX0+ygHG/V4MDP75/smjARIBewGgAXwBEqL+5fUEEhF7IwP+0NH88wEuAQKToLurAScBWQEnq6iVo+4BFEiAudr+/P7w/v3auYBIAAAABAAl/tsH2wbbAAMABwALAA8AAAkBNyEBJxEBHwERCQIhAQZf/UJpA9H59NIFSBao/aABjv3F/C8BlgOxAbmt/GuFA9T8r21t/CsBfwLb/GsCjQAAAwAA/tsHbgbbAAsAFwBrAAABETQnIyIVERQ7ATIlETQnIyIHERQ7ATIFESERNCYiBhURIRE0OwEyHQEzETQ7ATIdATM1NDsBMh0BMzU0OwERJjc0NjIWFRQHFSEyFxEUIyEVMzIdATM1NDsBMhcVMzU0OwEyFREzNTQ7ATIC2xJuEhJuEgJKE20SARNtEwJJ/SSAt4D9JRJuEpMSbhKSEm4SkxISJQErPCslATcSARP+yRMSkhNtEgGSEm4SkhNtEwJbAQASARP/ABISAQASARP/ABIS/KQBbluBgFz+kgNcEhKAAskSEoCAEhKAgBIBwRYpHisrHikWChL/ABKTEoCAEhKAgBIS/TeAEgAAAAABAAAAAApJBkkAagAAARYUBwUGJyInJic1IRYXHgU7ATU0NjMhMhYVERQGIyEiJj0BIyIuBScuAyMhDgEjIiY0NjMyFhczMj4CNz4GOwE+ATMyFhQGIyImJyMiDgQHBgchNTQ2Fwo3EhL+kgkJCggSAfwsKjUSEyQaIyUTbhUQAW0QFRUQ/pMQFW4lQTM0IC0UFhogMzMc/mUZnmR5rKt6ZZ0Zdxs0MiAaFhUsIDUyQiV6GHBHW4CAW0dwGHoTJSQaIxQSNSoE+SUSA0MJKwncBgEECxWSQnoqKkYlKRJtEBUVEP6TEBUVEG0XHz4rVy0uPUFUJmB7q/Ore2AnU0E9LyxXKz4fF0FRgLeAUUITKSRHKSt6QpIVFgwAAAMAAP7bCAAG2wAHABEAIQAAABQGIyERITIAECYjIREzESEyABACAAQgJAACEBIAJCAEAAUiWkD+3wEhQAEn0Zb+Ec4BIZUC46L+7f6F/mD+hf7toqIBEwF7AaABewETA7WAWgE0/tEBKdL8AAE0AZz+YP6F/u6jowESAXsBoAF8ARKiov7uAAAEAAD/0wpJBeMAJwA6AE0AYAAAATQmJwYHDgEjIicuATc2NTQuASMiBAcWFxYUBiInJgciBhQWMyEyNjcUBiMhIgA1NBI3NgAzIAATHgEFFAcGIyInLgE3NhAnJj4BFhcWJBAHBiMiJy4BNzYQJyY2NzYWFwdYTjwIEwguHA4NIyEMGovwjZn+/j57XBkyShpWeHmrq3kErFp/r+ai+1TB/u7lqkcBa98BDQGMGoWvAR5vGi8bFx4NFVFRFQ47SBVvASSZGi8aFh4PFXt7FQ8eHkYVAfVDbRgzNxsgAwtCIlFTje6Mp4sgWRpJMhlWAaryqn9ZouUBEcGvAQQa0gEE/pb++B3VisilJg8TSR13ASd3HkYqDx6iTf3T5CcPFUcduwG+uR5HFBUOHwACACn+2wayBtsACQBuAAAFFAYiJjU0NjIWJQ4BFRQXBgUiLgU1ND4DMh4DFRQHHgEfATI2NTQuBCcmJy4DNTQ+AzMyHgMVFA4DIyIjKgEuBDUuAS8BIg4BFRQeAxceCAaykM2Sks2Q/vaDsian/vZ90oxwPigOCiA0X3leMh8JGiB7LS2DrBQ0PmtqVCARhaJ1Ly9omeOMieSUZysiMT4yFAIHFh08KTUgFhFlKitOcTAMK06QY1ePalQ3JxUMAg9mkZFmZ5GR2hHIh1VIWQEwTWJgXjoQFjZKOikoNUQsECc2HyICAXReHjMyLDkzJw8IP2eCnWtZpZVvQTteeXg6NVMxIQwMFCw9ZD0SFgIBR1krGys+N0MiHUA+ST9QPlM7AAAAAwAA/24G2wZJAA8AHwArAAABETQmIyEiBhURFBYzITI2JRE0JiMhIgYVERQWMyEyNgAQAgQgJAIQEiQgBAMlFRD+2xAUFBABJRAVAgAVEP7bEBQUEAElEBUBtuv+bf4i/mzr6wGUAd4BkwGSApMQFBQQ/W0QFBQQApMQFBQQ/W0QFBQCSP4j/mzr6wGUAd0BlOvrAAQAAP9uBtsGSQALABcAJwA3AAAAIAQSEAIEICQCEBIAICQSEAIkIAQCEBIlIiY1ETQ2OwEyFhURFAYjISImNRE0NjsBMhYVERQGIwJ/Ad4Bk+vr/m3+Iv5s6+sB2gFSAR6mpv7i/q7+4qenAjQQFBQQ3BAUFBD9bhAVFRDbEBUVEAZJ6/5s/iP+bOvrAZQB3QGU+xCnAR0BUwEdp6f+4/6t/uNZFBACkxAUFBD9bRAUFBACkxAUFBD9bRAUAAAAAAIAAP9uBtsGSQAPABsAAAERNCYjISIGFREUFjMhMjYAEAIEICQCEBIkIAQE2xQQ/W4QFRUQApIQFAIA6/5t/iL+bOvrAZQB3gGTAZICkxAUFBD9bRAUFAJI/iP+bOvrAZQB3QGU6+sAAwAA/24G2wZJAAsAFwAnAAAAIAQSEAIEICQCEBIAICQSEAIkIAQCEBI3IiY1ETQ2MyEyFhURFAYjAn8B3gGT6+v+bf4i/mzr6wHaAVIBHqam/uL+rv7ip6d+EBUVEAKSEBQUEAZJ6/5s/iP+bOvrAZQB3QGU+xCnAR0BUwEdp6f+4/6t/uNZFBACkxAUFBD9bRAUAAMAAP7bCAAG2wALACUAPQAAJRMWBwYjISInJjcTARMhEz4BMyEVFBYyNj0BIRUUFjI2PQEhMhYlERQGIiY1ETQmIgYVERQGIiY1ETQAIAAH2CgDFRYh+JIhFhYEKAdGYvhgYgMqHAElVnlWAbZWeVYBJR0p/kwsOyus8qwrOywBAQFsAQGS/psgGhgYGSEBZQO//IoDdhsmkj1VVT2Skj1VVT2SJrn+2x4rKx4BJXmrq3n+2x4rKx4BJbYBAP8AAAYAAP7bCSUG2wAVACMALwA7AEkAbQAAATIWFAYrAQMOASMhIiYnAyMiJjQ2MwE+AScDLgEOARcTHgEzJRE0JiIGFREUFjI2JRE0JiIGFREUFjI2JRM2LgEGBwMGFhczMjYBAyMTPgE7ATQ2MyEyFhUzMhYXEyMDLgErARQGIyEiJjUjIgYIkj1WVj0RgwlTNPpJNVIJhBE9VVY8AZgeKAIlAi87KAIkAisdAdsrPCsrPCsBtyw7Kys7LAGSJQIoOy8DJAIoHQYdKvrZapdzFqBnvyseAbceK79noBV0l2oNTzO/LB3+SR4rvzNPA25WeVb9DDVFRTUC9FZ5VvxtAjAdAdweJwQvHv4lHSdKAdseKyse/iUeLCweAdseKyse/iUeLCwYAdseLwQoHf4kHi4DJwWM/ikB+GV+HisrHn9k/ggB1zJAHisrHkAAAgAm/24H2gZJAAMATwAAARMhAwEDBiMhAyEyFxYHAwYjIQMGIyEiJyY3EyEDBiMhIicmNxMhIicmNxM2MyETISInJjcTNjchEzYzITIXFgcDIRM2MyEyFxYHAyEyFxYEbUn+3UkEkEAIG/6KSQFjEQwLBEAGHv6LXQgb/wASDAoDWf7eXQgb/v8RDAoDWv6cEQsKA0AIGwF2Sf6dEQwLBEAGHgF1XQgcAQARDAoDWQEiXQgcAQARDAoDWgFkEQsKAkkBJf7bAkD/ABv+2w4QEP8AG/6JGw0OEgFl/okbDQ4SAWUODhIBABsBJQ0QEAEAGwEBdxsODhL+nAF3Gw4OEv6cDg4AAAAABAB6/tsGYQbbAAIABQARACUAAAEXBxEXBwMJAxEBBwkBFwEAEAIOAiAuAgIQEj4CIB4CA8GpqqqplgIT/qIBXv3t/t1qAW3+k2oBIwM2SX/C3f7n3MN/SUl/w9wBGd3CfwIoqaoEDaqp+9wCEwFdAV4CEv1GASRr/pH+kmsBJAGk/iP+muaOODiO5gFmAd0BZuaNODiN5gADAC7+2wRlBtsAAgAFABEAACU3JxE3JxMJAREBJwkBNwERAQKpxsbGxiUBl/2Y/qx7Aan+V3sBVAJogcXEAaPExf2l/mr9lgMt/q57AaoBq3v+rgMs/ZcABQAA/24G2wZJAAcADwAXACkAMQAAJDQmIgYUFjIANCYiBhQWMgAQACAAEAAgExQHAQYnIyImNTQ3ATY7ATIWBBAAIAAQACAFt1d3V1d3/OlXd1ZWdwTp/v/+lf7/AQEBa5QP+0kWJLceKw8EthYltx4r/QD+//6U/v8BAQFs6XdXV3dXA8V3V1d3V/3a/pX+/wEBAWsBAQMlFxT5th4BKx4XFAZJHivW/pX+/gECAWsBAQAAAQAAAAQBBssslIdfDzz1AB8IAAAAAADSmf2tAAAAANKZ/a3///7bCkoG3AAAAAgAAgABAAAAAAABAAAG3P6yAAAKSf////8KSgABAAAAAAAAAAAAAAAAAAACdALsAEQAAAAAAqoAAAIAAAACAAAAA24AAAbcAAADbgAABtwAAAJJAAABtwAAASQAAAEkAAAA2wAAAV8AAABhAAABXwAAAbcAAAI7AAAIAABqBtsAAAdtAAAIAAAACAAAAAdtAAAHbQAABkkAAAiSAAAHbQAACAAAAAgAAAAIAACKBkkAfgdtAAAHbQAABtsAAAgAAAAG2wAABkkAAAdtAB4G2wAABtsAAAiSADkHbQAABtsAAAbbAAAG2wAABtsAAAbbAAAG2wAACAAAAAUkAAAIAABJB20AAANtAAAFJAAAB20AAAZJAAAIAAAABtsAAAiSAAAHbQALBbYAAAdtAAAIkgAAB20AAAZJAAAEkgAACAAAAAbbAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAiSAAAG2wAABJIAAAbbAAAEkgAACAAAAAdtAAAHbQAACAAAAASSAAAIAAAAB20AiwZJAAAG2wAABtsAAAdtAAAIAAAABJIAAAbdAAEFtgCwBbYAZwbbAAAG2wAABtsAAAbbAAAG2wAABtsAAAbbAAAG2wAABtsAAAbbAAAG2wBJBtsAAAdtAD0HbQA9CAAAAAbbAAAG2wAPBkkAAAZJAAAHbQCLBtsAAAbbAAAIAAAABkkAAAgAAAAIAAAACAAAEgZJAAAHbQAACAAAAAgAAAAG2wAACAAAZwgAAGcIkgAAB20AAAdtAAAIkgAAA20ASQgAAAAJJAAABtsAAAbbAAAIAAAACAAAAAiSAAAIAAAABtsAAAbbAAAEAAAACAAAAAdtAAAG2wAABSQAAAgAAAAG2wAAB20AAAbbAAAHbQAABtsAAAZJAAAGSQAABbYAAAbbAAAHbQAyBJIAbQbbAAAHbQAACJIAAAZJAAAG2wAACAAAAAgAAEkG2wACCAAAAAgAAAAG2wAABtsAAAbbAAAG2wAABtsAAAbbAAAG2wAAB20AGAgAAAAGSQAGCAAAAAbbAAAIkgAAB20AEgiSAAAHbQCECAAAAQgAAAAGSQAFBtsAAAbbAAAG2wAACAAAAAgAABEIAAAABtsAAAdtAAAHbQAeCAAASQbbAAAG2wAABtsAAApJAAAIkgAABJIAAASSAAAC2wBJAtsAAAdtAAAEkgAABJIAAASSAAAIAAAABtsAAAbbAAAIAAAuCAAAAAgAAAAIAAAABAAAAQgAAAAHbQAACAAAAASSAAAIAAAACJIAAAiSAAAGSQAABkkAAAgAAAAIAABJCJIAAAZJAAAG2wAABkkAAAZJAAAIkgBJCAAAAAiSAAAHbQBJBtsAAAbbAAAEkgAzBJIADwUkAFgFJABYAtsAMwLbAA8FJABYBSQAWAiSAAAIkgAABSQAAANtAAAG2wAAB20AAAdtAAAIAABJBtsAAAgAAAAHbQAAB20AAAiSAAAIAAAACAAAAAbbAAAG2wAA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AHkAcgBpAGcAaAB0ACAAcwBlAGMAdABpAG8AbgAgAGYAbwByACAAdABoAGUAIABmAG8AbgB0ACAAdAByAGEAZABlAG0AYQByAGsAIABhAHQAdAByAGkAYgB1AHQAaQBvAG4AIABuAG8AdABpAGMAZQBzAC4ARgBvAHIAdAAgAEEAdwBlAHMAbwBtAGUARABhAHYAZQAgAEcAYQBuAGQAeQBoAHQAdABwADoALwAvAGYAbwBuAHQAYQB3AGUAcwBvAG0AZQAuAGkAbwBoAHQAdABwADoALwAvAGYAbwBuAHQAYQB3AGUAcwBvAG0AZQAuAGkAbwAvAGwAaQBjAGUAbgBzAGUALwBXAGUAYgBmAG8AbgB0ACAAMQAuADAARgByAGkAIABEAGUAYwAgADEAOAAgADEAMwA6ADEANQA6ADEAMAAgADIAMAAxADUAawBlAGUAcABvAHIAaQBvAG4ARgBvAG4AdAAgAFMAcQB1AGkAcgByAGUAbAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnQAAAECAQMAAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMvAzADMQMyAzMDNAM1AzYDNwM4AzkDOgM7AzwDPQM+Az8DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwZnbHlwaDEHdW5pMDAwRAd1bmkwMEEwB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDJGB3VuaTIwNUYHdW5pMjVGQwd1bmlGMDAwB3VuaUYwMDEHdW5pRjAwMgd1bmlGMDAzB3VuaUYwMDQHdW5pRjAwNQd1bmlGMDA2B3VuaUYwMDcHdW5pRjAwOAd1bmlGMDA5B3VuaUYwMEEHdW5pRjAwQgd1bmlGMDBDB3VuaUYwMEQHdW5pRjAwRQd1bmlGMDEwB3VuaUYwMTEHdW5pRjAxMgd1bmlGMDEzB3VuaUYwMTQHdW5pRjAxNQd1bmlGMDE2B3VuaUYwMTcHdW5pRjAxOAd1bmlGMDE5B3VuaUYwMUEHdW5pRjAxQgd1bmlGMDFDB3VuaUYwMUQHdW5pRjAxRQd1bmlGMDIxB3VuaUYwMjIHdW5pRjAyMwd1bmlGMDI0B3VuaUYwMjUHdW5pRjAyNgd1bmlGMDI3B3VuaUYwMjgHdW5pRjAyOQd1bmlGMDJBB3VuaUYwMkIHdW5pRjAyQwd1bmlGMDJEB3VuaUYwMkUHdW5pRjAyRgd1bmlGMDMwB3VuaUYwMzEHdW5pRjAzMgd1bmlGMDMzB3VuaUYwMzQHdW5pRjAzNQd1bmlGMDM2B3VuaUYwMzcHdW5pRjAzOAd1bmlGMDM5B3VuaUYwM0EHdW5pRjAzQgd1bmlGMDNDB3VuaUYwM0QHdW5pRjAzRQd1bmlGMDQwB3VuaUYwNDEHdW5pRjA0Mgd1bmlGMDQzB3VuaUYwNDQHdW5pRjA0NQd1bmlGMDQ2B3VuaUYwNDcHdW5pRjA0OAd1bmlGMDQ5B3VuaUYwNEEHdW5pRjA0Qgd1bmlGMDRDB3VuaUYwNEQHdW5pRjA0RQd1bmlGMDUwB3VuaUYwNTEHdW5pRjA1Mgd1bmlGMDUzB3VuaUYwNTQHdW5pRjA1NQd1bmlGMDU2B3VuaUYwNTcHdW5pRjA1OAd1bmlGMDU5B3VuaUYwNUEHdW5pRjA1Qgd1bmlGMDVDB3VuaUYwNUQHdW5pRjA1RQd1bmlGMDYwB3VuaUYwNjEHdW5pRjA2Mgd1bmlGMDYzB3VuaUYwNjQHdW5pRjA2NQd1bmlGMDY2B3VuaUYwNjcHdW5pRjA2OAd1bmlGMDY5B3VuaUYwNkEHdW5pRjA2Qgd1bmlGMDZDB3VuaUYwNkQHdW5pRjA2RQd1bmlGMDcwB3VuaUYwNzEHdW5pRjA3Mgd1bmlGMDczB3VuaUYwNzQHdW5pRjA3NQd1bmlGMDc2B3VuaUYwNzcHdW5pRjA3OAd1bmlGMDc5B3VuaUYwN0EHdW5pRjA3Qgd1bmlGMDdDB3VuaUYwN0QHdW5pRjA3RQd1bmlGMDgwB3VuaUYwODEHdW5pRjA4Mgd1bmlGMDgzB3VuaUYwODQHdW5pRjA4NQd1bmlGMDg2B3VuaUYwODcHdW5pRjA4OAd1bmlGMDg5B3VuaUYwOEEHdW5pRjA4Qgd1bmlGMDhDB3VuaUYwOEQHdW5pRjA4RQd1bmlGMDkwB3VuaUYwOTEHdW5pRjA5Mgd1bmlGMDkzB3VuaUYwOTQHdW5pRjA5NQd1bmlGMDk2B3VuaUYwOTcHdW5pRjA5OAd1bmlGMDk5B3VuaUYwOUEHdW5pRjA5Qgd1bmlGMDlDB3VuaUYwOUQHdW5pRjA5RQd1bmlGMEEwB3VuaUYwQTEHdW5pRjBBMgd1bmlGMEEzB3VuaUYwQTQHdW5pRjBBNQd1bmlGMEE2B3VuaUYwQTcHdW5pRjBBOAd1bmlGMEE5B3VuaUYwQUEHdW5pRjBBQgd1bmlGMEFDB3VuaUYwQUQHdW5pRjBBRQd1bmlGMEIwB3VuaUYwQjEHdW5pRjBCMgd1bmlGMEMwB3VuaUYwQzEHdW5pRjBDMgd1bmlGMEMzB3VuaUYwQzQHdW5pRjBDNQd1bmlGMEM2B3VuaUYwQzcHdW5pRjBDOAd1bmlGMEM5B3VuaUYwQ0EHdW5pRjBDQgd1bmlGMENDB3VuaUYwQ0QHdW5pRjBDRQd1bmlGMEQwB3VuaUYwRDEHdW5pRjBEMgd1bmlGMEQzB3VuaUYwRDQHdW5pRjBENQd1bmlGMEQ2B3VuaUYwRDcHdW5pRjBEOAd1bmlGMEQ5B3VuaUYwREEHdW5pRjBEQgd1bmlGMERDB3VuaUYwREQHdW5pRjBERQd1bmlGMEUwB3VuaUYwRTEHdW5pRjBFMgd1bmlGMEUzB3VuaUYwRTQHdW5pRjBFNQd1bmlGMEU2B3VuaUYwRTcHdW5pRjBFOAd1bmlGMEU5B3VuaUYwRUEHdW5pRjBFQgd1bmlGMEVDB3VuaUYwRUQHdW5pRjBFRQd1bmlGMEYwB3VuaUYwRjEHdW5pRjBGMgd1bmlGMEYzB3VuaUYwRjQHdW5pRjBGNQd1bmlGMEY2B3VuaUYwRjcHdW5pRjBGOAd1bmlGMEY5B3VuaUYwRkEHdW5pRjBGQgd1bmlGMEZDB3VuaUYwRkQHdW5pRjBGRQd1bmlGMTAwB3VuaUYxMDEHdW5pRjEwMgd1bmlGMTAzB3VuaUYxMDQHdW5pRjEwNQd1bmlGMTA2B3VuaUYxMDcHdW5pRjEwOAd1bmlGMTA5B3VuaUYxMEEHdW5pRjEwQgd1bmlGMTBDB3VuaUYxMEQHdW5pRjEwRQd1bmlGMTEwB3VuaUYxMTEHdW5pRjExMgd1bmlGMTEzB3VuaUYxMTQHdW5pRjExNQd1bmlGMTE2B3VuaUYxMTcHdW5pRjExOAd1bmlGMTE5B3VuaUYxMUEHdW5pRjExQgd1bmlGMTFDB3VuaUYxMUQHdW5pRjExRQd1bmlGMTIwB3VuaUYxMjEHdW5pRjEyMgd1bmlGMTIzB3VuaUYxMjQHdW5pRjEyNQd1bmlGMTI2B3VuaUYxMjcHdW5pRjEyOAd1bmlGMTI5B3VuaUYxMkEHdW5pRjEyQgd1bmlGMTJDB3VuaUYxMkQHdW5pRjEyRQd1bmlGMTMwB3VuaUYxMzEHdW5pRjEzMgd1bmlGMTMzB3VuaUYxMzQHdW5pRjEzNQd1bmlGMTM2B3VuaUYxMzcHdW5pRjEzOAd1bmlGMTM5B3VuaUYxM0EHdW5pRjEzQgd1bmlGMTNDB3VuaUYxM0QHdW5pRjEzRQd1bmlGMTQwB3VuaUYxNDEHdW5pRjE0Mgd1bmlGMTQzB3VuaUYxNDQHdW5pRjE0NQd1bmlGMTQ2B3VuaUYxNDcHdW5pRjE0OAd1bmlGMTQ5B3VuaUYxNEEHdW5pRjE0Qgd1bmlGMTRDB3VuaUYxNEQHdW5pRjE0RQd1bmlGMTUwB3VuaUYxNTEHdW5pRjE1Mgd1bmlGMTUzB3VuaUYxNTQHdW5pRjE1NQd1bmlGMTU2B3VuaUYxNTcHdW5pRjE1OAd1bmlGMTU5B3VuaUYxNUEHdW5pRjE1Qgd1bmlGMTVDB3VuaUYxNUQHdW5pRjE1RQd1bmlGMTYwB3VuaUYxNjEHdW5pRjE2Mgd1bmlGMTYzB3VuaUYxNjQHdW5pRjE2NQd1bmlGMTY2B3VuaUYxNjcHdW5pRjE2OAd1bmlGMTY5B3VuaUYxNkEHdW5pRjE2Qgd1bmlGMTZDB3VuaUYxNkQHdW5pRjE2RQd1bmlGMTcwB3VuaUYxNzEHdW5pRjE3Mgd1bmlGMTczB3VuaUYxNzQHdW5pRjE3NQd1bmlGMTc2B3VuaUYxNzcHdW5pRjE3OAd1bmlGMTc5B3VuaUYxN0EHdW5pRjE3Qgd1bmlGMTdDB3VuaUYxN0QHdW5pRjE3RQd1bmlGMTgwB3VuaUYxODEHdW5pRjE4Mgd1bmlGMTgzB3VuaUYxODQHdW5pRjE4NQd1bmlGMTg2B3VuaUYxODcHdW5pRjE4OAd1bmlGMTg5B3VuaUYxOEEHdW5pRjE4Qgd1bmlGMThDB3VuaUYxOEQHdW5pRjE4RQd1bmlGMTkwB3VuaUYxOTEHdW5pRjE5Mgd1bmlGMTkzB3VuaUYxOTQHdW5pRjE5NQd1bmlGMTk2B3VuaUYxOTcHdW5pRjE5OAd1bmlGMTk5B3VuaUYxOUEHdW5pRjE5Qgd1bmlGMTlDB3VuaUYxOUQHdW5pRjE5RQd1bmlGMUEwB3VuaUYxQTEHdW5pRjFBMgd1bmlGMUEzB3VuaUYxQTQHdW5pRjFBNQd1bmlGMUE2B3VuaUYxQTcHdW5pRjFBOAd1bmlGMUE5B3VuaUYxQUEHdW5pRjFBQgd1bmlGMUFDB3VuaUYxQUQHdW5pRjFBRQd1bmlGMUIwB3VuaUYxQjEHdW5pRjFCMgd1bmlGMUIzB3VuaUYxQjQHdW5pRjFCNQd1bmlGMUI2B3VuaUYxQjcHdW5pRjFCOAd1bmlGMUI5B3VuaUYxQkEHdW5pRjFCQgd1bmlGMUJDB3VuaUYxQkQHdW5pRjFCRQd1bmlGMUMwB3VuaUYxQzEHdW5pRjFDMgd1bmlGMUMzB3VuaUYxQzQHdW5pRjFDNQd1bmlGMUM2B3VuaUYxQzcHdW5pRjFDOAd1bmlGMUM5B3VuaUYxQ0EHdW5pRjFDQgd1bmlGMUNDB3VuaUYxQ0QHdW5pRjFDRQd1bmlGMUQwB3VuaUYxRDEHdW5pRjFEMgd1bmlGMUQzB3VuaUYxRDQHdW5pRjFENQd1bmlGMUQ2B3VuaUYxRDcHdW5pRjFEOAd1bmlGMUQ5B3VuaUYxREEHdW5pRjFEQgd1bmlGMURDB3VuaUYxREQHdW5pRjFERQd1bmlGMUUwB3VuaUYxRTEHdW5pRjFFMgd1bmlGMUUzB3VuaUYxRTQHdW5pRjFFNQd1bmlGMUU2B3VuaUYxRTcHdW5pRjFFOAd1bmlGMUU5B3VuaUYxRUEHdW5pRjFFQgd1bmlGMUVDB3VuaUYxRUQHdW5pRjFFRQd1bmlGMUYwB3VuaUYxRjEHdW5pRjFGMgd1bmlGMUYzB3VuaUYxRjQHdW5pRjFGNQd1bmlGMUY2B3VuaUYxRjcHdW5pRjFGOAd1bmlGMUY5B3VuaUYxRkEHdW5pRjFGQgd1bmlGMUZDB3VuaUYxRkQHdW5pRjFGRQd1bmlGMjAwB3VuaUYyMDEHdW5pRjIwMgd1bmlGMjAzB3VuaUYyMDQHdW5pRjIwNQd1bmlGMjA2B3VuaUYyMDcHdW5pRjIwOAd1bmlGMjA5B3VuaUYyMEEHdW5pRjIwQgd1bmlGMjBDB3VuaUYyMEQHdW5pRjIwRQd1bmlGMjEwB3VuaUYyMTEHdW5pRjIxMgd1bmlGMjEzB3VuaUYyMTQHdW5pRjIxNQd1bmlGMjE2B3VuaUYyMTcHdW5pRjIxOAd1bmlGMjE5B3VuaUYyMUEHdW5pRjIxQgd1bmlGMjFDB3VuaUYyMUQHdW5pRjIxRQd1bmlGMjIxB3VuaUYyMjIHdW5pRjIyMwd1bmlGMjI0B3VuaUYyMjUHdW5pRjIyNgd1bmlGMjI3B3VuaUYyMjgHdW5pRjIyOQd1bmlGMjJBB3VuaUYyMkIHdW5pRjIyQwd1bmlGMjJEB3VuaUYyMkUHdW5pRjIyRgd1bmlGMjMwB3VuaUYyMzEHdW5pRjIzMgd1bmlGMjMzB3VuaUYyMzQHdW5pRjIzNQd1bmlGMjM2B3VuaUYyMzcHdW5pRjIzOAd1bmlGMjM5B3VuaUYyM0EHdW5pRjIzQgd1bmlGMjNDB3VuaUYyM0QHdW5pRjIzRQd1bmlGMjQwB3VuaUYyNDEHdW5pRjI0Mgd1bmlGMjQzB3VuaUYyNDQHdW5pRjI0NQd1bmlGMjQ2B3VuaUYyNDcHdW5pRjI0OAd1bmlGMjQ5B3VuaUYyNEEHdW5pRjI0Qgd1bmlGMjRDB3VuaUYyNEQHdW5pRjI0RQd1bmlGMjUwB3VuaUYyNTEHdW5pRjI1Mgd1bmlGMjUzB3VuaUYyNTQHdW5pRjI1NQd1bmlGMjU2B3VuaUYyNTcHdW5pRjI1OAd1bmlGMjU5B3VuaUYyNUEHdW5pRjI1Qgd1bmlGMjVDB3VuaUYyNUQHdW5pRjI1RQd1bmlGMjYwB3VuaUYyNjEHdW5pRjI2Mgd1bmlGMjYzB3VuaUYyNjQHdW5pRjI2NQd1bmlGMjY2B3VuaUYyNjcHdW5pRjI2OAd1bmlGMjY5B3VuaUYyNkEHdW5pRjI2Qgd1bmlGMjZDB3VuaUYyNkQHdW5pRjI2RQd1bmlGMjcwB3VuaUYyNzEHdW5pRjI3Mgd1bmlGMjczB3VuaUYyNzQHdW5pRjI3NQd1bmlGMjc2B3VuaUYyNzcHdW5pRjI3OAd1bmlGMjc5B3VuaUYyN0EHdW5pRjI3Qgd1bmlGMjdDB3VuaUYyN0QHdW5pRjI3RQd1bmlGMjgwB3VuaUYyODEHdW5pRjI4Mgd1bmlGMjgzB3VuaUYyODQHdW5pRjI4NQd1bmlGMjg2B3VuaUYyODcHdW5pRjI4OAd1bmlGMjg5B3VuaUYyOEEHdW5pRjI4Qgd1bmlGMjhDB3VuaUYyOEQHdW5pRjI4RQd1bmlGMjkwB3VuaUYyOTEHdW5pRjI5Mgd1bmlGMjkzB3VuaUYyOTQHdW5pRjI5NQAAAAABVnRNLgAA) 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}.fa-lg{font-size:1.33333333em;line-height:.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.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .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}.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, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}


WRFILE: jqplot.barRenderer.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(d){d.jqplot.BarRenderer=function(){d.jqplot.LineRenderer.call(this)};d.jqplot.BarRenderer.prototype=new d.jqplot.LineRenderer();d.jqplot.BarRenderer.prototype.constructor=d.jqplot.BarRenderer;d.jqplot.BarRenderer.prototype.init=function(o,q){this.barPadding=8;this.barMargin=10;this.barDirection="vertical";this.barWidth=null;this.shadowOffset=2;this.shadowDepth=5;this.shadowAlpha=0.08;this.waterfall=false;this.groups=1;this.varyBarColor=false;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.transposedData=true;this.renderer.animation={show:false,direction:"down",speed:3000,_supported:true};this._type="bar";if(o.highlightMouseDown&&o.highlightMouseOver==null){o.highlightMouseOver=false}d.extend(true,this,o);d.extend(true,this.renderer,o);this.fill=true;if(this.barDirection==="horizontal"&&this.rendererOptions.animation&&this.rendererOptions.animation.direction==null){this.renderer.animation.direction="left"}if(this.waterfall){this.fillToZero=false;this.disableStack=true}if(this.barDirection=="vertical"){this._primaryAxis="_xaxis";this._stackAxis="y";this.fillAxis="y"}else{this._primaryAxis="_yaxis";this._stackAxis="x";this.fillAxis="x"}this._highlightedPoint=null;this._plotSeriesInfo=null;this._dataColors=[];this._barPoints=[];var p={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill};this.renderer.shapeRenderer.init(p);var n={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill};this.renderer.shadowRenderer.init(n);q.postInitHooks.addOnce(h);q.postDrawHooks.addOnce(j);q.eventListenerHooks.addOnce("jqplotMouseMove",b);q.eventListenerHooks.addOnce("jqplotMouseDown",a);q.eventListenerHooks.addOnce("jqplotMouseUp",l);q.eventListenerHooks.addOnce("jqplotClick",e);q.eventListenerHooks.addOnce("jqplotRightClick",m)};function g(t,p,o,w){if(this.rendererOptions.barDirection=="horizontal"){this._stackAxis="x";this._primaryAxis="_yaxis"}if(this.rendererOptions.waterfall==true){this._data=d.extend(true,[],this.data);var s=0;var u=(!this.rendererOptions.barDirection||this.rendererOptions.barDirection==="vertical"||this.transposedData===false)?1:0;for(var q=0;q<this.data.length;q++){s+=this.data[q][u];if(q>0){this.data[q][u]+=this.data[q-1][u]}}this.data[this.data.length]=(u==1)?[this.data.length+1,s]:[s,this.data.length+1];this._data[this._data.length]=(u==1)?[this._data.length+1,s]:[s,this._data.length+1]}if(this.rendererOptions.groups>1){this.breakOnNull=true;var n=this.data.length;var v=parseInt(n/this.rendererOptions.groups,10);var r=0;for(var q=v;q<n;q+=v){this.data.splice(q+r,0,[null,null]);this._plotData.splice(q+r,0,[null,null]);this._stackData.splice(q+r,0,[null,null]);r++}for(q=0;q<this.data.length;q++){if(this._primaryAxis=="_xaxis"){this.data[q][0]=q+1;this._plotData[q][0]=q+1;this._stackData[q][0]=q+1}else{this.data[q][1]=q+1;this._plotData[q][1]=q+1;this._stackData[q][1]=q+1}}}}d.jqplot.preSeriesInitHooks.push(g);d.jqplot.BarRenderer.prototype.calcSeriesNumbers=function(){var r=0;var t=0;var q=this[this._primaryAxis];var p,o,u;for(var n=0;n<q._series.length;n++){o=q._series[n];if(o===this){u=n}if(o.renderer.constructor==d.jqplot.BarRenderer){r+=o.data.length;t+=1}}return[r,t,u]};d.jqplot.BarRenderer.prototype.setBarWidth=function(){var q;var n=0;var o=0;var t=this[this._primaryAxis];var x,r,v;var w=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);n=w[0];o=w[1];var u=t.numberTicks;var p=(u-1)/2;if(t.name=="xaxis"||t.name=="x2axis"){if(this._stack){this.barWidth=(t._offsets.max-t._offsets.min)/n*o-this.barMargin}else{this.barWidth=((t._offsets.max-t._offsets.min)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}else{if(this._stack){this.barWidth=(t._offsets.min-t._offsets.max)/n*o-this.barMargin}else{this.barWidth=((t._offsets.min-t._offsets.max)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}return[n,o]};function f(o){var q=[];for(var s=0;s<o.length;s++){var r=d.jqplot.getColorComponents(o[s]);var n=[r[0],r[1],r[2]];var t=n[0]+n[1]+n[2];for(var p=0;p<3;p++){n[p]=(t>570)?n[p]*0.8:n[p]+0.3*(255-n[p]);n[p]=parseInt(n[p],10)}q.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}return q}function i(v,u,s,t,o){var q=v,w=v-1,n,p,r=(o==="x")?0:1;if(q>0){p=t.series[w]._plotData[u][r];if((s*p)<0){n=i(w,u,s,t,o)}else{n=t.series[w].gridData[u][r]}}else{n=(r===0)?t.series[q]._xaxis.series_u2p(0):t.series[q]._yaxis.series_u2p(0)}return n}d.jqplot.BarRenderer.prototype.draw=function(E,L,q,G){var I;var A=d.extend({},q);var w=(A.shadow!=undefined)?A.shadow:this.shadow;var O=(A.showLine!=undefined)?A.showLine:this.showLine;var F=(A.fill!=undefined)?A.fill:this.fill;var p=this.xaxis;var J=this.yaxis;var y=this._xaxis.series_u2p;var K=this._yaxis.series_u2p;var D,C;this._dataColors=[];this._barPoints=[];if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var N=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);var x=N[0];var v=N[1];var s=N[2];var H=[];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(v/2-0.5)+s)*(this.barWidth+this.barPadding)}if(O){var u=new d.jqplot.ColorGenerator(this.negativeSeriesColors);var B=new d.jqplot.ColorGenerator(this.seriesColors);var M=u.get(this.index);if(!this.useNegativeColors){M=A.fillStyle}var t=A.fillStyle;var r;var P;var o;if(this.barDirection=="vertical"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][1]==null){continue}H=[];r=L[I][0]+this._barNudge;if(this._stack&&this._prevGridData.length){o=i(this.index,I,this._plotData[I][1],G,"y")}else{if(this.fillToZero){o=this._yaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){o=this.gridData[I-1][1]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{o=E.canvas.height}}}}}if((this.fillToZero&&this._plotData[I][1]<0)||(this.waterfall&&this._data[I][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}else{A.fillStyle=M}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][1]>=0){H.push([r-this.barWidth/2,o]);H.push([r-this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,o])}else{H.push([r-this.barWidth/2,L[I][1]]);H.push([r-this.barWidth/2,o]);H.push([r+this.barWidth/2,o]);H.push([r+this.barWidth/2,L[I][1]])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}else{if(this.barDirection=="horizontal"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][0]==null){continue}H=[];r=L[I][1]-this._barNudge;P;if(this._stack&&this._prevGridData.length){P=i(this.index,I,this._plotData[I][0],G,"x")}else{if(this.fillToZero){P=this._xaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){P=this.gridData[I-1][0]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=E.canvas.width}}}else{P=0}}}}}if((this.fillToZero&&this._plotData[I][0]<0)||(this.waterfall&&this._data[I][0]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}else{A.fillStyle=M}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][0]>=0){H.push([P,r+this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([L[I][0],r+this.barWidth/2])}else{H.push([L[I][0],r+this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([P,r+this.barWidth/2])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}}}if(this.highlightColors.length==0){this.highlightColors=d.jqplot.computeHighlightColors(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){var N=this.highlightColors;this.highlightColors=[];for(var I=0;I<this._dataColors.length;I++){this.highlightColors.push(N)}}}};d.jqplot.BarRenderer.prototype.drawShadow=function(z,G,p,B){var D;var w=(p!=undefined)?p:{};var t=(w.shadow!=undefined)?w.shadow:this.shadow;var I=(w.showLine!=undefined)?w.showLine:this.showLine;var A=(w.fill!=undefined)?w.fill:this.fill;var o=this.xaxis;var E=this.yaxis;var v=this._xaxis.series_u2p;var F=this._yaxis.series_u2p;var y,C,x,u,s,r;if(this._stack&&this.shadow){if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var H=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);u=H[0];s=H[1];r=H[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(s/2-0.5)+r)*(this.barWidth+this.barPadding)}if(I){if(this.barDirection=="vertical"){for(var D=0;D<G.length;D++){if(this.data[D][1]==null){continue}C=[];var q=G[D][0]+this._barNudge;var n;if(this._stack&&this._prevGridData.length){n=i(this.index,D,this._plotData[D][1],B,"y")}else{if(this.fillToZero){n=this._yaxis.series_u2p(0)}else{n=z.canvas.height}}C.push([q-this.barWidth/2,n]);C.push([q-this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,n]);this.renderer.shadowRenderer.draw(z,C,w)}}else{if(this.barDirection=="horizontal"){for(var D=0;D<G.length;D++){if(this.data[D][0]==null){continue}C=[];var q=G[D][1]-this._barNudge;var J;if(this._stack&&this._prevGridData.length){J=i(this.index,D,this._plotData[D][0],B,"x")}else{if(this.fillToZero){J=this._xaxis.series_u2p(0)}else{J=0}}C.push([J,q+this.barWidth/2]);C.push([G[D][0],q+this.barWidth/2]);C.push([G[D][0],q-this.barWidth/2]);C.push([J,q-this.barWidth/2]);this.renderer.shadowRenderer.draw(z,C,w)}}}}}};function h(q,p,n){for(var o=0;o<this.series.length;o++){if(this.series[o].renderer.constructor==d.jqplot.BarRenderer){if(this.series[o].highlightMouseOver){this.series[o].highlightMouseDown=false}}}}function j(){if(this.plugins.barRenderer&&this.plugins.barRenderer.highlightCanvas){this.plugins.barRenderer.highlightCanvas.resetCanvas();this.plugins.barRenderer.highlightCanvas=null}this.plugins.barRenderer={highlightedSeriesIndex:null};this.plugins.barRenderer.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-barRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.barRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(n){k(n.data.plot)})}function c(u,t,q,p){var o=u.series[t];var n=u.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=q;u.plugins.barRenderer.highlightedSeriesIndex=t;var r={fillStyle:o.highlightColors[q]};o.renderer.shapeRenderer.draw(n._ctx,p,r);n=null}function k(p){var n=p.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.barRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight");n=null}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].show&&s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.barRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=r.which;n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);c(s,t.seriesIndex,t.pointIndex,t.points)}}else{if(t==null){k(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.barRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);c(r,s.seriesIndex,s.pointIndex,s.points)}}else{if(s==null){k(r)}}}function l(p,o,s,r,q){var n=q.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){k(q)}}function e(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){k(s)}var o=jQuery.Event("jqplotDataRightClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}})(jQuery);

WRFILE: jqplot.canvasAxisTickRenderer.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(a){a.jqplot.CanvasAxisTickRenderer=function(b){this.mark="outside";this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.angle=0;this.markSize=4;this.show=true;this.showLabel=true;this.labelPosition="auto";this.label="";this.value=null;this._styles={};this.formatter=a.jqplot.DefaultTickFormatter;this.formatString="";this.prefix="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="10pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisTickRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisTickRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getTop=function(b){if(this._elem){return this._elem.position().top}else{return null}};a.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisTickRenderer.prototype.setTick=function(b,d,c){this.value=b;if(c){this.isMinorTick=true}return this};a.jqplot.CanvasAxisTickRenderer.prototype.draw=function(c,f){if(!this.label){this.label=this.prefix+this.formatter(this.formatString,this.value)}if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.textAlign="left";e.style.position="absolute";e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css(this._styles);this._elem.addClass("jqplot-"+this.axis+"-tick");e=null;return this._elem};a.jqplot.CanvasAxisTickRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery);

WRFILE: jqplot.canvasTextRenderer.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(a){a.jqplot.CanvasTextRenderer=function(b){this.fontStyle="normal";this.fontVariant="normal";this.fontWeight="normal";this.fontSize="10px";this.fontFamily="sans-serif";this.fontStretch=1;this.fillStyle="#666666";this.angle=0;this.textAlign="start";this.textBaseline="alphabetic";this.text;this.width;this.height;this.pt2px=1.28;a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.init=function(b){a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.normalizeFontSize=function(b){b=String(b);var c=parseFloat(b);if(b.indexOf("px")>-1){return c/this.pt2px}else{if(b.indexOf("pt")>-1){return c}else{if(b.indexOf("em")>-1){return c*12}else{if(b.indexOf("%")>-1){return c*12/100}else{return c/this.pt2px}}}}};a.jqplot.CanvasTextRenderer.prototype.fontWeight2Float=function(b){if(Number(b)){return b/400}else{switch(b){case"normal":return 1;break;case"bold":return 1.75;break;case"bolder":return 2.25;break;case"lighter":return 0.75;break;default:return 1;break}}};a.jqplot.CanvasTextRenderer.prototype.getText=function(){return this.text};a.jqplot.CanvasTextRenderer.prototype.setText=function(c,b){this.text=c;this.setWidth(b);return this};a.jqplot.CanvasTextRenderer.prototype.getWidth=function(b){return this.width};a.jqplot.CanvasTextRenderer.prototype.setWidth=function(c,b){if(!b){this.width=this.measure(c,this.text)}else{this.width=b}return this};a.jqplot.CanvasTextRenderer.prototype.getHeight=function(b){return this.height};a.jqplot.CanvasTextRenderer.prototype.setHeight=function(b){if(!b){this.height=this.normalizedFontSize*this.pt2px}else{this.height=b}return this};a.jqplot.CanvasTextRenderer.prototype.letter=function(b){return this.letters[b]};a.jqplot.CanvasTextRenderer.prototype.ascent=function(){return this.normalizedFontSize};a.jqplot.CanvasTextRenderer.prototype.descent=function(){return 7*this.normalizedFontSize/25};a.jqplot.CanvasTextRenderer.prototype.measure=function(d,g){var f=0;var b=g.length;for(var e=0;e<b;e++){var h=this.letter(g.charAt(e));if(h){f+=h.width*this.normalizedFontSize/25*this.fontStretch}}return f};a.jqplot.CanvasTextRenderer.prototype.draw=function(s,n){var r=0;var o=this.height*0.72;var p=0;var l=n.length;var k=this.normalizedFontSize/25;s.save();var h,f;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){h=0;f=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){h=Math.sin(this.angle)*this.height;f=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){h=-Math.cos(this.angle)*this.width;f=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){h=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;f=-Math.cos(this.angle)*this.height}}}}s.strokeStyle=this.fillStyle;s.fillStyle=this.fillStyle;s.translate(h,f);s.rotate(this.angle);s.lineCap="round";var t=(this.normalizedFontSize>30)?2:2+(30-this.normalizedFontSize)/20;s.lineWidth=t*k*this.fontWeight2Float(this.fontWeight);for(var g=0;g<l;g++){var m=this.letter(n.charAt(g));if(!m){continue}s.beginPath();var e=1;var b=0;for(var d=0;d<m.points.length;d++){var q=m.points[d];if(q[0]==-1&&q[1]==-1){e=1;continue}if(e){s.moveTo(r+q[0]*k*this.fontStretch,o-q[1]*k);e=false}else{s.lineTo(r+q[0]*k*this.fontStretch,o-q[1]*k)}}s.stroke();r+=m.width*k*this.fontStretch}s.restore();return p};a.jqplot.CanvasTextRenderer.prototype.letters={" ":{width:16,points:[]},"!":{width:10,points:[[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},'"':{width:16,points:[[4,21],[4,14],[-1,-1],[12,21],[12,14]]},"#":{width:21,points:[[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]]},"$":{width:20,points:[[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},"%":{width:24,points:[[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]]},"&":{width:26,points:[[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]]},"'":{width:10,points:[[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]]},"(":{width:14,points:[[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]]},")":{width:14,points:[[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]]},"*":{width:16,points:[[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]]},"+":{width:26,points:[[13,18],[13,0],[-1,-1],[4,9],[22,9]]},",":{width:10,points:[[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"-":{width:18,points:[[6,9],[12,9]]},".":{width:10,points:[[5,2],[4,1],[5,0],[6,1],[5,2]]},"/":{width:22,points:[[20,25],[2,-7]]},"0":{width:20,points:[[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]]},"1":{width:20,points:[[6,17],[8,18],[11,21],[11,0]]},"2":{width:20,points:[[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]]},"3":{width:20,points:[[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"4":{width:20,points:[[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]]},"5":{width:20,points:[[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"6":{width:20,points:[[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]]},"7":{width:20,points:[[17,21],[7,0],[-1,-1],[3,21],[17,21]]},"8":{width:20,points:[[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]]},"9":{width:20,points:[[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]]},":":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},";":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"<":{width:24,points:[[20,18],[4,9],[20,0]]},"=":{width:26,points:[[4,12],[22,12],[-1,-1],[4,6],[22,6]]},">":{width:24,points:[[4,18],[20,9],[4,0]]},"?":{width:18,points:[[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]]},"@":{width:27,points:[[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]]},A:{width:18,points:[[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]]},B:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]]},C:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]]},D:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]]},E:{width:19,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]]},F:{width:18,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]]},G:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]]},H:{width:22,points:[[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]]},I:{width:8,points:[[4,21],[4,0]]},J:{width:16,points:[[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]]},K:{width:21,points:[[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]]},L:{width:17,points:[[4,21],[4,0],[-1,-1],[4,0],[16,0]]},M:{width:24,points:[[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]]},N:{width:22,points:[[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]]},O:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]]},P:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]]},Q:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]]},R:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]]},S:{width:20,points:[[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},T:{width:16,points:[[8,21],[8,0],[-1,-1],[1,21],[15,21]]},U:{width:22,points:[[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]]},V:{width:18,points:[[1,21],[9,0],[-1,-1],[17,21],[9,0]]},W:{width:24,points:[[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]]},X:{width:20,points:[[3,21],[17,0],[-1,-1],[17,21],[3,0]]},Y:{width:18,points:[[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]]},Z:{width:20,points:[[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]]},"[":{width:14,points:[[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]]},"\\":{width:14,points:[[0,21],[14,-3]]},"]":{width:14,points:[[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]]},"^":{width:16,points:[[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]]},_:{width:16,points:[[0,-2],[16,-2]]},"`":{width:10,points:[[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]]},a:{width:19,points:[[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},b:{width:19,points:[[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},c:{width:18,points:[[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},d:{width:19,points:[[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},e:{width:18,points:[[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},f:{width:12,points:[[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]]},g:{width:19,points:[[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},h:{width:19,points:[[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},i:{width:8,points:[[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]]},j:{width:10,points:[[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]]},k:{width:17,points:[[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]]},l:{width:8,points:[[4,21],[4,0]]},m:{width:30,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]]},n:{width:19,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},o:{width:19,points:[[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]]},p:{width:19,points:[[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},q:{width:19,points:[[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},r:{width:13,points:[[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]]},s:{width:17,points:[[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]]},t:{width:12,points:[[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]]},u:{width:19,points:[[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]]},v:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0]]},w:{width:22,points:[[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]]},x:{width:17,points:[[3,14],[14,0],[-1,-1],[14,14],[3,0]]},y:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]]},z:{width:17,points:[[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]]},"{":{width:14,points:[[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]]},"|":{width:8,points:[[4,25],[4,-7]]},"}":{width:14,points:[[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]]},"~":{width:24,points:[[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]]}};a.jqplot.CanvasFontRenderer=function(b){b=b||{};if(!b.pt2px){b.pt2px=1.5}a.jqplot.CanvasTextRenderer.call(this,b)};a.jqplot.CanvasFontRenderer.prototype=new a.jqplot.CanvasTextRenderer({});a.jqplot.CanvasFontRenderer.prototype.constructor=a.jqplot.CanvasFontRenderer;a.jqplot.CanvasFontRenderer.prototype.measure=function(c,e){var d=this.fontSize+" "+this.fontFamily;c.save();c.font=d;var b=c.measureText(e).width;c.restore();return b};a.jqplot.CanvasFontRenderer.prototype.draw=function(e,g){var c=0;var h=this.height*0.72;e.save();var d,b;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){d=0;b=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){d=Math.sin(this.angle)*this.height;b=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){d=-Math.cos(this.angle)*this.width;b=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){d=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;b=-Math.cos(this.angle)*this.height}}}}e.strokeStyle=this.fillStyle;e.fillStyle=this.fillStyle;var f=this.fontSize+" "+this.fontFamily;e.font=f;e.translate(d,b);e.rotate(this.angle);e.fillText(g,c,h);e.restore()}})(jQuery);

WRFILE: jqplot.categoryAxisRenderer.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(a){a.jqplot.CategoryAxisRenderer=function(b){a.jqplot.LinearAxisRenderer.call(this);this.sortMergedLabels=false};a.jqplot.CategoryAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.CategoryAxisRenderer.prototype.constructor=a.jqplot.CategoryAxisRenderer;a.jqplot.CategoryAxisRenderer.prototype.init=function(e){this.groups=1;this.groupLabels=[];this._groupLabels=[];this._grouped=false;this._barsPerGroup=null;this.reverse=false;a.extend(true,this,{tickOptions:{formatString:"%d"}},e);var b=this._dataBounds;for(var f=0;f<this._series.length;f++){var g=this._series[f];if(g.groups){this.groups=g.groups}var h=g.data;for(var c=0;c<h.length;c++){if(this.name=="xaxis"||this.name=="x2axis"){if(h[c][0]<b.min||b.min==null){b.min=h[c][0]}if(h[c][0]>b.max||b.max==null){b.max=h[c][0]}}else{if(h[c][1]<b.min||b.min==null){b.min=h[c][1]}if(h[c][1]>b.max||b.max==null){b.max=h[c][1]}}}}if(this.groupLabels.length){this.groups=this.groupLabels.length}};a.jqplot.CategoryAxisRenderer.prototype.createTicks=function(){var D=this._ticks;var z=this.ticks;var F=this.name;var C=this._dataBounds;var v,A;var q,w;var d,c;var b,x;if(z.length){if(this.groups>1&&!this._grouped){var r=z.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p){z.splice(x+e,0," ");e++}this._grouped=true}this.min=0.5;this.max=z.length+0.5;var m=this.max-this.min;this.numberTicks=2*z.length+1;for(x=0;x<z.length;x++){b=this.min+2*x*m/(this.numberTicks-1);var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b,this.name);this._ticks.push(h);var h=new this.tickRenderer(this.tickOptions);h.label=z[x];h.showMark=false;h.showGridline=false;h.setTick(b+0.5,this.name);this._ticks.push(h)}var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b+1,this.name);this._ticks.push(h)}else{if(F=="xaxis"||F=="x2axis"){v=this._plotDimensions.width}else{v=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.min!=null&&this.max!=null&&this.tickInterval!=null){if(parseInt((this.max-this.min)/this.tickInterval,10)!=(this.max-this.min)/this.tickInterval){this.tickInterval=null}}var y=[];var B=0;var q=0.5;var w,E;var f=false;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}if(a.inArray(E,y)==-1){f=true;B+=1;y.push(E)}}}if(f&&this.sortMergedLabels){if(typeof y[0]=="string"){y.sort()}else{y.sort(function(j,i){return j-i})}}this.ticks=y;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}var n=a.inArray(E,y)+1;if(this.name=="xaxis"||this.name=="x2axis"){k.data[u][0]=n}else{k.data[u][1]=n}}}if(this.groups>1&&!this._grouped){var r=y.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p+1){y[x]=" "}this._grouped=true}w=B+0.5;if(this.numberTicks==null){this.numberTicks=2*B+1}var m=w-q;this.min=q;this.max=w;var o=0;var g=parseInt(3+v/10,10);var p=parseInt(B/g,10);if(this.tickInterval==null){this.tickInterval=m/(this.numberTicks-1)}for(var x=0;x<this.numberTicks;x++){b=this.min+x*this.tickInterval;var h=new this.tickRenderer(this.tickOptions);if(x/2==parseInt(x/2,10)){h.showLabel=false;h.showMark=true}else{if(p>0&&o<p){h.showLabel=false;o+=1}else{h.showLabel=true;o=0}h.label=h.formatter(h.formatString,y[(x-1)/2]);h.showMark=false;h.showGridline=false}h.setTick(b,this.name);this._ticks.push(h)}}};a.jqplot.CategoryAxisRenderer.prototype.draw=function(b,j){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;if(this._elem){this._elem.emptyForce()}this._elem=this._elem||a('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var g=this._label.draw(b,j);g.appendTo(this._elem)}var f=this._ticks;for(var e=0;e<f.length;e++){var d=f[e];if(d.showLabel&&(!d.isMinorTick||this.showMinorTicks)){var g=d.draw(b,j);g.appendTo(this._elem)}}this._groupLabels=[];for(var e=0;e<this.groupLabels.length;e++){var g=a('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');g.html(this.groupLabels[e]);this._groupLabels.push(g);g.appendTo(this._elem)}}return this._elem};a.jqplot.CategoryAxisRenderer.prototype.set=function(){var e=0;var m;var k=0;var f=0;var d=(this._label==null)?false:this._label.show;if(this.show){var n=this._ticks;for(var c=0;c<n.length;c++){var g=n[c];if(g.showLabel&&(!g.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){m=g._elem.outerHeight(true)}else{m=g._elem.outerWidth(true)}if(m>e){e=m}}}var j=0;for(var c=0;c<this._groupLabels.length;c++){var b=this._groupLabels[c];if(this.name=="xaxis"||this.name=="x2axis"){m=b.outerHeight(true)}else{m=b.outerWidth(true)}if(m>j){j=m}}if(d){k=this._label._elem.outerWidth(true);f=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){e+=j+k;this._elem.css({width:e+"px",left:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}else{e+=j+k;this._elem.css({width:e+"px",right:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}}}}};a.jqplot.CategoryAxisRenderer.prototype.pack=function(e,c){var C=this._ticks;var v=this.max;var s=this.min;var n=c.max;var l=c.min;var q=(this._label==null)?false:this._label.show;var x;for(var r in e){this._elem.css(r,e[r])}this._offsets=c;var g=n-l;var k=v-s;if(!this.reverse){this.u2p=function(h){return(h-s)*g/k+l};this.p2u=function(h){return(h-l)*k/g+s};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(h-s)*g/k};this.series_p2u=function(h){return h*k/g+s}}else{this.series_u2p=function(h){return(h-v)*g/k};this.series_p2u=function(h){return h*k/g+v}}}else{this.u2p=function(h){return l+(v-h)*g/k};this.p2u=function(h){return s+(h-l)*k/g};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(v-h)*g/k};this.series_p2u=function(h){return h*k/g+v}}else{this.series_u2p=function(h){return(s-h)*g/k};this.series_p2u=function(h){return h*k/g+s}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(x=0;x<C.length;x++){var o=C[x];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var A=(this.name=="xaxis")?1:-1;switch(o.labelPosition){case"auto":if(A*o.angle<0){b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2}else{b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2}break;case"end":b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;case"start":b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2;break;case"middle":b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;default:b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break}}else{b=-o.getWidth()/2}var D=this.u2p(o.value)+b+"px";o._elem.css("left",D);o.pack()}}var z=["bottom",0];if(q){var m=this._label._elem.outerWidth(true);this._label._elem.css("left",l+g/2-m/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px");z=["bottom",this._label._elem.outerHeight(true)]}else{this._label._elem.css("top","0px");z=["top",this._label._elem.outerHeight(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10)+1;for(x=0;x<this._groupLabels.length;x++){var B=0;var f=0;for(var u=x*d;u<(x+1)*d;u++){if(u>=this._ticks.length-1){continue}if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();B+=r.left+o.outerWidth(true)/2;f++}}B=B/f;this._groupLabels[x].css({left:(B-this._groupLabels[x].outerWidth(true)/2)});this._groupLabels[x].css(z[0],z[1])}}else{for(x=0;x<C.length;x++){var o=C[x];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var A=(this.name=="yaxis")?1:-1;switch(o.labelPosition){case"auto":case"end":if(A*o.angle<0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"start":if(o.angle>0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"middle":b=-o.getHeight()/2;break;default:b=-o.getHeight()/2;break}}else{b=-o.getHeight()/2}var D=this.u2p(o.value)+b+"px";o._elem.css("top",D);o.pack()}}var z=["left",0];if(q){var y=this._label._elem.outerHeight(true);this._label._elem.css("top",n-g/2-y/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px");z=["left",this._label._elem.outerWidth(true)]}else{this._label._elem.css("right","0px");z=["right",this._label._elem.outerWidth(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10)+1;for(x=0;x<this._groupLabels.length;x++){var B=0;var f=0;for(var u=x*d;u<(x+1)*d;u++){if(u>=this._ticks.length-1){continue}if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();B+=r.top+o.outerHeight()/2;f++}}B=B/f;this._groupLabels[x].css({top:B-this._groupLabels[x].outerHeight()/2});this._groupLabels[x].css(z[0],z[1])}}}}})(jQuery);

WRFILE: jqplot.cursor.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(j){j.jqplot.Cursor=function(q){this.style="crosshair";this.previousCursor="auto";this.show=j.jqplot.config.enablePlugins;this.showTooltip=true;this.followMouse=false;this.tooltipLocation="se";this.tooltipOffset=6;this.showTooltipGridPosition=false;this.showTooltipUnitPosition=true;this.showTooltipDataPosition=false;this.tooltipFormatString="%.4P, %.4P";this.useAxesFormatters=true;this.tooltipAxisGroups=[];this.zoom=false;this.zoomProxy=false;this.zoomTarget=false;this.looseZoom=true;this.clickReset=false;this.dblClickReset=true;this.showVerticalLine=false;this.showHorizontalLine=false;this.constrainZoomTo="none";this.shapeRenderer=new j.jqplot.ShapeRenderer();this._zoom={start:[],end:[],started:false,zooming:false,isZoomed:false,axes:{start:{},end:{}},gridpos:{},datapos:{}};this._tooltipElem;this.zoomCanvas;this.cursorCanvas;this.intersectionThreshold=2;this.showCursorLegend=false;this.cursorLegendFormatString=j.jqplot.Cursor.cursorLegendFormatString;this._oldHandlers={onselectstart:null,ondrag:null,onmousedown:null};this.constrainOutsideZoom=true;this.showTooltipOutsideZoom=false;this.onGrid=false;j.extend(true,this,q)};j.jqplot.Cursor.cursorLegendFormatString="%s x:%s, y:%s";j.jqplot.Cursor.init=function(t,s,r){var q=r||{};this.plugins.cursor=new j.jqplot.Cursor(q.cursor);var u=this.plugins.cursor;if(u.show){j.jqplot.eventListenerHooks.push(["jqplotMouseEnter",b]);j.jqplot.eventListenerHooks.push(["jqplotMouseLeave",f]);j.jqplot.eventListenerHooks.push(["jqplotMouseMove",i]);if(u.showCursorLegend){r.legend=r.legend||{};r.legend.renderer=j.jqplot.CursorLegendRenderer;r.legend.formatString=this.plugins.cursor.cursorLegendFormatString;r.legend.show=true}if(u.zoom){j.jqplot.eventListenerHooks.push(["jqplotMouseDown",a]);if(u.clickReset){j.jqplot.eventListenerHooks.push(["jqplotClick",k])}if(u.dblClickReset){j.jqplot.eventListenerHooks.push(["jqplotDblClick",c])}}this.resetZoom=function(){var x=this.axes;if(!u.zoomProxy){for(var w in x){x[w].reset();x[w]._ticks=[];if(u._zoom.axes[w]!==undefined){x[w]._autoFormatString=u._zoom.axes[w].tickFormatString}}this.redraw()}else{var v=this.plugins.cursor.zoomCanvas._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);v=null}this.plugins.cursor._zoom.isZoomed=false;this.target.trigger("jqplotResetZoom",[this,this.plugins.cursor])};if(u.showTooltipDataPosition){u.showTooltipUnitPosition=false;u.showTooltipGridPosition=false;if(q.cursor.tooltipFormatString==undefined){u.tooltipFormatString=j.jqplot.Cursor.cursorLegendFormatString}}}};j.jqplot.Cursor.postDraw=function(){var x=this.plugins.cursor;if(x.zoomCanvas){x.zoomCanvas.resetCanvas();x.zoomCanvas=null}if(x.cursorCanvas){x.cursorCanvas.resetCanvas();x.cursorCanvas=null}if(x._tooltipElem){x._tooltipElem.emptyForce();x._tooltipElem=null}if(x.zoom){x.zoomCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.zoomCanvas.createElement(this._gridPadding,"jqplot-zoom-canvas",this._plotDimensions,this));x.zoomCanvas.setContext()}var v=document.createElement("div");x._tooltipElem=j(v);v=null;x._tooltipElem.addClass("jqplot-cursor-tooltip");x._tooltipElem.css({position:"absolute",display:"none"});if(x.zoomCanvas){x.zoomCanvas._elem.before(x._tooltipElem)}else{this.eventCanvas._elem.before(x._tooltipElem)}if(x.showVerticalLine||x.showHorizontalLine){x.cursorCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.cursorCanvas.createElement(this._gridPadding,"jqplot-cursor-canvas",this._plotDimensions,this));x.cursorCanvas.setContext()}if(x.showTooltipUnitPosition){if(x.tooltipAxisGroups.length===0){var t=this.series;var u;var q=[];for(var r=0;r<t.length;r++){u=t[r];var w=u.xaxis+","+u.yaxis;if(j.inArray(w,q)==-1){q.push(w)}}for(var r=0;r<q.length;r++){x.tooltipAxisGroups.push(q[r].split(","))}}}};j.jqplot.Cursor.zoomProxy=function(v,r){var q=v.plugins.cursor;var u=r.plugins.cursor;q.zoomTarget=true;q.zoom=true;q.style="auto";q.dblClickReset=false;u.zoom=true;u.zoomProxy=true;r.target.bind("jqplotZoom",t);r.target.bind("jqplotResetZoom",s);function t(x,w,z,y,A){q.doZoom(w,z,v,A)}function s(w,x,y){v.resetZoom()}};j.jqplot.Cursor.prototype.resetZoom=function(u,v){var t=u.axes;var s=v._zoom.axes;if(!u.plugins.cursor.zoomProxy&&v._zoom.isZoomed){for(var r in t){t[r].reset();t[r]._ticks=[];t[r]._autoFormatString=s[r].tickFormatString}u.redraw();v._zoom.isZoomed=false}else{var q=v.zoomCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);q=null}u.target.trigger("jqplotResetZoom",[u,v])};j.jqplot.Cursor.resetZoom=function(q){q.resetZoom()};j.jqplot.Cursor.prototype.doZoom=function(G,t,C,u){var I=u;var F=C.axes;var r=I._zoom.axes;var w=r.start;var s=r.end;var B,E,z,D,v,x,q,H,J;var A=C.plugins.cursor.zoomCanvas._ctx;if((I.constrainZoomTo=="none"&&Math.abs(G.x-I._zoom.start[0])>6&&Math.abs(G.y-I._zoom.start[1])>6)||(I.constrainZoomTo=="x"&&Math.abs(G.x-I._zoom.start[0])>6)||(I.constrainZoomTo=="y"&&Math.abs(G.y-I._zoom.start[1])>6)){if(!C.plugins.cursor.zoomProxy){for(var y in t){if(I._zoom.axes[y]==undefined){I._zoom.axes[y]={};I._zoom.axes[y].numberTicks=F[y].numberTicks;I._zoom.axes[y].tickInterval=F[y].tickInterval;I._zoom.axes[y].daTickInterval=F[y].daTickInterval;I._zoom.axes[y].min=F[y].min;I._zoom.axes[y].max=F[y].max;I._zoom.axes[y].tickFormatString=(F[y].tickOptions!=null)?F[y].tickOptions.formatString:""}if((I.constrainZoomTo=="none")||(I.constrainZoomTo=="x"&&y.charAt(0)=="x")||(I.constrainZoomTo=="y"&&y.charAt(0)=="y")){z=t[y];if(z!=null){if(z>w[y]){v=w[y];x=z}else{D=w[y]-z;v=z;x=w[y]}q=F[y];H=null;if(q.alignTicks){if(q.name==="x2axis"&&C.axes.xaxis.show){H=C.axes.xaxis.numberTicks}else{if(q.name.charAt(0)==="y"&&q.name!=="yaxis"&&q.name!=="yMidAxis"&&C.axes.yaxis.show){H=C.axes.yaxis.numberTicks}}}if(this.looseZoom&&(F[y].renderer.constructor===j.jqplot.LinearAxisRenderer||F[y].renderer.constructor===j.jqplot.LogAxisRenderer)){J=j.jqplot.LinearTickGenerator(v,x,q._scalefact,H);if(F[y].tickInset&&J[0]<F[y].min+F[y].tickInset*F[y].tickInterval){J[0]+=J[4];J[2]-=1}if(F[y].tickInset&&J[1]>F[y].max-F[y].tickInset*F[y].tickInterval){J[1]-=J[4];J[2]-=1}if(F[y].renderer.constructor===j.jqplot.LogAxisRenderer&&J[0]<F[y].min){J[0]+=J[4];J[2]-=1}F[y].min=J[0];F[y].max=J[1];F[y]._autoFormatString=J[3];F[y].numberTicks=J[2];F[y].tickInterval=J[4];F[y].daTickInterval=[J[4]/1000,"seconds"]}else{F[y].min=v;F[y].max=x;F[y].tickInterval=null;F[y].numberTicks=null;F[y].daTickInterval=null}F[y]._ticks=[]}}}A.clearRect(0,0,A.canvas.width,A.canvas.height);C.redraw();I._zoom.isZoomed=true;A=null}C.target.trigger("jqplotZoom",[G,t,C,u])}};j.jqplot.preInitHooks.push(j.jqplot.Cursor.init);j.jqplot.postDrawHooks.push(j.jqplot.Cursor.postDraw);function e(G,r,C){var J=C.plugins.cursor;var w="";var N=false;if(J.showTooltipGridPosition){w=G.x+", "+G.y;N=true}if(J.showTooltipUnitPosition){var F;for(var E=0;E<J.tooltipAxisGroups.length;E++){F=J.tooltipAxisGroups[E];if(N){w+="<br />"}if(J.useAxesFormatters){for(var D=0;D<F.length;D++){if(D){w+=", "}var H=C.axes[F[D]]._ticks[0].formatter;var B=C.axes[F[D]]._ticks[0].formatString;w+=H(B,r[F[D]])}}else{w+=j.jqplot.sprintf(J.tooltipFormatString,r[F[0]],r[F[1]])}N=true}}if(J.showTooltipDataPosition){var u=C.series;var M=d(C,G.x,G.y);var N=false;for(var E=0;E<u.length;E++){if(u[E].show){var y=u[E].index;var t=u[E].label.toString();var I=j.inArray(y,M.indices);var z=undefined;var x=undefined;if(I!=-1){var L=M.data[I].data;if(J.useAxesFormatters){var A=u[E]._xaxis._ticks[0].formatter;var q=u[E]._yaxis._ticks[0].formatter;var K=u[E]._xaxis._ticks[0].formatString;var v=u[E]._yaxis._ticks[0].formatString;z=A(K,L[0]);x=q(v,L[1])}else{z=L[0];x=L[1]}if(N){w+="<br />"}w+=j.jqplot.sprintf(J.tooltipFormatString,t,z,x);N=true}}}}J._tooltipElem.html(w)}function g(C,A){var E=A.plugins.cursor;var z=E.cursorCanvas._ctx;z.clearRect(0,0,z.canvas.width,z.canvas.height);if(E.showVerticalLine){E.shapeRenderer.draw(z,[[C.x,0],[C.x,z.canvas.height]])}if(E.showHorizontalLine){E.shapeRenderer.draw(z,[[0,C.y],[z.canvas.width,C.y]])}var G=d(A,C.x,C.y);if(E.showCursorLegend){var r=j(A.targetId+" td.jqplot-cursor-legend-label");for(var B=0;B<r.length;B++){var v=j(r[B]).data("seriesIndex");var t=A.series[v];var s=t.label.toString();var D=j.inArray(v,G.indices);var x=undefined;var w=undefined;if(D!=-1){var H=G.data[D].data;if(E.useAxesFormatters){var y=t._xaxis._ticks[0].formatter;var q=t._yaxis._ticks[0].formatter;var F=t._xaxis._ticks[0].formatString;var u=t._yaxis._ticks[0].formatString;x=y(F,H[0]);w=q(u,H[1])}else{x=H[0];w=H[1]}}if(A.legend.escapeHtml){j(r[B]).text(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}else{j(r[B]).html(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}}}z=null}function d(A,F,E){var B={indices:[],data:[]};var G,w,u,C,v,q,t;var z;var D=A.plugins.cursor;for(var w=0;w<A.series.length;w++){G=A.series[w];q=G.renderer;if(G.show){z=D.intersectionThreshold;if(G.showMarker){z+=G.markerRenderer.size/2}for(var v=0;v<G.gridData.length;v++){t=G.gridData[v];if(D.showVerticalLine){if(Math.abs(F-t[0])<=z){B.indices.push(w);B.data.push({seriesIndex:w,pointIndex:v,gridData:t,data:G.data[v]})}}}}}return B}function n(r,t){var v=t.plugins.cursor;var s=v._tooltipElem;switch(v.tooltipLocation){case"nw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"n":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"ne":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"e":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;case"se":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"s":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"sw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"w":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;default:var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break}s.css("left",q);s.css("top",u);s=null}function m(u){var s=u._gridPadding;var v=u.plugins.cursor;var t=v._tooltipElem;switch(v.tooltipLocation){case"nw":var r=s.left+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"n":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"ne":var r=s.right+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css({right:r,top:q});break;case"e":var r=s.right+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({right:r,top:q});break;case"se":var r=s.right+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break;case"s":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"sw":var r=s.left+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"w":var r=s.left+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({left:r,top:q});break;default:var r=s.right-v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break}t=null}function k(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.clickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function c(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.dblClickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function f(w,t,q,z,u){var v=u.plugins.cursor;v.onGrid=false;if(v.show){j(w.target).css("cursor",v.previousCursor);if(v.showTooltip&&!(v._zoom.zooming&&v.showTooltipOutsideZoom&&!v.constrainOutsideZoom)){v._tooltipElem.empty();v._tooltipElem.hide()}if(v.zoom){v._zoom.gridpos=t;v._zoom.datapos=q}if(v.showVerticalLine||v.showHorizontalLine){var B=v.cursorCanvas._ctx;B.clearRect(0,0,B.canvas.width,B.canvas.height);B=null}if(v.showCursorLegend){var A=j(u.targetId+" td.jqplot-cursor-legend-label");for(var s=0;s<A.length;s++){var y=j(A[s]).data("seriesIndex");var r=u.series[y];var x=r.label.toString();if(u.legend.escapeHtml){j(A[s]).text(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}else{j(A[s]).html(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}}}}}function b(r,q,u,t,s){var v=s.plugins.cursor;v.onGrid=true;if(v.show){v.previousCursor=r.target.style.cursor;r.target.style.cursor=v.style;if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}else{m(s)}v._tooltipElem.show()}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function i(r,q,u,t,s){var v=s.plugins.cursor;if(v.show){if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function o(y){var x=y.data.plot;var t=x.eventCanvas._elem.offset();var w={x:y.pageX-t.left,y:y.pageY-t.top};var u={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var v=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var q=x.axes;var r,s;for(r=11;r>0;r--){s=v[r-1];if(q[s].show){u[s]=q[s].series_p2u(w[s.charAt(0)])}}return{offsets:t,gridPos:w,dataPos:u}}function h(z){var x=z.data.plot;var y=x.plugins.cursor;if(y.show&&y.zoom&&y._zoom.started&&!y.zoomTarget){z.preventDefault();var B=y.zoomCanvas._ctx;var v=o(z);var w=v.gridPos;var t=v.dataPos;y._zoom.gridpos=w;y._zoom.datapos=t;y._zoom.zooming=true;var u=w.x;var s=w.y;var A=B.canvas.height;var q=B.canvas.width;if(y.showTooltip&&!y.onGrid&&y.showTooltipOutsideZoom){e(w,t,x);if(y.followMouse){n(w,x)}}if(y.constrainZoomTo=="x"){y._zoom.end=[u,A]}else{if(y.constrainZoomTo=="y"){y._zoom.end=[q,s]}else{y._zoom.end=[u,s]}}var r=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(r&&!r().isCollapsed){r().collapse()}}l.call(y);B=null}}function a(w,s,r,x,t){var v=t.plugins.cursor;if(t.plugins.mobile){j(document).one("vmouseup.jqplot_cursor",{plot:t},p)}else{j(document).one("mouseup.jqplot_cursor",{plot:t},p)}var u=t.axes;if(document.onselectstart!=undefined){v._oldHandlers.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!=undefined){v._oldHandlers.ondrag=document.ondrag;document.ondrag=function(){return false}}if(document.onmousedown!=undefined){v._oldHandlers.onmousedown=document.onmousedown;document.onmousedown=function(){return false}}if(v.zoom){if(!v.zoomProxy){var y=v.zoomCanvas._ctx;y.clearRect(0,0,y.canvas.width,y.canvas.height);y=null}if(v.constrainZoomTo=="x"){v._zoom.start=[s.x,0]}else{if(v.constrainZoomTo=="y"){v._zoom.start=[0,s.y]}else{v._zoom.start=[s.x,s.y]}}v._zoom.started=true;for(var q in r){v._zoom.axes.start[q]=r[q]}if(t.plugins.mobile){j(document).bind("vmousemove.jqplotCursor",{plot:t},h)}else{j(document).bind("mousemove.jqplotCursor",{plot:t},h)}}}function p(y){var v=y.data.plot;var x=v.plugins.cursor;if(x.zoom&&x._zoom.zooming&&!x.zoomTarget){var u=x._zoom.gridpos.x;var r=x._zoom.gridpos.y;var t=x._zoom.datapos;var z=x.zoomCanvas._ctx.canvas.height;var q=x.zoomCanvas._ctx.canvas.width;var w=v.axes;if(x.constrainOutsideZoom&&!x.onGrid){if(u<0){u=0}else{if(u>q){u=q}}if(r<0){r=0}else{if(r>z){r=z}}for(var s in t){if(t[s]){if(s.charAt(0)=="x"){t[s]=w[s].series_p2u(u)}else{t[s]=w[s].series_p2u(r)}}}}if(x.constrainZoomTo=="x"){r=z}else{if(x.constrainZoomTo=="y"){u=q}}x._zoom.end=[u,r];x._zoom.gridpos={x:u,y:r};x.doZoom(x._zoom.gridpos,t,v,x)}x._zoom.started=false;x._zoom.zooming=false;j(document).unbind("mousemove.jqplotCursor",h);if(document.onselectstart!=undefined&&x._oldHandlers.onselectstart!=null){document.onselectstart=x._oldHandlers.onselectstart;x._oldHandlers.onselectstart=null}if(document.ondrag!=undefined&&x._oldHandlers.ondrag!=null){document.ondrag=x._oldHandlers.ondrag;x._oldHandlers.ondrag=null}if(document.onmousedown!=undefined&&x._oldHandlers.onmousedown!=null){document.onmousedown=x._oldHandlers.onmousedown;x._oldHandlers.onmousedown=null}}function l(){var y=this._zoom.start;var u=this._zoom.end;var s=this.zoomCanvas._ctx;var r,v,x,q;if(u[0]>y[0]){r=y[0];q=u[0]-y[0]}else{r=u[0];q=y[0]-u[0]}if(u[1]>y[1]){v=y[1];x=u[1]-y[1]}else{v=u[1];x=y[1]-u[1]}s.fillStyle="rgba(0,0,0,0.2)";s.strokeStyle="#999999";s.lineWidth=1;s.clearRect(0,0,s.canvas.width,s.canvas.height);s.fillRect(0,0,s.canvas.width,s.canvas.height);s.clearRect(r,v,q,x);s.strokeRect(r,v,q,x);s=null}j.jqplot.CursorLegendRenderer=function(q){j.jqplot.TableLegendRenderer.call(this,q);this.formatString="%s"};j.jqplot.CursorLegendRenderer.prototype=new j.jqplot.TableLegendRenderer();j.jqplot.CursorLegendRenderer.prototype.constructor=j.jqplot.CursorLegendRenderer;j.jqplot.CursorLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var w=this._series,A;var r=document.createElement("table");this._elem=j(r);r=null;this._elem.addClass("jqplot-legend jqplot-cursor-legend");this._elem.css("position","absolute");var q=false;for(var x=0;x<w.length;x++){A=w[x];if(A.show&&A.showLabel){var v=j.jqplot.sprintf(this.formatString,A.label.toString());if(v){var t=A.color;if(A._stack&&!A.fill){t=""}z.call(this,v,t,q,x);q=true}for(var u=0;u<j.jqplot.addLegendRowHooks.length;u++){var y=j.jqplot.addLegendRowHooks[u].call(this,A);if(y){z.call(this,y.label,y.color,q);q=true}}}}w=A=null;delete w;delete A}function z(D,C,F,s){var B=(F)?this.rowSpacing:"0";var E=j('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);E.data("seriesIndex",s);j('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+B+';"><div style="border:1px solid #cccccc;padding:0.2em;"><div class="jqplot-cursor-legend-swatch" style="background-color:'+C+';"></div></div></td>').appendTo(E);var G=j('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+B+';"></td>');G.appendTo(E);G.data("seriesIndex",s);if(this.escapeHtml){G.text(D)}else{G.html(D)}E=null;G=null}return this._elem}})(jQuery);

WRFILE: jqplot.dateAxisRenderer.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(h){h.jqplot.DateAxisRenderer=function(){h.jqplot.LinearAxisRenderer.call(this);this.date=new h.jsDate()};var c=1000;var e=60*c;var f=60*e;var l=24*f;var b=7*l;var j=30.4368499*l;var k=365.242199*l;var g=[31,28,31,30,31,30,31,30,31,30,31,30];var i=["%M:%S.%#N","%M:%S.%#N","%M:%S.%#N","%M:%S","%M:%S","%M:%S","%M:%S","%H:%M:%S","%H:%M:%S","%H:%M","%H:%M","%H:%M","%H:%M","%H:%M","%H:%M","%a %H:%M","%a %H:%M","%b %e %H:%M","%b %e %H:%M","%b %e %H:%M","%b %e %H:%M","%v","%v","%v","%v","%v","%v","%v"];var m=[0.1*c,0.2*c,0.5*c,c,2*c,5*c,10*c,15*c,30*c,e,2*e,5*e,10*e,15*e,30*e,f,2*f,4*f,6*f,8*f,12*f,l,2*l,3*l,4*l,5*l,b,2*b];var d=[];function a(p,s,t){var o=Number.MAX_VALUE;var u,r,v;for(var q=0,n=m.length;q<n;q++){u=Math.abs(t-m[q]);if(u<o){o=u;r=m[q];v=i[q]}}return[r,v]}h.jqplot.DateAxisRenderer.prototype=new h.jqplot.LinearAxisRenderer();h.jqplot.DateAxisRenderer.prototype.constructor=h.jqplot.DateAxisRenderer;h.jqplot.DateTickFormatter=function(n,o){if(!n){n="%Y/%m/%d"}return h.jsDate.strftime(o,n)};h.jqplot.DateAxisRenderer.prototype.init=function(E){this.tickOptions.formatter=h.jqplot.DateTickFormatter;this.tickInset=0;this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.daTickInterval=null;this._daTickInterval=null;h.extend(true,this,E);var C=this._dataBounds,u,x,D,y,A,z,o;for(var t=0;t<this._series.length;t++){u={intervals:[],frequencies:{},sortedIntervals:[],min:null,max:null,mean:null};x=0;D=this._series[t];y=D.data;A=D._plotData;z=D._stackData;o=0;for(var r=0;r<y.length;r++){if(this.name=="xaxis"||this.name=="x2axis"){y[r][0]=new h.jsDate(y[r][0]).getTime();A[r][0]=new h.jsDate(y[r][0]).getTime();z[r][0]=new h.jsDate(y[r][0]).getTime();if((y[r][0]!=null&&y[r][0]<C.min)||C.min==null){C.min=y[r][0]}if((y[r][0]!=null&&y[r][0]>C.max)||C.max==null){C.max=y[r][0]}if(r>0){o=Math.abs(y[r][0]-y[r-1][0]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}x+=o}else{y[r][1]=new h.jsDate(y[r][1]).getTime();A[r][1]=new h.jsDate(y[r][1]).getTime();z[r][1]=new h.jsDate(y[r][1]).getTime();if((y[r][1]!=null&&y[r][1]<C.min)||C.min==null){C.min=y[r][1]}if((y[r][1]!=null&&y[r][1]>C.max)||C.max==null){C.max=y[r][1]}if(r>0){o=Math.abs(y[r][1]-y[r-1][1]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}}x+=o}if(D.renderer.bands){if(D.renderer.bands.hiData.length){var w=D.renderer.bands.hiData;for(var r=0,q=w.length;r<q;r++){if(this.name==="xaxis"||this.name==="x2axis"){w[r][0]=new h.jsDate(w[r][0]).getTime();if((w[r][0]!=null&&w[r][0]>C.max)||C.max==null){C.max=w[r][0]}}else{w[r][1]=new h.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]>C.max)||C.max==null){C.max=w[r][1]}}}}if(D.renderer.bands.lowData.length){var w=D.renderer.bands.lowData;for(var r=0,q=w.length;r<q;r++){if(this.name==="xaxis"||this.name==="x2axis"){w[r][0]=new h.jsDate(w[r][0]).getTime();if((w[r][0]!=null&&w[r][0]<C.min)||C.min==null){C.min=w[r][0]}}else{w[r][1]=new h.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]<C.min)||C.min==null){C.min=w[r][1]}}}}}var B=0,v=0;for(var p in u.frequencies){u.sortedIntervals.push({interval:p,frequency:u.frequencies[p]})}u.sortedIntervals.sort(function(s,n){return n.frequency-s.frequency});u.min=h.jqplot.arrayMin(u.intervals);u.max=h.jqplot.arrayMax(u.intervals);u.mean=x/y.length;this._intervalStats.push(u);u=x=D=y=A=z=null}C=null};h.jqplot.DateAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}this.daTickInterval=this._daTickInterval};h.jqplot.DateAxisRenderer.prototype.createTicks=function(p){var X=this._ticks;var L=this.ticks;var F=this.name;var H=this._dataBounds;var M=this._intervalStats;var n=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var w;var ae,J;var y,x;var ad,aa;var s=30;var O=1;var U=null;if(this.tickInterval!=null){if(Number(this.tickInterval)){U=[Number(this.tickInterval),"seconds"]}else{if(typeof this.tickInterval=="string"){var ac=this.tickInterval.split(" ");if(ac.length==1){U=[1,ac[0]]}else{if(ac.length==2){U=[ac[0],ac[1]]}}}}}var v=this.tickInterval;ae=new h.jsDate((this.min!=null)?this.min:H.min).getTime();J=new h.jsDate((this.max!=null)?this.max:H.max).getTime();var A=p.plugins.cursor;if(A&&A._zoom&&A._zoom.zooming){this.min=null;this.max=null}var B=J-ae;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}if(L.length){for(aa=0;aa<L.length;aa++){var P=L[aa];var Y=new this.tickRenderer(this.tickOptions);if(P.constructor==Array){Y.value=new h.jsDate(P[0]).getTime();Y.label=P[1];if(!this.showTicks){Y.showLabel=false;Y.showMark=false}else{if(!this.showTickMarks){Y.showMark=false}}Y.setTick(Y.value,this.name);this._ticks.push(Y)}else{Y.value=new h.jsDate(P).getTime();if(!this.showTicks){Y.showLabel=false;Y.showMark=false}else{if(!this.showTickMarks){Y.showMark=false}}Y.setTick(Y.value,this.name);this._ticks.push(Y)}}this.numberTicks=L.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.daTickInterval=[(this.max-this.min)/(this.numberTicks-1)/1000,"seconds"]}else{if(this.min==null&&this.max==null&&H.min==H.max){var E=h.extend(true,{},this.tickOptions,{name:this.name,value:null});var T=300000;this.min=H.min-T;this.max=H.max+T;this.numberTicks=3;for(var aa=this.min;aa<=this.max;aa+=T){E.value=aa;var Y=new this.tickRenderer(E);if(this._overrideFormatString&&this._autoFormatString!=""){Y.formatString=this._autoFormatString}Y.showLabel=false;Y.showMark=false;this._ticks.push(Y)}if(this.showTicks){this._ticks[1].showLabel=true}if(this.showTickMarks){this._ticks[1].showTickMarks=true}}else{if(this.min==null&&this.max==null){var N=h.extend(true,{},this.tickOptions,{name:this.name,value:null});var ab,I;if(!this.tickInterval&&!this.numberTicks){var R=Math.max(n,s+1);var Z=115;if(this.tickRenderer===h.jqplot.CanvasAxisTickRenderer&&this.tickOptions.angle){Z=115-40*Math.abs(Math.sin(this.tickOptions.angle/180*Math.PI))}ab=Math.ceil((R-s)/Z+1);I=(J-ae)/(ab-1)}else{if(this.tickInterval){I=new h.jsDate(0).add(U[0],U[1]).getTime()}else{if(this.numberTicks){ab=this.numberTicks;I=(J-ae)/(ab-1)}}}if(I<=19*l){var Q=a(ae,J,I);var r=Q[0];this._autoFormatString=Q[1];ae=new h.jsDate(ae);ae=Math.floor((ae.getTime()-ae.getUtcOffset())/r)*r+ae.getUtcOffset();ab=Math.ceil((J-ae)/r)+1;this.min=ae;this.max=ae+(ab-1)*r;if(this.max<J){this.max+=r;ab+=1}this.tickInterval=r;this.numberTicks=ab;for(var aa=0;aa<ab;aa++){N.value=this.min+aa*r;Y=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){Y.formatString=this._autoFormatString}if(!this.showTicks){Y.showLabel=false;Y.showMark=false}else{if(!this.showTickMarks){Y.showMark=false}}this._ticks.push(Y)}O=this.tickInterval}else{if(I<=9*j){this._autoFormatString="%v";var D=Math.round(I/j);if(D<1){D=1}else{if(D>6){D=6}}var V=new h.jsDate(ae).setDate(1).setHours(0,0,0,0);var q=new h.jsDate(J);var z=new h.jsDate(J).setDate(1).setHours(0,0,0,0);if(q.getTime()!==z.getTime()){z=z.add(1,"month")}var S=z.diff(V,"month");ab=Math.ceil(S/D)+1;this.min=V.getTime();this.max=V.clone().add((ab-1)*D,"month").getTime();this.numberTicks=ab;for(var aa=0;aa<ab;aa++){if(aa===0){N.value=V.getTime()}else{N.value=V.add(D,"month").getTime()}Y=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){Y.formatString=this._autoFormatString}if(!this.showTicks){Y.showLabel=false;Y.showMark=false}else{if(!this.showTickMarks){Y.showMark=false}}this._ticks.push(Y)}O=D*j}else{this._autoFormatString="%v";var D=Math.round(I/k);if(D<1){D=1}var V=new h.jsDate(ae).setMonth(0,1).setHours(0,0,0,0);var z=new h.jsDate(J).add(1,"year").setMonth(0,1).setHours(0,0,0,0);var K=z.diff(V,"year");ab=Math.ceil(K/D)+1;this.min=V.getTime();this.max=V.clone().add((ab-1)*D,"year").getTime();this.numberTicks=ab;for(var aa=0;aa<ab;aa++){if(aa===0){N.value=V.getTime()}else{N.value=V.add(D,"year").getTime()}Y=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){Y.formatString=this._autoFormatString}if(!this.showTicks){Y.showLabel=false;Y.showMark=false}else{if(!this.showTickMarks){Y.showMark=false}}this._ticks.push(Y)}O=D*k}}}else{if(F=="xaxis"||F=="x2axis"){n=this._plotDimensions.width}else{n=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.tickInterval!=null&&U!=null){this.daTickInterval=U}if(ae==J){var o=24*60*60*500;ae-=o;J+=o}B=J-ae;var G=2+parseInt(Math.max(0,n-100)/100,10);var W,C;W=(this.min!=null)?new h.jsDate(this.min).getTime():ae-B/2*(this.padMin-1);C=(this.max!=null)?new h.jsDate(this.max).getTime():J+B/2*(this.padMax-1);this.min=W;this.max=C;B=this.max-this.min;if(this.numberTicks==null){if(this.daTickInterval!=null){var u=new h.jsDate(this.max).diff(this.min,this.daTickInterval[1],true);this.numberTicks=Math.ceil(u/this.daTickInterval[0])+1;this.max=new h.jsDate(this.min).add((this.numberTicks-1)*this.daTickInterval[0],this.daTickInterval[1]).getTime()}else{if(n>200){this.numberTicks=parseInt(3+(n-200)/100,10)}else{this.numberTicks=2}}}O=B/(this.numberTicks-1)/1000;if(this.daTickInterval==null){this.daTickInterval=[O,"seconds"]}for(var aa=0;aa<this.numberTicks;aa++){var ae=new h.jsDate(this.min);ad=ae.add(aa*this.daTickInterval[0],this.daTickInterval[1]).getTime();var Y=new this.tickRenderer(this.tickOptions);if(!this.showTicks){Y.showLabel=false;Y.showMark=false}else{if(!this.showTickMarks){Y.showMark=false}}Y.setTick(ad,this.name);this._ticks.push(Y)}}}}if(this.tickInset){this.min=this.min-this.tickInset*O;this.max=this.max+this.tickInset*O}if(this._daTickInterval==null){this._daTickInterval=this.daTickInterval}X=null}})(jQuery);

WRFILE: jqplot.highlighter.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(d){d.jqplot.eventListenerHooks.push(["jqplotMouseMove",f]);d.jqplot.Highlighter=function(h){this.show=d.jqplot.config.enablePlugins;this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation="nw";this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes="both";this.tooltipSeparator=", ";this.tooltipContentEditor=null;this.useAxesFormatters=true;this.tooltipFormatString="%.5P";this.formatString=null;this.yvalues=1;this.bringSeriesToFront=false;this._tooltipElem;this.isHighlighting=false;this.currentNeighbor=null;d.extend(true,this,h)};var b=["nw","n","ne","e","se","s","sw","w"];var e={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var c=["se","s","sw","w","nw","n","ne","e"];d.jqplot.Highlighter.init=function(k,j,i){var h=i||{};this.plugins.highlighter=new d.jqplot.Highlighter(h.highlighter)};d.jqplot.Highlighter.parseOptions=function(i,h){this.showHighlight=true};d.jqplot.Highlighter.postPlotDraw=function(){if(this.plugins.highlighter&&this.plugins.highlighter.highlightCanvas){this.plugins.highlighter.highlightCanvas.resetCanvas();this.plugins.highlighter.highlightCanvas=null}if(this.plugins.highlighter&&this.plugins.highlighter._tooltipElem){this.plugins.highlighter._tooltipElem.emptyForce();this.plugins.highlighter._tooltipElem=null}this.plugins.highlighter.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,"jqplot-highlight-canvas",this._plotDimensions,this));this.plugins.highlighter.highlightCanvas.setContext();var h=document.createElement("div");this.plugins.highlighter._tooltipElem=d(h);h=null;this.plugins.highlighter._tooltipElem.addClass("jqplot-highlighter-tooltip");this.plugins.highlighter._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem)};d.jqplot.preInitHooks.push(d.jqplot.Highlighter.init);d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Highlighter.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Highlighter.postPlotDraw);function a(m,o){var j=m.plugins.highlighter;var p=m.series[o.seriesIndex];var h=p.markerRenderer;var i=j.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+j.lineWidthAdjust;i.size=h.size+j.sizeAdjust;var l=d.jqplot.getColorComponents(h.color);var n=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);i.color="rgba("+n[0]+","+n[1]+","+n[2]+","+k+")";i.init();i.draw(p.gridData[o.pointIndex][0],p.gridData[o.pointIndex][1],j.highlightCanvas._ctx)}function g(A,q,m){var k=A.plugins.highlighter;var D=k._tooltipElem;var r=q.highlighter||{};var t=d.extend(true,{},k,r);if(t.useAxesFormatters){var w=q._xaxis._ticks[0].formatter;var h=q._yaxis._ticks[0].formatter;var E=q._xaxis._ticks[0].formatString;var s=q._yaxis._ticks[0].formatString;var z;var u=w(E,m.data[0]);var l=[];for(var B=1;B<t.yvalues+1;B++){l.push(h(s,m.data[B]))}if(typeof t.formatString==="string"){switch(t.tooltipAxes){case"both":case"xy":l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"yx":l.push(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"x":z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString,u]);break;case"y":l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;default:l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break}}else{switch(t.tooltipAxes){case"both":case"xy":z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break;case"yx":z="";for(var B=0;B<l.length;B++){z+=l[B]+t.tooltipSeparator}z+=u;break;case"x":z=u;break;case"y":z=l.join(t.tooltipSeparator);break;default:z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break}}}else{var z;if(typeof t.formatString==="string"){z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString].concat(m.data))}else{if(t.tooltipAxes=="both"||t.tooltipAxes=="xy"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}else{if(t.tooltipAxes=="yx"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="x"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="y"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}}}}}}if(d.isFunction(t.tooltipContentEditor)){z=t.tooltipContentEditor(z,m.seriesIndex,m.pointIndex,A)}D.html(z);var C={x:m.gridData[0],y:m.gridData[1]};var v=0;var j=0.707;if(q.markerRenderer.show==true){v=(q.markerRenderer.size+t.sizeAdjust)/2}var o=b;if(q.fillToZero&&q.fill&&m.data[1]<0){o=c}switch(o[e[t.tooltipLocation]]){case"nw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"n":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-v;break;case"ne":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"e":var p=C.x+A._gridPadding.left+t.tooltipOffset+v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;case"se":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"s":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top+t.tooltipOffset+v;break;case"sw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"w":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;default:var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break}D.css("left",p);D.css("top",n);if(t.fadeTooltip){D.stop(true,true).fadeIn(t.tooltipFadeSpeed)}else{D.show()}D=null}function f(n,j,i,p,l){var h=l.plugins.highlighter;var m=l.plugins.cursor;if(h.show){if(p==null&&h.isHighlighting){var o=jQuery.Event("jqplotHighlighterUnhighlight");l.target.trigger(o);var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);if(h.fadeTooltip){h._tooltipElem.fadeOut(h.tooltipFadeSpeed)}else{h._tooltipElem.hide()}if(h.bringSeriesToFront){l.restorePreviousSeriesOrder()}h.isHighlighting=false;h.currentNeighbor=null;q=null}else{if(p!=null&&l.series[p.seriesIndex].showHighlight&&!h.isHighlighting){var o=jQuery.Event("jqplotHighlighterHighlight");o.which=n.which;o.pageX=n.pageX;o.pageY=n.pageY;var k=[p.seriesIndex,p.pointIndex,p.data,l];l.target.trigger(o,k);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(l.series[p.seriesIndex].show&&h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}else{if(p!=null&&h.isHighlighting&&h.currentNeighbor!=p){if(l.series[p.seriesIndex].showHighlight){var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(l.series[p.seriesIndex].show&&h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}}}}}}})(jQuery);

WRFILE: jqplot.pieRenderer.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(e){e.jqplot.PieRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.PieRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.PieRenderer.prototype.constructor=e.jqplot.PieRenderer;e.jqplot.PieRenderer.prototype.init=function(q,u){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.52;this.dataLabelNudge=2;this.dataLabelCenterOn=true;this.startAngle=0;this.tickRenderer=e.jqplot.PieTickRenderer;this._drawData=true;this._type="pie";if(q.highlightMouseDown&&q.highlightMouseOver==null){q.highlightMouseOver=false}e.extend(true,this,q);if(this.sliceMargin<0){this.sliceMargin=0}this._diameter=null;this._radius=null;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var s=0;s<this.seriesColors.length;s++){var r=e.jqplot.getColorComponents(this.seriesColors[s]);var o=[r[0],r[1],r[2]];var t=o[0]+o[1]+o[2];for(var p=0;p<3;p++){o[p]=(t>570)?o[p]*0.8:o[p]+0.3*(255-o[p]);o[p]=parseInt(o[p],10)}this.highlightColors.push("rgb("+o[0]+","+o[1]+","+o[2]+")")}}this.highlightColorGenerator=new e.jqplot.ColorGenerator(this.highlightColors);u.postParseOptionsHooks.addOnce(m);u.postInitHooks.addOnce(g);u.eventListenerHooks.addOnce("jqplotMouseMove",b);u.eventListenerHooks.addOnce("jqplotMouseDown",a);u.eventListenerHooks.addOnce("jqplotMouseUp",l);u.eventListenerHooks.addOnce("jqplotClick",f);u.eventListenerHooks.addOnce("jqplotRightClick",n);u.postDrawHooks.addOnce(i)};e.jqplot.PieRenderer.prototype.setGridData=function(t){var p=[];var u=[];var o=this.startAngle/180*Math.PI;var s=0;this._drawData=false;for(var r=0;r<this.data.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(this.data[r][1]);u.push([this.data[r][0]]);if(r>0){p[r]+=p[r-1]}s+=this.data[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){u[r][1]=p[r]*q;u[r][2]=this.data[r][1]/s}this.gridData=u};e.jqplot.PieRenderer.prototype.makeGridData=function(t,u){var p=[];var v=[];var s=0;var o=this.startAngle/180*Math.PI;this._drawData=false;for(var r=0;r<t.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(t[r][1]);v.push([t[r][0]]);if(r>0){p[r]+=p[r-1]}s+=t[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){v[r][1]=p[r]*q;v[r][2]=t[r][1]/s}return v};function h(o){return Math.sin((o-(o-Math.PI)/8/Math.PI)/2)}function j(u,t,o,v,r){var w=0;var q=t-u;var s=Math.abs(q);var p=o;if(v==false){p+=r}if(p>0&&s>0.01&&s<6.282){w=parseFloat(p)/2/h(q)}return w}e.jqplot.PieRenderer.prototype.drawSlice=function(B,z,y,u,w){if(this._drawData){var p=this._radius;var A=this.fill;var x=this.lineWidth;var s=this.sliceMargin;if(this.fill==false){s+=this.lineWidth}B.save();B.translate(this._center[0],this._center[1]);var D=j(z,y,this.sliceMargin,this.fill,this.lineWidth);var o=D*Math.cos((z+y)/2);var C=D*Math.sin((z+y)/2);if((y-z)<=Math.PI){p-=D}else{p+=D}B.translate(o,C);if(w){for(var v=0,t=this.shadowDepth;v<t;v++){B.save();B.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q(p)}for(var v=0,t=this.shadowDepth;v<t;v++){B.restore()}}else{q(p)}B.restore()}function q(r){if(y>6.282+this.startAngle){y=6.282+this.startAngle;if(z>y){z=6.281+this.startAngle}}if(z>=y){return}B.beginPath();B.fillStyle=u;B.strokeStyle=u;B.lineWidth=x;B.arc(0,0,r,z,y,false);B.lineTo(0,0);B.closePath();if(A){B.fill()}else{B.stroke()}}};e.jqplot.PieRenderer.prototype.draw=function(B,z,E,o){var W;var H=(E!=undefined)?E:{};var t=0;var s=0;var N=1;var L=new e.jqplot.ColorGenerator(this.seriesColors);if(E.legendInfo&&E.legendInfo.placement=="insideGrid"){var J=E.legendInfo;switch(J.location){case"nw":t=J.width+J.xoffset;break;case"w":t=J.width+J.xoffset;break;case"sw":t=J.width+J.xoffset;break;case"ne":t=J.width+J.xoffset;N=-1;break;case"e":t=J.width+J.xoffset;N=-1;break;case"se":t=J.width+J.xoffset;N=-1;break;case"n":s=J.height+J.yoffset;break;case"s":s=J.height+J.yoffset;N=-1;break;default:break}}var K=(H.shadow!=undefined)?H.shadow:this.shadow;var A=(H.fill!=undefined)?H.fill:this.fill;var C=B.canvas.width;var I=B.canvas.height;var Q=C-t-2*this.padding;var X=I-s-2*this.padding;var M=Math.min(Q,X);var Y=M;this._sliceAngles=[];var v=this.sliceMargin;if(this.fill==false){v+=this.lineWidth}var q;var G=0;var R,aa,Z,ab;var D=this.startAngle/180*Math.PI;for(var W=0,V=z.length;W<V;W++){aa=(W==0)?D:z[W-1][1]+D;Z=z[W][1]+D;this._sliceAngles.push([aa,Z]);q=j(aa,Z,this.sliceMargin,this.fill,this.lineWidth);if(Math.abs(Z-aa)>Math.PI){G=Math.max(q,G)}}if(this.diameter!=null&&this.diameter>0){this._diameter=this.diameter-2*G}else{this._diameter=Y-2*G}if(this._diameter<6){e.jqplot.log("Diameter of pie too small, not rendering.");return}var S=this._radius=this._diameter/2;this._center=[(C-N*t)/2+N*t+G*Math.cos(D),(I-N*s)/2+N*s+G*Math.sin(D)];if(this.shadow){for(var W=0,V=z.length;W<V;W++){ab="rgba(0,0,0,"+this.shadowAlpha+")";this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],ab,true)}}for(var W=0;W<z.length;W++){this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],L.next(),false);if(this.showDataLabels&&z[W][2]*100>=this.dataLabelThreshold){var F,U=(this._sliceAngles[W][0]+this._sliceAngles[W][1])/2,T;if(this.dataLabels=="label"){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,z[W][0])}else{if(this.dataLabels=="value"){F=this.dataLabelFormatString||"%d";T=e.jqplot.sprintf(F,this.data[W][1])}else{if(this.dataLabels=="percent"){F=this.dataLabelFormatString||"%d%%";T=e.jqplot.sprintf(F,z[W][2]*100)}else{if(this.dataLabels.constructor==Array){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,this.dataLabels[W])}}}}var p=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var P=this._center[0]+Math.cos(U)*p+this.canvas._offsets.left;var O=this._center[1]+Math.sin(U)*p+this.canvas._offsets.top;var u=e('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">'+T+"</div>").insertBefore(o.eventCanvas._elem);if(this.dataLabelCenterOn){P-=u.width()/2;O-=u.height()/2}else{P-=u.width()*Math.sin(U/2);O-=u.height()/2}P=Math.round(P);O=Math.round(O);u.css({left:P,top:O})}}};e.jqplot.PieAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PieAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PieAxisRenderer.prototype.constructor=e.jqplot.PieAxisRenderer;e.jqplot.PieAxisRenderer.prototype.init=function(o){this.tickRenderer=e.jqplot.PieTickRenderer;e.extend(true,this,o);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.PieLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.PieLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.PieLegendRenderer.prototype.constructor=e.jqplot.PieLegendRenderer;e.jqplot.PieLegendRenderer.prototype.init=function(o){this.numberRows=null;this.numberColumns=null;e.extend(true,this,o)};e.jqplot.PieLegendRenderer.prototype.draw=function(){var r=this;if(this.show){var B=this._series;this._elem=e(document.createElement("table"));this._elem.addClass("jqplot-table-legend");var E={position:"absolute"};if(this.background){E.background=this.background}if(this.border){E.border=this.border}if(this.fontSize){E.fontSize=this.fontSize}if(this.fontFamily){E.fontFamily=this.fontFamily}if(this.textColor){E.textColor=this.textColor}if(this.marginTop!=null){E.marginTop=this.marginTop}if(this.marginBottom!=null){E.marginBottom=this.marginBottom}if(this.marginLeft!=null){E.marginLeft=this.marginLeft}if(this.marginRight!=null){E.marginRight=this.marginRight}this._elem.css(E);var I=false,A=false,o,y;var C=B[0];var p=new e.jqplot.ColorGenerator(C.seriesColors);if(C.show){var J=C.data;if(this.numberRows){o=this.numberRows;if(!this.numberColumns){y=Math.ceil(J.length/o)}else{y=this.numberColumns}}else{if(this.numberColumns){y=this.numberColumns;o=Math.ceil(J.length/this.numberColumns)}else{o=J.length;y=1}}var H,G;var q,w,v;var x,z,F;var D=0;var u,t;for(H=0;H<o;H++){q=e(document.createElement("tr"));q.addClass("jqplot-table-legend");if(A){q.prependTo(this._elem)}else{q.appendTo(this._elem)}for(G=0;G<y;G++){if(D<J.length){x=this.labels[D]||J[D][0].toString();F=p.next();if(!A){if(H>0){I=true}else{I=false}}else{if(H==o-1){I=false}else{I=true}}z=(I)?this.rowSpacing:"0";w=e(document.createElement("td"));w.addClass("jqplot-table-legend jqplot-table-legend-swatch");w.css({textAlign:"center",paddingTop:z});u=e(document.createElement("div"));u.addClass("jqplot-table-legend-swatch-outline");t=e(document.createElement("div"));t.addClass("jqplot-table-legend-swatch");t.css({backgroundColor:F,borderColor:F});w.append(u.append(t));v=e(document.createElement("td"));v.addClass("jqplot-table-legend jqplot-table-legend-label");v.css("paddingTop",z);if(this.escapeHtml){v.text(x)}else{v.html(x)}if(A){v.prependTo(q);w.prependTo(q)}else{w.appendTo(q);v.appendTo(q)}I=true}D++}}}}return this._elem};e.jqplot.PieRenderer.prototype.handleMove=function(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];r.target.trigger("jqplotDataMouseOver",o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.pieRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){r.target.trigger("jqplotDataHighlight",o);d(r,o[0],o[1])}}else{if(s==null){k(r)}}};function c(s,r,p){p=p||{};p.axesDefaults=p.axesDefaults||{};p.legend=p.legend||{};p.seriesDefaults=p.seriesDefaults||{};var o=false;if(p.seriesDefaults.renderer==e.jqplot.PieRenderer){o=true}else{if(p.series){for(var q=0;q<p.series.length;q++){if(p.series[q].renderer==e.jqplot.PieRenderer){o=true}}}}if(o){p.axesDefaults.renderer=e.jqplot.PieAxisRenderer;p.legend.renderer=e.jqplot.PieLegendRenderer;p.legend.preDraw=true;p.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.PieRenderer){if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}function m(o){for(var p=0;p<this.series.length;p++){this.series[p].seriesColors=this.seriesColors;this.series[p].colorGenerator=e.jqplot.colorGenerator}}function d(t,r,q){var p=t.series[r];var o=t.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);p._highlightedPoint=q;t.plugins.pieRenderer.highlightedSeriesIndex=r;p.renderer.drawSlice.call(p,o._ctx,p._sliceAngles[q][0],p._sliceAngles[q][1],p.highlightColorGenerator.get(q),false)}function k(q){var o=q.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);for(var p=0;p<q.series.length;p++){q.series[p]._highlightedPoint=null}q.plugins.pieRenderer.highlightedSeriesIndex=null;q.target.trigger("jqplotDataUnhighlight")}function b(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var p=jQuery.Event("jqplotDataMouseOver");p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q);if(t.series[q[0]].highlightMouseOver&&!(q[0]==t.plugins.pieRenderer.highlightedSeriesIndex&&q[1]==t.series[q[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.which=s.which;o.pageX=s.pageX;o.pageY=s.pageY;t.target.trigger(o,q);d(t,q[0],q[1])}}else{if(u==null){k(t)}}}function a(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];if(s.series[p[0]].highlightMouseDown&&!(p[0]==s.plugins.pieRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);d(s,p[0],p[1])}}else{if(t==null){k(s)}}}function l(q,p,t,s,r){var o=r.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&r.series[o].highlightMouseDown){k(r)}}function f(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function n(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var o=t.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&t.series[o].highlightMouseDown){k(t)}var p=jQuery.Event("jqplotDataRightClick");p.which=s.which;p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q)}}function i(){if(this.plugins.pieRenderer&&this.plugins.pieRenderer.highlightCanvas){this.plugins.pieRenderer.highlightCanvas.resetCanvas();this.plugins.pieRenderer.highlightCanvas=null}this.plugins.pieRenderer={highlightedSeriesIndex:null};this.plugins.pieRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var p=e(this.targetId+" .jqplot-data-label");if(p.length){e(p[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}var o=this.plugins.pieRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(q){k(q.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.PieTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.PieTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.PieTickRenderer.prototype.constructor=e.jqplot.PieTickRenderer})(jQuery);

WRFILE: jqplot.pointLabels.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(c){c.jqplot.PointLabels=function(e){this.show=c.jqplot.config.enablePlugins;this.location="n";this.labelsFromSeries=false;this.seriesLabelIndex=null;this.labels=[];this._labels=[];this.stackedValue=false;this.ypadding=6;this.xpadding=6;this.escapeHTML=true;this.edgeTolerance=-5;this.formatter=c.jqplot.DefaultTickFormatter;this.formatString="";this.hideZeros=false;this._elems=[];c.extend(true,this,e)};var a=["nw","n","ne","e","se","s","sw","w"];var d={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var b=["se","s","sw","w","nw","n","ne","e"];c.jqplot.PointLabels.init=function(j,h,f,g,i){var e=c.extend(true,{},f,g);e.pointLabels=e.pointLabels||{};if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"&&!e.pointLabels.location){e.pointLabels.location="e"}this.plugins.pointLabels=new c.jqplot.PointLabels(e.pointLabels);this.plugins.pointLabels.setLabels.call(this)};c.jqplot.PointLabels.prototype.setLabels=function(){var f=this.plugins.pointLabels;var h;if(f.seriesLabelIndex!=null){h=f.seriesLabelIndex}else{if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"){h=(this._plotData[0].length<3)?0:this._plotData[0].length-1}else{h=(this._plotData.length===0)?0:this._plotData[0].length-1}}f._labels=[];if(f.labels.length===0||f.labelsFromSeries){if(f.stackedValue){if(this._plotData.length&&this._plotData[0].length){for(var e=0;e<this._plotData.length;e++){f._labels.push(this._plotData[e][h])}}}else{var g=this.data;if(this.renderer.constructor===c.jqplot.BarRenderer&&this.waterfall){g=this._data}if(g.length&&g[0].length){for(var e=0;e<g.length;e++){f._labels.push(g[e][h])}}g=null}}else{if(f.labels.length){f._labels=f.labels}}};c.jqplot.PointLabels.prototype.xOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerWidth(true)-this.xpadding;break;case"n":h=-f.outerWidth(true)/2;break;case"ne":h=this.xpadding;break;case"e":h=this.xpadding;break;case"se":h=this.xpadding;break;case"s":h=-f.outerWidth(true)/2;break;case"sw":h=-f.outerWidth(true)-this.xpadding;break;case"w":h=-f.outerWidth(true)-this.xpadding;break;default:h=-f.outerWidth(true)-this.xpadding;break}return h};c.jqplot.PointLabels.prototype.yOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerHeight(true)-this.ypadding;break;case"n":h=-f.outerHeight(true)-this.ypadding;break;case"ne":h=-f.outerHeight(true)-this.ypadding;break;case"e":h=-f.outerHeight(true)/2;break;case"se":h=this.ypadding;break;case"s":h=this.ypadding;break;case"sw":h=this.ypadding;break;case"w":h=-f.outerHeight(true)/2;break;default:h=-f.outerHeight(true)-this.ypadding;break}return h};c.jqplot.PointLabels.draw=function(x,j,v){var t=this.plugins.pointLabels;t.setLabels.call(this);for(var w=0;w<t._elems.length;w++){t._elems[w].emptyForce()}t._elems.splice(0,t._elems.length);if(t.show){var r="_"+this._stackAxis+"axis";if(!t.formatString){t.formatString=this[r]._ticks[0].formatString;t.formatter=this[r]._ticks[0].formatter}var E=this._plotData;var D=this._prevPlotData;var A=this._xaxis;var q=this._yaxis;var z,f;for(var w=0,u=t._labels.length;w<u;w++){var o=t._labels[w];if(o==null||(t.hideZeros&&parseInt(o,10)==0)){continue}o=t.formatter(t.formatString,o);f=document.createElement("div");t._elems[w]=c(f);z=t._elems[w];z.addClass("jqplot-point-label jqplot-series-"+this.index+" jqplot-point-"+w);z.css("position","absolute");z.insertAfter(x.canvas);if(t.escapeHTML){z.text(o)}else{z.html(o)}var g=t.location;if((this.fillToZero&&E[w][1]<0)||(this.fillToZero&&this._type==="bar"&&this.barDirection==="horizontal"&&E[w][0]<0)||(this.waterfall&&parseInt(o,10))<0){g=b[d[g]]}var n=A.u2p(E[w][0])+t.xOffset(z,g);var h=q.u2p(E[w][1])+t.yOffset(z,g);if(this._stack&&!t.stackedValue){if(this.barDirection==="vertical"){h=(this._barPoints[w][0][1]+this._barPoints[w][1][1])/2+v._gridPadding.top-0.5*z.outerHeight(true)}else{n=(this._barPoints[w][2][0]+this._barPoints[w][0][0])/2+v._gridPadding.left-0.5*z.outerWidth(true)}}if(this.renderer.constructor==c.jqplot.BarRenderer){if(this.barDirection=="vertical"){n+=this._barNudge}else{h-=this._barNudge}}z.css("left",n);z.css("top",h);var k=n+z.width();var s=h+z.height();var C=t.edgeTolerance;var e=c(x.canvas).position().left;var y=c(x.canvas).position().top;var B=x.canvas.width+e;var m=x.canvas.height+y;if(n-C<e||h-C<y||k+C>B||s+C>m){z.remove()}z=null;f=null}}};c.jqplot.postSeriesInitHooks.push(c.jqplot.PointLabels.init);c.jqplot.postDrawSeriesHooks.push(c.jqplot.PointLabels.draw)})(jQuery);

WRFILE: jquery.jqplot.min.css

.jqplot-target{position:relative;color:#666;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px 5px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px}table.jqplot-table-legend,table.jqplot-cursor-legend{background-color:rgba(255,255,255,0.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px}.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%)}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,0.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,0.3)}

WRFILE: jquery.jqplot.min.js

/* jqPlot 1.0.8r1250 | (c) 2009-2013 Chris Leonello | jplot.com
   jsDate | (c) 2010-2013 Chris Leonello
 */(function(L){var u;L.fn.emptyForce=function(){for(var ah=0,ai;(ai=L(this)[ah])!=null;ah++){if(ai.nodeType===1){L.cleanData(ai.getElementsByTagName("*"))}if(L.jqplot.use_excanvas){ai.outerHTML=""}else{while(ai.firstChild){ai.removeChild(ai.firstChild)}}ai=null}return L(this)};L.fn.removeChildForce=function(ah){while(ah.firstChild){this.removeChildForce(ah.firstChild);ah.removeChild(ah.firstChild)}};L.fn.jqplot=function(){var ah=[];var aj=[];for(var ak=0,ai=arguments.length;ak<ai;ak++){if(L.isArray(arguments[ak])){ah.push(arguments[ak])}else{if(L.isPlainObject(arguments[ak])){aj.push(arguments[ak])}}}return this.each(function(an){var at,ar,aq=L(this),am=ah.length,al=aj.length,ap,ao;if(an<am){ap=ah[an]}else{ap=am?ah[am-1]:null}if(an<al){ao=aj[an]}else{ao=al?aj[al-1]:null}at=aq.attr("id");if(at===u){at="jqplot_target_"+L.jqplot.targetCounter++;aq.attr("id",at)}ar=L.jqplot(at,ap,ao);aq.data("jqplot",ar)})};L.jqplot=function(an,ak,ai){var aj=null,ah=null;if(arguments.length===3){aj=ak;ah=ai}else{if(arguments.length===2){if(L.isArray(ak)){aj=ak}else{if(L.isPlainObject(ak)){ah=ak}}}}if(aj===null&&ah!==null&&ah.data){aj=ah.data}var am=new R();L("#"+an).removeClass("jqplot-error");if(L.jqplot.config.catchErrors){try{am.init(an,aj,ah);am.draw();am.themeEngine.init.call(am);return am}catch(al){var ao=L.jqplot.config.errorMessage||al.message;L("#"+an).append('<div class="jqplot-error-message">'+ao+"</div>");L("#"+an).addClass("jqplot-error");document.getElementById(an).style.background=L.jqplot.config.errorBackground;document.getElementById(an).style.border=L.jqplot.config.errorBorder;document.getElementById(an).style.fontFamily=L.jqplot.config.errorFontFamily;document.getElementById(an).style.fontSize=L.jqplot.config.errorFontSize;document.getElementById(an).style.fontStyle=L.jqplot.config.errorFontStyle;document.getElementById(an).style.fontWeight=L.jqplot.config.errorFontWeight}}else{am.init(an,aj,ah);am.draw();am.themeEngine.init.call(am);return am}};L.jqplot.version="1.0.8";L.jqplot.revision="1250";L.jqplot.targetCounter=1;L.jqplot.CanvasManager=function(){if(typeof L.jqplot.CanvasManager.canvases=="undefined"){L.jqplot.CanvasManager.canvases=[];L.jqplot.CanvasManager.free=[]}var ah=[];this.getCanvas=function(){var ak;var aj=true;if(!L.jqplot.use_excanvas){for(var al=0,ai=L.jqplot.CanvasManager.canvases.length;al<ai;al++){if(L.jqplot.CanvasManager.free[al]===true){aj=false;ak=L.jqplot.CanvasManager.canvases[al];L.jqplot.CanvasManager.free[al]=false;ah.push(al);break}}}if(aj){ak=document.createElement("canvas");ah.push(L.jqplot.CanvasManager.canvases.length);L.jqplot.CanvasManager.canvases.push(ak);L.jqplot.CanvasManager.free.push(false)}return ak};this.initCanvas=function(ai){if(L.jqplot.use_excanvas){return window.G_vmlCanvasManager.initElement(ai)}return ai};this.freeAllCanvases=function(){for(var aj=0,ai=ah.length;aj<ai;aj++){this.freeCanvas(ah[aj])}ah=[]};this.freeCanvas=function(ai){if(L.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==u){window.G_vmlCanvasManager.uninitElement(L.jqplot.CanvasManager.canvases[ai]);L.jqplot.CanvasManager.canvases[ai]=null}else{var aj=L.jqplot.CanvasManager.canvases[ai];aj.getContext("2d").clearRect(0,0,aj.width,aj.height);L(aj).unbind().removeAttr("class").removeAttr("style");L(aj).css({left:"",top:"",position:""});aj.width=0;aj.height=0;L.jqplot.CanvasManager.free[ai]=true}}};L.jqplot.log=function(){if(window.console){window.console.log.apply(window.console,arguments)}};L.jqplot.config={addDomReference:false,enablePlugins:false,defaultHeight:300,defaultWidth:400,UTCAdjust:false,timezoneOffset:new Date(new Date().getTimezoneOffset()*60000),errorMessage:"",errorBackground:"",errorBorder:"",errorFontFamily:"",errorFontSize:"",errorFontStyle:"",errorFontWeight:"",catchErrors:false,defaultTickFormatString:"%.1f",defaultColors:["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"],defaultNegativeColors:["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"],dashLength:4,gapLength:4,dotGapLength:2.5,srcLocation:"jqplot/src/",pluginLocation:"jqplot/src/plugins/"};L.jqplot.arrayMax=function(ah){return Math.max.apply(Math,ah)};L.jqplot.arrayMin=function(ah){return Math.min.apply(Math,ah)};L.jqplot.enablePlugins=L.jqplot.config.enablePlugins;L.jqplot.support_canvas=function(){if(typeof L.jqplot.support_canvas.result=="undefined"){L.jqplot.support_canvas.result=!!document.createElement("canvas").getContext}return L.jqplot.support_canvas.result};L.jqplot.support_canvas_text=function(){if(typeof L.jqplot.support_canvas_text.result=="undefined"){if(window.G_vmlCanvasManager!==u&&window.G_vmlCanvasManager._version>887){L.jqplot.support_canvas_text.result=true}else{L.jqplot.support_canvas_text.result=!!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}}return L.jqplot.support_canvas_text.result};L.jqplot.use_excanvas=((!L.support.boxModel||!L.support.objectAll||!$support.leadingWhitespace)&&!L.jqplot.support_canvas())?true:false;L.jqplot.preInitHooks=[];L.jqplot.postInitHooks=[];L.jqplot.preParseOptionsHooks=[];L.jqplot.postParseOptionsHooks=[];L.jqplot.preDrawHooks=[];L.jqplot.postDrawHooks=[];L.jqplot.preDrawSeriesHooks=[];L.jqplot.postDrawSeriesHooks=[];L.jqplot.preDrawLegendHooks=[];L.jqplot.addLegendRowHooks=[];L.jqplot.preSeriesInitHooks=[];L.jqplot.postSeriesInitHooks=[];L.jqplot.preParseSeriesOptionsHooks=[];L.jqplot.postParseSeriesOptionsHooks=[];L.jqplot.eventListenerHooks=[];L.jqplot.preDrawSeriesShadowHooks=[];L.jqplot.postDrawSeriesShadowHooks=[];L.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};L.jqplot.ElemContainer.prototype.createElement=function(ak,am,ai,aj,an){this._offsets=am;var ah=ai||"jqplot";var al=document.createElement(ak);this._elem=L(al);this._elem.addClass(ah);this._elem.css(aj);this._elem.attr(an);al=null;return this._elem};L.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};L.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};L.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};L.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};L.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};L.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};L.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function w(ah){L.jqplot.ElemContainer.call(this);this.name=ah;this._series=[];this.show=false;this.tickRenderer=L.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=L.jqplot.AxisLabelRenderer;this.labelOptions={};this.label=null;this.showLabel=true;this.min=null;this.max=null;this.autoscale=false;this.pad=1.2;this.padMax=null;this.padMin=null;this.ticks=[];this.numberTicks;this.tickInterval;this.renderer=L.jqplot.LinearAxisRenderer;this.rendererOptions={};this.showTicks=true;this.showTickMarks=true;this.showMinorTicks=true;this.drawMajorGridlines=true;this.drawMinorGridlines=false;this.drawMajorTickMarks=true;this.drawMinorTickMarks=true;this.useSeriesColor=false;this.borderWidth=null;this.borderColor=null;this.scaleToHiddenSeries=false;this._dataBounds={min:null,max:null};this._intervalStats=[];this._offsets={min:null,max:null};this._ticks=[];this._label=null;this.syncTicks=null;this.tickSpacing=75;this._min=null;this._max=null;this._tickInterval=null;this._numberTicks=null;this.__ticks=null;this._options={}}w.prototype=new L.jqplot.ElemContainer();w.prototype.constructor=w;w.prototype.init=function(){if(L.isFunction(this.renderer)){this.renderer=new this.renderer()}this.tickOptions.axis=this.name;if(this.tickOptions.showMark==null){this.tickOptions.showMark=this.showTicks}if(this.tickOptions.showMark==null){this.tickOptions.showMark=this.showTickMarks}if(this.tickOptions.showLabel==null){this.tickOptions.showLabel=this.showTicks}if(this.label==null||this.label==""){this.showLabel=false}else{this.labelOptions.label=this.label}if(this.showLabel==false){this.labelOptions.show=false}if(this.pad==0){this.pad=1}if(this.padMax==0){this.padMax=1}if(this.padMin==0){this.padMin=1}if(this.padMax==null){this.padMax=(this.pad-1)/2+1}if(this.padMin==null){this.padMin=(this.pad-1)/2+1}this.pad=this.padMax+this.padMin-1;if(this.min!=null||this.max!=null){this.autoscale=false}if(this.syncTicks==null&&this.name.indexOf("y")>-1){this.syncTicks=true}else{if(this.syncTicks==null){this.syncTicks=false}}this.renderer.init.call(this,this.rendererOptions)};w.prototype.draw=function(ah,ai){if(this.__ticks){this.__ticks=null}return this.renderer.draw.call(this,ah,ai)};w.prototype.set=function(){this.renderer.set.call(this)};w.prototype.pack=function(ai,ah){if(this.show){this.renderer.pack.call(this,ai,ah)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};w.prototype.reset=function(){this.renderer.reset.call(this)};w.prototype.resetScale=function(ah){L.extend(true,this,{min:null,max:null,numberTicks:null,tickInterval:null,_ticks:[],ticks:[]},ah);this.resetDataBounds()};w.prototype.resetDataBounds=function(){var ao=this._dataBounds;ao.min=null;ao.max=null;var ai,ap,am;var aj=(this.show)?true:false;for(var al=0;al<this._series.length;al++){ap=this._series[al];if(ap.show||this.scaleToHiddenSeries){am=ap._plotData;if(ap._type==="line"&&ap.renderer.bands.show&&this.name.charAt(0)!=="x"){am=[[0,ap.renderer.bands._min],[1,ap.renderer.bands._max]]}var ah=1,an=1;if(ap._type!=null&&ap._type=="ohlc"){ah=3;an=2}for(var ak=0,ai=am.length;ak<ai;ak++){if(this.name=="xaxis"||this.name=="x2axis"){if((am[ak][0]!=null&&am[ak][0]<ao.min)||ao.min==null){ao.min=am[ak][0]}if((am[ak][0]!=null&&am[ak][0]>ao.max)||ao.max==null){ao.max=am[ak][0]}}else{if((am[ak][ah]!=null&&am[ak][ah]<ao.min)||ao.min==null){ao.min=am[ak][ah]}if((am[ak][an]!=null&&am[ak][an]>ao.max)||ao.max==null){ao.max=am[ak][an]}}}if(aj&&ap.renderer.constructor!==L.jqplot.BarRenderer){aj=false}else{if(aj&&this._options.hasOwnProperty("forceTickAt0")&&this._options.forceTickAt0==false){aj=false}else{if(aj&&ap.renderer.constructor===L.jqplot.BarRenderer){if(ap.barDirection=="vertical"&&this.name!="xaxis"&&this.name!="x2axis"){if(this._options.pad!=null||this._options.padMin!=null){aj=false}}else{if(ap.barDirection=="horizontal"&&(this.name=="xaxis"||this.name=="x2axis")){if(this._options.pad!=null||this._options.padMin!=null){aj=false}}}}}}}}if(aj&&this.renderer.constructor===L.jqplot.LinearAxisRenderer&&ao.min>=0){this.padMin=1;this.forceTickAt0=true}};function q(ah){L.jqplot.ElemContainer.call(this);this.show=false;this.location="ne";this.labels=[];this.showLabels=true;this.showSwatches=true;this.placement="insideGrid";this.xoffset=0;this.yoffset=0;this.border;this.background;this.textColor;this.fontFamily;this.fontSize;this.rowSpacing="0.5em";this.renderer=L.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.marginTop=null;this.marginRight=null;this.marginBottom=null;this.marginLeft=null;this.escapeHtml=false;this._series=[];L.extend(true,this,ah)}q.prototype=new L.jqplot.ElemContainer();q.prototype.constructor=q;q.prototype.setOptions=function(ah){L.extend(true,this,ah);if(this.placement=="inside"){this.placement="insideGrid"}if(this.xoffset>0){if(this.placement=="insideGrid"){switch(this.location){case"nw":case"w":case"sw":if(this.marginLeft==null){this.marginLeft=this.xoffset+"px"}this.marginRight="0px";break;case"ne":case"e":case"se":default:if(this.marginRight==null){this.marginRight=this.xoffset+"px"}this.marginLeft="0px";break}}else{if(this.placement=="outside"){switch(this.location){case"nw":case"w":case"sw":if(this.marginRight==null){this.marginRight=this.xoffset+"px"}this.marginLeft="0px";break;case"ne":case"e":case"se":default:if(this.marginLeft==null){this.marginLeft=this.xoffset+"px"}this.marginRight="0px";break}}}this.xoffset=0}if(this.yoffset>0){if(this.placement=="outside"){switch(this.location){case"sw":case"s":case"se":if(this.marginTop==null){this.marginTop=this.yoffset+"px"}this.marginBottom="0px";break;case"ne":case"n":case"nw":default:if(this.marginBottom==null){this.marginBottom=this.yoffset+"px"}this.marginTop="0px";break}}else{if(this.placement=="insideGrid"){switch(this.location){case"sw":case"s":case"se":if(this.marginBottom==null){this.marginBottom=this.yoffset+"px"}this.marginTop="0px";break;case"ne":case"n":case"nw":default:if(this.marginTop==null){this.marginTop=this.yoffset+"px"}this.marginBottom="0px";break}}}this.yoffset=0}};q.prototype.init=function(){if(L.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};q.prototype.draw=function(ai,aj){for(var ah=0;ah<L.jqplot.preDrawLegendHooks.length;ah++){L.jqplot.preDrawLegendHooks[ah].call(this,ai)}return this.renderer.draw.call(this,ai,aj)};q.prototype.pack=function(ah){this.renderer.pack.call(this,ah)};function y(ah){L.jqplot.ElemContainer.call(this);this.text=ah;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=L.jqplot.DivTitleRenderer;this.rendererOptions={};this.escapeHtml=false}y.prototype=new L.jqplot.ElemContainer();y.prototype.constructor=y;y.prototype.init=function(){if(L.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};y.prototype.draw=function(ah){return this.renderer.draw.call(this,ah)};y.prototype.pack=function(){this.renderer.pack.call(this)};function S(ah){ah=ah||{};L.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=L.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.negativeColor;this.lineWidth=2.5;this.lineJoin="round";this.lineCap="round";this.linePattern="solid";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=L.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillToValue=0;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new L.jqplot.GenericCanvas();this.shadowCanvas=new L.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0;this._type=""}S.prototype=new L.jqplot.ElemContainer();S.prototype.constructor=S;S.prototype.init=function(ak,ao,am){this.index=ak;this.gridBorderWidth=ao;var an=this.data;var aj=[],al,ah;for(al=0,ah=an.length;al<ah;al++){if(!this.breakOnNull){if(an[al]==null||an[al][0]==null||an[al][1]==null){continue}else{aj.push(an[al])}}else{aj.push(an[al])}}this.data=aj;if(!this.color){this.color=am.colorGenerator.get(this.index)}if(!this.negativeColor){this.negativeColor=am.negativeColorGenerator.get(this.index)}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var ai=L.jqplot.normalize2rgb(this.fillColor);var ai=L.jqplot.getColorComponents(ai);this.fillColor="rgba("+ai[0]+","+ai[1]+","+ai[2]+","+this.fillAlpha+")"}if(L.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions,am);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.showMarker=this.markerOptions.show;this.markerRenderer.init(this.markerOptions)};S.prototype.draw=function(an,ak,am){var ai=(ak==u)?{}:ak;an=(an==u)?this.canvas._ctx:an;var ah,al,aj;for(ah=0;ah<L.jqplot.preDrawSeriesHooks.length;ah++){L.jqplot.preDrawSeriesHooks[ah].call(this,an,ai)}if(this.show){this.renderer.setGridData.call(this,am);if(!ai.preventJqPlotSeriesDrawTrigger){L(an.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}al=[];if(ai.data){al=ai.data}else{if(!this._stack){al=this.data}else{al=this._plotData}}aj=ai.gridData||this.renderer.makeGridData.call(this,al,am);if(this._type==="line"&&this.renderer.smooth&&this.renderer._smoothedData.length){aj=this.renderer._smoothedData}this.renderer.draw.call(this,an,aj,ai,am)}for(ah=0;ah<L.jqplot.postDrawSeriesHooks.length;ah++){L.jqplot.postDrawSeriesHooks[ah].call(this,an,ai,am)}an=ak=am=ah=al=aj=null};S.prototype.drawShadow=function(an,ak,am){var ai=(ak==u)?{}:ak;an=(an==u)?this.shadowCanvas._ctx:an;var ah,al,aj;for(ah=0;ah<L.jqplot.preDrawSeriesShadowHooks.length;ah++){L.jqplot.preDrawSeriesShadowHooks[ah].call(this,an,ai)}if(this.shadow){this.renderer.setGridData.call(this,am);al=[];if(ai.data){al=ai.data}else{if(!this._stack){al=this.data}else{al=this._plotData}}aj=ai.gridData||this.renderer.makeGridData.call(this,al,am);this.renderer.drawShadow.call(this,an,aj,ai,am)}for(ah=0;ah<L.jqplot.postDrawSeriesShadowHooks.length;ah++){L.jqplot.postDrawSeriesShadowHooks[ah].call(this,an,ai)}an=ak=am=ah=al=aj=null};S.prototype.toggleDisplay=function(ai,ak){var ah,aj;if(ai.data.series){ah=ai.data.series}else{ah=this}if(ai.data.speed){aj=ai.data.speed}if(aj){if(ah.canvas._elem.is(":hidden")||!ah.show){ah.show=true;ah.canvas._elem.removeClass("jqplot-series-hidden");if(ah.shadowCanvas._elem){ah.shadowCanvas._elem.fadeIn(aj)}ah.canvas._elem.fadeIn(aj,ak);ah.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ah.index).fadeIn(aj)}else{ah.show=false;ah.canvas._elem.addClass("jqplot-series-hidden");if(ah.shadowCanvas._elem){ah.shadowCanvas._elem.fadeOut(aj)}ah.canvas._elem.fadeOut(aj,ak);ah.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ah.index).fadeOut(aj)}}else{if(ah.canvas._elem.is(":hidden")||!ah.show){ah.show=true;ah.canvas._elem.removeClass("jqplot-series-hidden");if(ah.shadowCanvas._elem){ah.shadowCanvas._elem.show()}ah.canvas._elem.show(0,ak);ah.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ah.index).show()}else{ah.show=false;ah.canvas._elem.addClass("jqplot-series-hidden");if(ah.shadowCanvas._elem){ah.shadowCanvas._elem.hide()}ah.canvas._elem.hide(0,ak);ah.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ah.index).hide()}}};function M(){L.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.drawBorder=true;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowColor=null;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=L.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}M.prototype=new L.jqplot.ElemContainer();M.prototype.constructor=M;M.prototype.init=function(){if(L.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};M.prototype.createElement=function(ah,ai){this._offsets=ah;return this.renderer.createElement.call(this,ai)};M.prototype.draw=function(){this.renderer.draw.call(this)};L.jqplot.GenericCanvas=function(){L.jqplot.ElemContainer.call(this);this._ctx};L.jqplot.GenericCanvas.prototype=new L.jqplot.ElemContainer();L.jqplot.GenericCanvas.prototype.constructor=L.jqplot.GenericCanvas;L.jqplot.GenericCanvas.prototype.createElement=function(al,aj,ai,am){this._offsets=al;var ah="jqplot";if(aj!=u){ah=aj}var ak;ak=am.canvasManager.getCanvas();if(ai!=null){this._plotDimensions=ai}ak.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;ak.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=L(ak);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});this._elem.addClass(ah);ak=am.canvasManager.initCanvas(ak);ak=null;return this._elem};L.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};L.jqplot.GenericCanvas.prototype.resetCanvas=function(){if(this._elem){if(L.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==u){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce()}this._ctx=null};L.jqplot.HooksManager=function(){this.hooks=[];this.args=[]};L.jqplot.HooksManager.prototype.addOnce=function(ak,ai){ai=ai||[];var al=false;for(var aj=0,ah=this.hooks.length;aj<ah;aj++){if(this.hooks[aj]==ak){al=true}}if(!al){this.hooks.push(ak);this.args.push(ai)}};L.jqplot.HooksManager.prototype.add=function(ai,ah){ah=ah||[];this.hooks.push(ai);this.args.push(ah)};L.jqplot.EventListenerManager=function(){this.hooks=[]};L.jqplot.EventListenerManager.prototype.addOnce=function(al,ak){var am=false,aj,ai;for(var ai=0,ah=this.hooks.length;ai<ah;ai++){aj=this.hooks[ai];if(aj[0]==al&&aj[1]==ak){am=true}}if(!am){this.hooks.push([al,ak])}};L.jqplot.EventListenerManager.prototype.add=function(ai,ah){this.hooks.push([ai,ah])};var U=["yMidAxis","xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];function R(){this.animate=false;this.animateReplot=false;this.axes={xaxis:new w("xaxis"),yaxis:new w("yaxis"),x2axis:new w("x2axis"),y2axis:new w("y2axis"),y3axis:new w("y3axis"),y4axis:new w("y4axis"),y5axis:new w("y5axis"),y6axis:new w("y6axis"),y7axis:new w("y7axis"),y8axis:new w("y8axis"),y9axis:new w("y9axis"),yMidAxis:new w("yMidAxis")};this.baseCanvas=new L.jqplot.GenericCanvas();this.captureRightClick=false;this.data=[];this.dataRenderer;this.dataRendererOptions;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{},yMidAxis:{}},seriesDefaults:{},series:[]};this.defaultAxisStart=1;this.drawIfHidden=false;this.eventCanvas=new L.jqplot.GenericCanvas();this.fillBetween={series1:null,series2:null,color:null,baseSeries:0,fill:true};this.fontFamily;this.fontSize;this.grid=new M();this.legend=new q();this.noDataIndicator={show:false,indicator:"Loading Data...",axes:{xaxis:{min:0,max:10,tickInterval:2,show:true},yaxis:{min:0,max:12,tickInterval:3,show:true}}};this.negativeSeriesColors=L.jqplot.config.defaultNegativeColors;this.options={};this.previousSeriesStack=[];this.plugins={};this.series=[];this.seriesStack=[];this.seriesColors=L.jqplot.config.defaultColors;this.sortData=true;this.stackSeries=false;this.syncXTicks=true;this.syncYTicks=true;this.target=null;this.targetId=null;this.textColor;this.title=new y();this._drawCount=0;this._sumy=0;this._sumx=0;this._stackData=[];this._plotData=[];this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:null,right:null,bottom:null,left:null};this._defaultGridPadding={top:10,right:10,bottom:23,left:10};this._addDomReference=L.jqplot.config.addDomReference;this.preInitHooks=new L.jqplot.HooksManager();this.postInitHooks=new L.jqplot.HooksManager();this.preParseOptionsHooks=new L.jqplot.HooksManager();this.postParseOptionsHooks=new L.jqplot.HooksManager();this.preDrawHooks=new L.jqplot.HooksManager();this.postDrawHooks=new L.jqplot.HooksManager();this.preDrawSeriesHooks=new L.jqplot.HooksManager();this.postDrawSeriesHooks=new L.jqplot.HooksManager();this.preDrawLegendHooks=new L.jqplot.HooksManager();this.addLegendRowHooks=new L.jqplot.HooksManager();this.preSeriesInitHooks=new L.jqplot.HooksManager();this.postSeriesInitHooks=new L.jqplot.HooksManager();this.preParseSeriesOptionsHooks=new L.jqplot.HooksManager();this.postParseSeriesOptionsHooks=new L.jqplot.HooksManager();this.eventListenerHooks=new L.jqplot.EventListenerManager();this.preDrawSeriesShadowHooks=new L.jqplot.HooksManager();this.postDrawSeriesShadowHooks=new L.jqplot.HooksManager();this.colorGenerator=new L.jqplot.ColorGenerator();this.negativeColorGenerator=new L.jqplot.ColorGenerator();this.canvasManager=new L.jqplot.CanvasManager();this.themeEngine=new L.jqplot.ThemeEngine();var aj=0;this.init=function(av,ar,ay){ay=ay||{};for(var at=0;at<L.jqplot.preInitHooks.length;at++){L.jqplot.preInitHooks[at].call(this,av,ar,ay)}for(var at=0;at<this.preInitHooks.hooks.length;at++){this.preInitHooks.hooks[at].call(this,av,ar,ay)}this.targetId="#"+av;this.target=L("#"+av);if(this._addDomReference){this.target.data("jqplot",this)}this.target.removeClass("jqplot-error");if(!this.target.get(0)){throw new Error("No plot target specified")}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var au;if(ay&&ay.height){au=parseInt(ay.height,10)}else{if(this.target.attr("data-height")){au=parseInt(this.target.attr("data-height"),10)}else{au=parseInt(L.jqplot.config.defaultHeight,10)}}this._height=au;this.target.css("height",au+"px")}else{this._height=au=this.target.height()}if(!this.target.width()){var aw;if(ay&&ay.width){aw=parseInt(ay.width,10)}else{if(this.target.attr("data-width")){aw=parseInt(this.target.attr("data-width"),10)}else{aw=parseInt(L.jqplot.config.defaultWidth,10)}}this._width=aw;this.target.css("width",aw+"px")}else{this._width=aw=this.target.width()}for(var at=0,ap=U.length;at<ap;at++){this.axes[U[at]]=new w(U[at])}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw new Error("Canvas dimension not set")}if(ay.dataRenderer&&L.isFunction(ay.dataRenderer)){if(ay.dataRendererOptions){this.dataRendererOptions=ay.dataRendererOptions}this.dataRenderer=ay.dataRenderer;ar=this.dataRenderer(ar,this,this.dataRendererOptions)}if(ay.noDataIndicator&&L.isPlainObject(ay.noDataIndicator)){L.extend(true,this.noDataIndicator,ay.noDataIndicator)}if(ar==null||L.isArray(ar)==false||ar.length==0||L.isArray(ar[0])==false||ar[0].length==0){if(this.noDataIndicator.show==false){throw new Error("No data specified")}else{for(var al in this.noDataIndicator.axes){for(var an in this.noDataIndicator.axes[al]){this.axes[al][an]=this.noDataIndicator.axes[al][an]}}this.postDrawHooks.add(function(){var aD=this.eventCanvas.getHeight();var aA=this.eventCanvas.getWidth();var az=L('<div class="jqplot-noData-container" style="position:absolute;"></div>');this.target.append(az);az.height(aD);az.width(aA);az.css("top",this.eventCanvas._offsets.top);az.css("left",this.eventCanvas._offsets.left);var aC=L('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>');az.append(aC);aC.html(this.noDataIndicator.indicator);var aB=aC.height();var ax=aC.width();aC.height(aB);aC.width(ax);aC.css("top",(aD-aB)/2+"px")})}}this.data=L.extend(true,[],ar);this.parseOptions(ay);if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;this.computePlotData();for(var at=0;at<this.series.length;at++){this.seriesStack.push(at);this.previousSeriesStack.push(at);this.series[at].shadowCanvas._plotDimensions=this._plotDimensions;this.series[at].canvas._plotDimensions=this._plotDimensions;for(var aq=0;aq<L.jqplot.preSeriesInitHooks.length;aq++){L.jqplot.preSeriesInitHooks[aq].call(this.series[at],av,this.data,this.options.seriesDefaults,this.options.series[at],this)}for(var aq=0;aq<this.preSeriesInitHooks.hooks.length;aq++){this.preSeriesInitHooks.hooks[aq].call(this.series[at],av,this.data,this.options.seriesDefaults,this.options.series[at],this)}this.series[at]._plotDimensions=this._plotDimensions;this.series[at].init(at,this.grid.borderWidth,this);for(var aq=0;aq<L.jqplot.postSeriesInitHooks.length;aq++){L.jqplot.postSeriesInitHooks[aq].call(this.series[at],av,this.data,this.options.seriesDefaults,this.options.series[at],this)}for(var aq=0;aq<this.postSeriesInitHooks.hooks.length;aq++){this.postSeriesInitHooks.hooks[aq].call(this.series[at],av,this.data,this.options.seriesDefaults,this.options.series[at],this)}this._sumy+=this.series[at]._sumy;this._sumx+=this.series[at]._sumx}var am,ao;for(var at=0,ap=U.length;at<ap;at++){am=U[at];ao=this.axes[am];ao._plotDimensions=this._plotDimensions;ao.init();if(this.axes[am].borderColor==null){if(am.charAt(0)!=="x"&&ao.useSeriesColor===true&&ao.show){ao.borderColor=ao._series[0].color}else{ao.borderColor=this.grid.borderColor}}}if(this.sortData){ah(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var at=0;at<L.jqplot.postInitHooks.length;at++){L.jqplot.postInitHooks[at].call(this,av,this.data,ay)}for(var at=0;at<this.postInitHooks.hooks.length;at++){this.postInitHooks.hooks[at].call(this,av,this.data,ay)}};this.resetAxesScale=function(aq,am){var ao=am||{};var ap=aq||this.axes;if(ap===true){ap=this.axes}if(L.isArray(ap)){for(var an=0;an<ap.length;an++){this.axes[ap[an]].resetScale(ao[ap[an]])}}else{if(typeof(ap)==="object"){for(var al in ap){this.axes[al].resetScale(ao[al])}}}};this.reInitialize=function(au,al){var ay=L.extend(true,{},this.options,al);var aw=this.targetId.substr(1);var ar=(au==null)?this.data:au;for(var av=0;av<L.jqplot.preInitHooks.length;av++){L.jqplot.preInitHooks[av].call(this,aw,ar,ay)}for(var av=0;av<this.preInitHooks.hooks.length;av++){this.preInitHooks.hooks[av].call(this,aw,ar,ay)}this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw new Error("Target dimension not set")}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;var am,ax,at,ao;for(var av=0,aq=U.length;av<aq;av++){am=U[av];ao=this.axes[am];ax=ao._ticks;for(var at=0,ap=ax.length;at<ap;at++){var an=ax[at]._elem;if(an){if(L.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==u){window.G_vmlCanvasManager.uninitElement(an.get(0))}an.emptyForce();an=null;ax._elem=null}}ax=null;delete ao.ticks;delete ao._ticks;this.axes[am]=new w(am);this.axes[am]._plotWidth=this._width;this.axes[am]._plotHeight=this._height}if(au){if(ay.dataRenderer&&L.isFunction(ay.dataRenderer)){if(ay.dataRendererOptions){this.dataRendererOptions=ay.dataRendererOptions}this.dataRenderer=ay.dataRenderer;au=this.dataRenderer(au,this,this.dataRendererOptions)}this.data=L.extend(true,[],au)}if(al){this.parseOptions(ay)}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;this.seriesStack=[];this.previousSeriesStack=[];this.computePlotData();for(var av=0,aq=this.series.length;av<aq;av++){this.seriesStack.push(av);this.previousSeriesStack.push(av);this.series[av].shadowCanvas._plotDimensions=this._plotDimensions;this.series[av].canvas._plotDimensions=this._plotDimensions;for(var at=0;at<L.jqplot.preSeriesInitHooks.length;at++){L.jqplot.preSeriesInitHooks[at].call(this.series[av],aw,this.data,this.options.seriesDefaults,this.options.series[av],this)}for(var at=0;at<this.preSeriesInitHooks.hooks.length;at++){this.preSeriesInitHooks.hooks[at].call(this.series[av],aw,this.data,this.options.seriesDefaults,this.options.series[av],this)}this.series[av]._plotDimensions=this._plotDimensions;this.series[av].init(av,this.grid.borderWidth,this);for(var at=0;at<L.jqplot.postSeriesInitHooks.length;at++){L.jqplot.postSeriesInitHooks[at].call(this.series[av],aw,this.data,this.options.seriesDefaults,this.options.series[av],this)}for(var at=0;at<this.postSeriesInitHooks.hooks.length;at++){this.postSeriesInitHooks.hooks[at].call(this.series[av],aw,this.data,this.options.seriesDefaults,this.options.series[av],this)}this._sumy+=this.series[av]._sumy;this._sumx+=this.series[av]._sumx}for(var av=0,aq=U.length;av<aq;av++){am=U[av];ao=this.axes[am];ao._plotDimensions=this._plotDimensions;ao.init();if(ao.borderColor==null){if(am.charAt(0)!=="x"&&ao.useSeriesColor===true&&ao.show){ao.borderColor=ao._series[0].color}else{ao.borderColor=this.grid.borderColor}}}if(this.sortData){ah(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var av=0,aq=L.jqplot.postInitHooks.length;av<aq;av++){L.jqplot.postInitHooks[av].call(this,aw,this.data,ay)}for(var av=0,aq=this.postInitHooks.hooks.length;av<aq;av++){this.postInitHooks.hooks[av].call(this,aw,this.data,ay)}};this.quickInit=function(){this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw new Error("Target dimension not set")}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var aq in this.axes){this.axes[aq]._plotWidth=this._width;this.axes[aq]._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;this.computePlotData();for(var ao=0;ao<this.series.length;ao++){if(this.series[ao]._type==="line"&&this.series[ao].renderer.bands.show){this.series[ao].renderer.initBands.call(this.series[ao],this.series[ao].renderer.options,this)}this.series[ao]._plotDimensions=this._plotDimensions;this.series[ao].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[ao]._sumy;this._sumx+=this.series[ao]._sumx}var am;for(var al=0;al<12;al++){am=U[al];var an=this.axes[am]._ticks;for(var ao=0;ao<an.length;ao++){var ap=an[ao]._elem;if(ap){if(L.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==u){window.G_vmlCanvasManager.uninitElement(ap.get(0))}ap.emptyForce();ap=null;an._elem=null}}an=null;this.axes[am]._plotDimensions=this._plotDimensions;this.axes[am]._ticks=[]}if(this.sortData){ah(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function ah(ap){var au,av,aw,al,at;for(var aq=0;aq<ap.length;aq++){var am;var ar=[ap[aq].data,ap[aq]._stackData,ap[aq]._plotData,ap[aq]._prevPlotData];for(var an=0;an<4;an++){am=true;au=ar[an];if(ap[aq]._stackAxis=="x"){for(var ao=0;ao<au.length;ao++){if(typeof(au[ao][1])!="number"){am=false;break}}if(am){au.sort(function(ay,ax){return ay[1]-ax[1]})}}else{for(var ao=0;ao<au.length;ao++){if(typeof(au[ao][0])!="number"){am=false;break}}if(am){au.sort(function(ay,ax){return ay[0]-ax[0]})}}}}}this.computePlotData=function(){this._plotData=[];this._stackData=[];var at,au,ao;for(au=0,ao=this.series.length;au<ao;au++){at=this.series[au];this._plotData.push([]);this._stackData.push([]);var am=at.data;this._plotData[au]=L.extend(true,[],am);this._stackData[au]=L.extend(true,[],am);at._plotData=this._plotData[au];at._stackData=this._stackData[au];var ax={x:[],y:[]};if(this.stackSeries&&!at.disableStack){at._stack=true;var av=(at._stackAxis==="x")?0:1;for(var ap=0,al=am.length;ap<al;ap++){var aw=am[ap][av];if(aw==null){aw=0}this._plotData[au][ap][av]=aw;this._stackData[au][ap][av]=aw;if(au>0){for(var aq=au;aq--;){var an=this._plotData[aq][ap][av];if(aw*an>=0){this._plotData[au][ap][av]+=an;this._stackData[au][ap][av]+=an;break}}}}}else{for(var ar=0;ar<at.data.length;ar++){ax.x.push(at.data[ar][0]);ax.y.push(at.data[ar][1])}this._stackData.push(at.data);this.series[au]._stackData=at.data;this._plotData.push(at.data);at._plotData=at.data;at._plotValues=ax}if(au>0){at._prevPlotData=this.series[au-1]._plotData}at._sumy=0;at._sumx=0;for(ar=at.data.length-1;ar>-1;ar--){at._sumy+=at.data[ar][1];at._sumx+=at.data[ar][0]}}};this.populatePlotData=function(au,av){this._plotData=[];this._stackData=[];au._stackData=[];au._plotData=[];var ay={x:[],y:[]};if(this.stackSeries&&!au.disableStack){au._stack=true;var ax=(au._stackAxis==="x")?0:1;var az=L.extend(true,[],au.data);var aA=L.extend(true,[],au.data);var an,am,ao,aw,al;for(var ar=0;ar<av;ar++){var ap=this.series[ar].data;for(var aq=0;aq<ap.length;aq++){ao=ap[aq];an=(ao[0]!=null)?ao[0]:0;am=(ao[1]!=null)?ao[1]:0;az[aq][0]+=an;az[aq][1]+=am;aw=(ax)?am:an;if(au.data[aq][ax]*aw>=0){aA[aq][ax]+=aw}}}for(var at=0;at<aA.length;at++){ay.x.push(aA[at][0]);ay.y.push(aA[at][1])}this._plotData.push(aA);this._stackData.push(az);au._stackData=az;au._plotData=aA;au._plotValues=ay}else{for(var at=0;at<au.data.length;at++){ay.x.push(au.data[at][0]);ay.y.push(au.data[at][1])}this._stackData.push(au.data);this.series[av]._stackData=au.data;this._plotData.push(au.data);au._plotData=au.data;au._plotValues=ay}if(av>0){au._prevPlotData=this.series[av-1]._plotData}au._sumy=0;au._sumx=0;for(at=au.data.length-1;at>-1;at--){au._sumy+=au.data[at][1];au._sumx+=au.data[at][0]}};this.getNextSeriesColor=(function(am){var al=0;var an=am.seriesColors;return function(){if(al<an.length){return an[al++]}else{al=0;return an[al++]}}})(this);this.parseOptions=function(ay){for(var at=0;at<this.preParseOptionsHooks.hooks.length;at++){this.preParseOptionsHooks.hooks[at].call(this,ay)}for(var at=0;at<L.jqplot.preParseOptionsHooks.length;at++){L.jqplot.preParseOptionsHooks[at].call(this,ay)}this.options=L.extend(true,{},this.defaults,ay);var am=this.options;this.animate=am.animate;this.animateReplot=am.animateReplot;this.stackSeries=am.stackSeries;if(L.isPlainObject(am.fillBetween)){var ax=["series1","series2","color","baseSeries","fill"],au;for(var at=0,aq=ax.length;at<aq;at++){au=ax[at];if(am.fillBetween[au]!=null){this.fillBetween[au]=am.fillBetween[au]}}}if(am.seriesColors){this.seriesColors=am.seriesColors}if(am.negativeSeriesColors){this.negativeSeriesColors=am.negativeSeriesColors}if(am.captureRightClick){this.captureRightClick=am.captureRightClick}this.defaultAxisStart=(ay&&ay.defaultAxisStart!=null)?ay.defaultAxisStart:this.defaultAxisStart;this.colorGenerator.setColors(this.seriesColors);this.negativeColorGenerator.setColors(this.negativeSeriesColors);L.extend(true,this._gridPadding,am.gridPadding);this.sortData=(am.sortData!=null)?am.sortData:this.sortData;for(var at=0;at<12;at++){var an=U[at];var ap=this.axes[an];ap._options=L.extend(true,{},am.axesDefaults,am.axes[an]);L.extend(true,ap,am.axesDefaults,am.axes[an]);ap._plotWidth=this._width;ap._plotHeight=this._height}var aw=function(aD,aB,aE){var aA=[];var aC,az;aB=aB||"vertical";if(!L.isArray(aD[0])){for(aC=0,az=aD.length;aC<az;aC++){if(aB=="vertical"){aA.push([aE+aC,aD[aC]])}else{aA.push([aD[aC],aE+aC])}}}else{L.extend(true,aA,aD)}return aA};var av=0;this.series=[];for(var at=0;at<this.data.length;at++){var al=L.extend(true,{index:at},{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[at],{rendererOptions:{animation:{show:this.animate}}});var ax=new S(al);for(var ar=0;ar<L.jqplot.preParseSeriesOptionsHooks.length;ar++){L.jqplot.preParseSeriesOptionsHooks[ar].call(ax,this.options.seriesDefaults,this.options.series[at])}for(var ar=0;ar<this.preParseSeriesOptionsHooks.hooks.length;ar++){this.preParseSeriesOptionsHooks.hooks[ar].call(ax,this.options.seriesDefaults,this.options.series[at])}L.extend(true,ax,al);var ao="vertical";if(ax.renderer===L.jqplot.BarRenderer&&ax.rendererOptions&&ax.rendererOptions.barDirection=="horizontal"){ao="horizontal";ax._stackAxis="x";ax._primaryAxis="_yaxis"}ax.data=aw(this.data[at],ao,this.defaultAxisStart);switch(ax.xaxis){case"xaxis":ax._xaxis=this.axes.xaxis;break;case"x2axis":ax._xaxis=this.axes.x2axis;break;default:break}ax._yaxis=this.axes[ax.yaxis];ax._xaxis._series.push(ax);ax._yaxis._series.push(ax);if(ax.show){ax._xaxis.show=true;ax._yaxis.show=true}else{if(ax._xaxis.scaleToHiddenSeries){ax._xaxis.show=true}if(ax._yaxis.scaleToHiddenSeries){ax._yaxis.show=true}}if(!ax.label){ax.label="Series "+(at+1).toString()}this.series.push(ax);for(var ar=0;ar<L.jqplot.postParseSeriesOptionsHooks.length;ar++){L.jqplot.postParseSeriesOptionsHooks[ar].call(this.series[at],this.options.seriesDefaults,this.options.series[at])}for(var ar=0;ar<this.postParseSeriesOptionsHooks.hooks.length;ar++){this.postParseSeriesOptionsHooks.hooks[ar].call(this.series[at],this.options.seriesDefaults,this.options.series[at])}}L.extend(true,this.grid,this.options.grid);for(var at=0,aq=U.length;at<aq;at++){var an=U[at];var ap=this.axes[an];if(ap.borderWidth==null){ap.borderWidth=this.grid.borderWidth}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){L.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;this.legend.setOptions(this.options.legend);for(var at=0;at<L.jqplot.postParseOptionsHooks.length;at++){L.jqplot.postParseOptionsHooks[at].call(this,ay)}for(var at=0;at<this.postParseOptionsHooks.hooks.length;at++){this.postParseOptionsHooks.hooks[at].call(this,ay)}};this.destroy=function(){this.canvasManager.freeAllCanvases();if(this.eventCanvas&&this.eventCanvas._elem){this.eventCanvas._elem.unbind()}this.target.empty();this.target[0].innerHTML=""};this.replot=function(am){var an=am||{};var ap=an.data||null;var al=(an.clear===false)?false:true;var ao=an.resetAxes||false;delete an.data;delete an.clear;delete an.resetAxes;this.target.trigger("jqplotPreReplot");if(al){this.destroy()}if(ap||!L.isEmptyObject(an)){this.reInitialize(ap,an)}else{this.quickInit()}if(ao){this.resetAxesScale(ao,an.axes)}this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(al){al=(al!=null)?al:true;this.target.trigger("jqplotPreRedraw");if(al){this.canvasManager.freeAllCanvases();this.eventCanvas._elem.unbind();this.target.empty()}for(var an in this.axes){this.axes[an]._ticks=[]}this.computePlotData();this._sumy=0;this._sumx=0;for(var am=0,ao=this.series.length;am<ao;am++){this._sumy+=this.series[am]._sumy;this._sumx+=this.series[am]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var aH,aF,aE,ao;for(aH=0,aE=L.jqplot.preDrawHooks.length;aH<aE;aH++){L.jqplot.preDrawHooks[aH].call(this)}for(aH=0,aE=this.preDrawHooks.hooks.length;aH<aE;aH++){this.preDrawHooks.hooks[aH].apply(this,this.preDrawSeriesHooks.args[aH])}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas",null,this));this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});var aL=this.legend.draw({},this);var al={top:0,left:0,bottom:0,right:0};if(this.legend.placement=="outsideGrid"){this.target.append(aL);switch(this.legend.location){case"n":al.top+=this.legend.getHeight();break;case"s":al.bottom+=this.legend.getHeight();break;case"ne":case"e":case"se":al.right+=this.legend.getWidth();break;case"nw":case"w":case"sw":al.left+=this.legend.getWidth();break;default:al.right+=this.legend.getWidth();break}aL=aL.detach()}var ar=this.axes;var aM;for(aH=0;aH<12;aH++){aM=U[aH];this.target.append(ar[aM].draw(this.baseCanvas._ctx,this));ar[aM].set()}if(ar.yaxis.show){al.left+=ar.yaxis.getWidth()}var aG=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var az=[0,0,0,0,0,0,0,0];var aC=0;var aB;for(aB=0;aB<8;aB++){if(ar[aG[aB]].show){aC+=ar[aG[aB]].getWidth();az[aB]=aC}}al.right+=aC;if(ar.x2axis.show){al.top+=ar.x2axis.getHeight()}if(this.title.show){al.top+=this.title.getHeight()}if(ar.xaxis.show){al.bottom+=ar.xaxis.getHeight()}if(this.options.gridDimensions&&L.isPlainObject(this.options.gridDimensions)){var at=parseInt(this.options.gridDimensions.width,10)||0;var aI=parseInt(this.options.gridDimensions.height,10)||0;var an=(this._width-al.left-al.right-at)/2;var aK=(this._height-al.top-al.bottom-aI)/2;if(aK>=0&&an>=0){al.top+=aK;al.bottom+=aK;al.left+=an;al.right+=an}}var am=["top","bottom","left","right"];for(var aB in am){if(this._gridPadding[am[aB]]==null&&al[am[aB]]>0){this._gridPadding[am[aB]]=al[am[aB]]}else{if(this._gridPadding[am[aB]]==null){this._gridPadding[am[aB]]=this._defaultGridPadding[am[aB]]}}}var aA=this._gridPadding;if(this.legend.placement==="outsideGrid"){aA={top:this.title.getHeight(),left:0,right:0,bottom:0};if(this.legend.location==="s"){aA.left=this._gridPadding.left;aA.right=this._gridPadding.right}}ar.xaxis.pack({position:"absolute",bottom:this._gridPadding.bottom-ar.xaxis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});ar.yaxis.pack({position:"absolute",top:0,left:this._gridPadding.left-ar.yaxis.getWidth(),height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});ar.x2axis.pack({position:"absolute",top:this._gridPadding.top-ar.x2axis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(aH=8;aH>0;aH--){ar[aG[aH-1]].pack({position:"absolute",top:0,right:this._gridPadding.right-az[aH-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}var au=(this._width-this._gridPadding.left-this._gridPadding.right)/2+this._gridPadding.left-ar.yMidAxis.getWidth()/2;ar.yMidAxis.pack({position:"absolute",top:0,left:au,zIndex:9,textAlign:"center"},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});this.target.append(this.grid.createElement(this._gridPadding,this));this.grid.draw();var aq=this.series;var aJ=aq.length;for(aH=0,aE=aJ;aH<aE;aH++){aF=this.seriesStack[aH];this.target.append(aq[aF].shadowCanvas.createElement(this._gridPadding,"jqplot-series-shadowCanvas",null,this));aq[aF].shadowCanvas.setContext();aq[aF].shadowCanvas._elem.data("seriesIndex",aF)}for(aH=0,aE=aJ;aH<aE;aH++){aF=this.seriesStack[aH];this.target.append(aq[aF].canvas.createElement(this._gridPadding,"jqplot-series-canvas",null,this));aq[aF].canvas.setContext();aq[aF].canvas._elem.data("seriesIndex",aF)}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas",null,this));this.eventCanvas.setContext();this.eventCanvas._ctx.fillStyle="rgba(0,0,0,0)";this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width,this.eventCanvas._ctx.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.eventCanvas._elem.before(aL);this.legend.pack(aA);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,placement:this.legend.placement,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();if(aJ){L(aq[aJ-1].canvas._elem).after(aL)}this.legend.pack(aA)}for(var aH=0,aE=L.jqplot.eventListenerHooks.length;aH<aE;aH++){this.eventCanvas._elem.bind(L.jqplot.eventListenerHooks[aH][0],{plot:this},L.jqplot.eventListenerHooks[aH][1])}for(var aH=0,aE=this.eventListenerHooks.hooks.length;aH<aE;aH++){this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[aH][0],{plot:this},this.eventListenerHooks.hooks[aH][1])}var ay=this.fillBetween;if(ay.fill&&ay.series1!==ay.series2&&ay.series1<aJ&&ay.series2<aJ&&aq[ay.series1]._type==="line"&&aq[ay.series2]._type==="line"){this.doFillBetweenLines()}for(var aH=0,aE=L.jqplot.postDrawHooks.length;aH<aE;aH++){L.jqplot.postDrawHooks[aH].call(this)}for(var aH=0,aE=this.postDrawHooks.hooks.length;aH<aE;aH++){this.postDrawHooks.hooks[aH].apply(this,this.postDrawHooks.args[aH])}if(this.target.is(":visible")){this._drawCount+=1}var av,aw,aD,ap;for(aH=0,aE=aJ;aH<aE;aH++){av=aq[aH];aw=av.renderer;aD=".jqplot-point-label.jqplot-series-"+aH;if(aw.animation&&aw.animation._supported&&aw.animation.show&&(this._drawCount<2||this.animateReplot)){ap=this.target.find(aD);ap.stop(true,true).hide();av.canvas._elem.stop(true,true).hide();av.shadowCanvas._elem.stop(true,true).hide();av.canvas._elem.jqplotEffect("blind",{mode:"show",direction:aw.animation.direction},aw.animation.speed);av.shadowCanvas._elem.jqplotEffect("blind",{mode:"show",direction:aw.animation.direction},aw.animation.speed);ap.fadeIn(aw.animation.speed*0.8)}}ap=null;this.target.trigger("jqplotPostDraw",[this])}};R.prototype.doFillBetweenLines=function(){var an=this.fillBetween;var ax=an.series1;var av=an.series2;var aw=(ax<av)?ax:av;var au=(av>ax)?av:ax;var ar=this.series[aw];var aq=this.series[au];if(aq.renderer.smooth){var ap=aq.renderer._smoothedData.slice(0).reverse()}else{var ap=aq.gridData.slice(0).reverse()}if(ar.renderer.smooth){var at=ar.renderer._smoothedData.concat(ap)}else{var at=ar.gridData.concat(ap)}var ao=(an.color!==null)?an.color:this.series[ax].fillColor;var ay=(an.baseSeries!==null)?an.baseSeries:aw;var am=this.series[ay].renderer.shapeRenderer;var al={fillStyle:ao,fill:true,closePath:true};am.draw(ar.shadowCanvas._ctx,at,al)};this.bindCustomEvents=function(){this.eventCanvas._elem.bind("click",{plot:this},this.onClick);this.eventCanvas._elem.bind("dblclick",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("mousedown",{plot:this},this.onMouseDown);this.eventCanvas._elem.bind("mousemove",{plot:this},this.onMouseMove);this.eventCanvas._elem.bind("mouseenter",{plot:this},this.onMouseEnter);this.eventCanvas._elem.bind("mouseleave",{plot:this},this.onMouseLeave);if(this.captureRightClick){this.eventCanvas._elem.bind("mouseup",{plot:this},this.onRightClick);this.eventCanvas._elem.get(0).oncontextmenu=function(){return false}}else{this.eventCanvas._elem.bind("mouseup",{plot:this},this.onMouseUp)}};function ai(av){var au=av.data.plot;var ap=au.eventCanvas._elem.offset();var at={x:av.pageX-ap.left,y:av.pageY-ap.top};var aq={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var ar=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var al=au.axes;var am,ao;for(am=11;am>0;am--){ao=ar[am-1];if(al[ao].show){aq[ao]=al[ao].series_p2u(at[ao.charAt(0)])}}return{offsets:ap,gridPos:at,dataPos:aq}}function ak(al,am){var aq=am.series;var aW,aU,aT,aO,aP,aJ,aI,aw,au,az,aA,aK;var aS,aX,aQ,ar,aH,aM,aV;var an,aN;for(aT=am.seriesStack.length-1;aT>=0;aT--){aW=am.seriesStack[aT];aO=aq[aW];aV=aO._highlightThreshold;switch(aO.renderer.constructor){case L.jqplot.BarRenderer:aJ=al.x;aI=al.y;for(aU=0;aU<aO._barPoints.length;aU++){aH=aO._barPoints[aU];aQ=aO.gridData[aU];if(aJ>aH[0][0]&&aJ<aH[2][0]&&aI>aH[2][1]&&aI<aH[0][1]){return{seriesIndex:aO.index,pointIndex:aU,gridData:aQ,data:aO.data[aU],points:aO._barPoints[aU]}}}break;case L.jqplot.PyramidRenderer:aJ=al.x;aI=al.y;for(aU=0;aU<aO._barPoints.length;aU++){aH=aO._barPoints[aU];aQ=aO.gridData[aU];if(aJ>aH[0][0]+aV[0][0]&&aJ<aH[2][0]+aV[2][0]&&aI>aH[2][1]&&aI<aH[0][1]){return{seriesIndex:aO.index,pointIndex:aU,gridData:aQ,data:aO.data[aU],points:aO._barPoints[aU]}}}break;case L.jqplot.DonutRenderer:az=aO.startAngle/180*Math.PI;aJ=al.x-aO._center[0];aI=al.y-aO._center[1];aP=Math.sqrt(Math.pow(aJ,2)+Math.pow(aI,2));if(aJ>0&&-aI>=0){aw=2*Math.PI-Math.atan(-aI/aJ)}else{if(aJ>0&&-aI<0){aw=-Math.atan(-aI/aJ)}else{if(aJ<0){aw=Math.PI-Math.atan(-aI/aJ)}else{if(aJ==0&&-aI>0){aw=3*Math.PI/2}else{if(aJ==0&&-aI<0){aw=Math.PI/2}else{if(aJ==0&&aI==0){aw=0}}}}}}if(az){aw-=az;if(aw<0){aw+=2*Math.PI}else{if(aw>2*Math.PI){aw-=2*Math.PI}}}au=aO.sliceMargin/180*Math.PI;if(aP<aO._radius&&aP>aO._innerRadius){for(aU=0;aU<aO.gridData.length;aU++){aA=(aU>0)?aO.gridData[aU-1][1]+au:au;aK=aO.gridData[aU][1];if(aw>aA&&aw<aK){return{seriesIndex:aO.index,pointIndex:aU,gridData:[al.x,al.y],data:aO.data[aU]}}}}break;case L.jqplot.PieRenderer:az=aO.startAngle/180*Math.PI;aJ=al.x-aO._center[0];aI=al.y-aO._center[1];aP=Math.sqrt(Math.pow(aJ,2)+Math.pow(aI,2));if(aJ>0&&-aI>=0){aw=2*Math.PI-Math.atan(-aI/aJ)}else{if(aJ>0&&-aI<0){aw=-Math.atan(-aI/aJ)}else{if(aJ<0){aw=Math.PI-Math.atan(-aI/aJ)}else{if(aJ==0&&-aI>0){aw=3*Math.PI/2}else{if(aJ==0&&-aI<0){aw=Math.PI/2}else{if(aJ==0&&aI==0){aw=0}}}}}}if(az){aw-=az;if(aw<0){aw+=2*Math.PI}else{if(aw>2*Math.PI){aw-=2*Math.PI}}}au=aO.sliceMargin/180*Math.PI;if(aP<aO._radius){for(aU=0;aU<aO.gridData.length;aU++){aA=(aU>0)?aO.gridData[aU-1][1]+au:au;aK=aO.gridData[aU][1];if(aw>aA&&aw<aK){return{seriesIndex:aO.index,pointIndex:aU,gridData:[al.x,al.y],data:aO.data[aU]}}}}break;case L.jqplot.BubbleRenderer:aJ=al.x;aI=al.y;var aF=null;if(aO.show){for(var aU=0;aU<aO.gridData.length;aU++){aQ=aO.gridData[aU];aX=Math.sqrt((aJ-aQ[0])*(aJ-aQ[0])+(aI-aQ[1])*(aI-aQ[1]));if(aX<=aQ[2]&&(aX<=aS||aS==null)){aS=aX;aF={seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}if(aF!=null){return aF}}break;case L.jqplot.FunnelRenderer:aJ=al.x;aI=al.y;var aL=aO._vertices,ap=aL[0],ao=aL[aL.length-1],at,aE,ay;function aR(a0,a2,a1){var aZ=(a2[1]-a1[1])/(a2[0]-a1[0]);var aY=a2[1]-aZ*a2[0];var a3=a0+a2[1];return[(a3-aY)/aZ,a3]}at=aR(aI,ap[0],ao[3]);aE=aR(aI,ap[1],ao[2]);for(aU=0;aU<aL.length;aU++){ay=aL[aU];if(aI>=ay[0][1]&&aI<=ay[3][1]&&aJ>=at[0]&&aJ<=aE[0]){return{seriesIndex:aO.index,pointIndex:aU,gridData:null,data:aO.data[aU]}}}break;case L.jqplot.LineRenderer:aJ=al.x;aI=al.y;aP=aO.renderer;if(aO.show){if((aO.fill||(aO.renderer.bands.show&&aO.renderer.bands.fill))&&(!am.plugins.highlighter||!am.plugins.highlighter.show)){var ax=false;if(aJ>aO._boundingBox[0][0]&&aJ<aO._boundingBox[1][0]&&aI>aO._boundingBox[1][1]&&aI<aO._boundingBox[0][1]){var aD=aO._areaPoints.length;var aG;var aU=aD-1;for(var aG=0;aG<aD;aG++){var aC=[aO._areaPoints[aG][0],aO._areaPoints[aG][1]];var aB=[aO._areaPoints[aU][0],aO._areaPoints[aU][1]];if(aC[1]<aI&&aB[1]>=aI||aB[1]<aI&&aC[1]>=aI){if(aC[0]+(aI-aC[1])/(aB[1]-aC[1])*(aB[0]-aC[0])<aJ){ax=!ax}}aU=aG}}if(ax){return{seriesIndex:aW,pointIndex:null,gridData:aO.gridData,data:aO.data,points:aO._areaPoints}}break}else{aN=aO.markerRenderer.size/2+aO.neighborThreshold;an=(aN>0)?aN:0;for(var aU=0;aU<aO.gridData.length;aU++){aQ=aO.gridData[aU];if(aP.constructor==L.jqplot.OHLCRenderer){if(aP.candleStick){var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._bodyWidth/2&&aJ<=aQ[0]+aP._bodyWidth/2&&aI>=av(aO.data[aU][2])&&aI<=av(aO.data[aU][3])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}else{if(!aP.hlc){var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._tickLength&&aJ<=aQ[0]+aP._tickLength&&aI>=av(aO.data[aU][2])&&aI<=av(aO.data[aU][3])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}else{var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._tickLength&&aJ<=aQ[0]+aP._tickLength&&aI>=av(aO.data[aU][1])&&aI<=av(aO.data[aU][2])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}}}else{if(aQ[0]!=null&&aQ[1]!=null){aX=Math.sqrt((aJ-aQ[0])*(aJ-aQ[0])+(aI-aQ[1])*(aI-aQ[1]));if(aX<=an&&(aX<=aS||aS==null)){aS=aX;return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}}}}}break;default:aJ=al.x;aI=al.y;aP=aO.renderer;if(aO.show){aN=aO.markerRenderer.size/2+aO.neighborThreshold;an=(aN>0)?aN:0;for(var aU=0;aU<aO.gridData.length;aU++){aQ=aO.gridData[aU];if(aP.constructor==L.jqplot.OHLCRenderer){if(aP.candleStick){var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._bodyWidth/2&&aJ<=aQ[0]+aP._bodyWidth/2&&aI>=av(aO.data[aU][2])&&aI<=av(aO.data[aU][3])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}else{if(!aP.hlc){var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._tickLength&&aJ<=aQ[0]+aP._tickLength&&aI>=av(aO.data[aU][2])&&aI<=av(aO.data[aU][3])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}else{var av=aO._yaxis.series_u2p;if(aJ>=aQ[0]-aP._tickLength&&aJ<=aQ[0]+aP._tickLength&&aI>=av(aO.data[aU][1])&&aI<=av(aO.data[aU][2])){return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}}}else{aX=Math.sqrt((aJ-aQ[0])*(aJ-aQ[0])+(aI-aQ[1])*(aI-aQ[1]));if(aX<=an&&(aX<=aS||aS==null)){aS=aX;return{seriesIndex:aW,pointIndex:aU,gridData:aQ,data:aO.data[aU]}}}}}break}}return null}this.onClick=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);var al=L.Event("jqplotClick");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])};this.onDblClick=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);var al=L.Event("jqplotDblClick");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])};this.onMouseDown=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);var al=L.Event("jqplotMouseDown");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])};this.onMouseUp=function(an){var am=ai(an);var al=L.Event("jqplotMouseUp");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,null,an.data.plot])};this.onRightClick=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);if(ap.captureRightClick){if(an.which==3){var al=L.Event("jqplotRightClick");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])}else{var al=L.Event("jqplotMouseUp");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])}}};this.onMouseMove=function(an){var am=ai(an);var ap=an.data.plot;var ao=ak(am.gridPos,ap);var al=L.Event("jqplotMouseMove");al.pageX=an.pageX;al.pageY=an.pageY;L(this).trigger(al,[am.gridPos,am.dataPos,ao,ap])};this.onMouseEnter=function(an){var am=ai(an);var ao=an.data.plot;var al=L.Event("jqplotMouseEnter");al.pageX=an.pageX;al.pageY=an.pageY;al.relatedTarget=an.relatedTarget;L(this).trigger(al,[am.gridPos,am.dataPos,null,ao])};this.onMouseLeave=function(an){var am=ai(an);var ao=an.data.plot;var al=L.Event("jqplotMouseLeave");al.pageX=an.pageX;al.pageY=an.pageY;al.relatedTarget=an.relatedTarget;L(this).trigger(al,[am.gridPos,am.dataPos,null,ao])};this.drawSeries=function(an,al){var ap,ao,am;al=(typeof(an)==="number"&&al==null)?an:al;an=(typeof(an)==="object")?an:{};if(al!=u){ao=this.series[al];am=ao.shadowCanvas._ctx;am.clearRect(0,0,am.canvas.width,am.canvas.height);ao.drawShadow(am,an,this);am=ao.canvas._ctx;am.clearRect(0,0,am.canvas.width,am.canvas.height);ao.draw(am,an,this);if(ao.renderer.constructor==L.jqplot.BezierCurveRenderer){if(al<this.series.length-1){this.drawSeries(al+1)}}}else{for(ap=0;ap<this.series.length;ap++){ao=this.series[ap];am=ao.shadowCanvas._ctx;am.clearRect(0,0,am.canvas.width,am.canvas.height);ao.drawShadow(am,an,this);am=ao.canvas._ctx;am.clearRect(0,0,am.canvas.width,am.canvas.height);ao.draw(am,an,this)}}an=al=ap=ao=am=null};this.moveSeriesToFront=function(am){am=parseInt(am,10);var ap=L.inArray(am,this.seriesStack);if(ap==-1){return}if(ap==this.seriesStack.length-1){this.previousSeriesStack=this.seriesStack.slice(0);return}var al=this.seriesStack[this.seriesStack.length-1];var ao=this.series[am].canvas._elem.detach();var an=this.series[am].shadowCanvas._elem.detach();this.series[al].shadowCanvas._elem.after(an);this.series[al].canvas._elem.after(ao);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(ap,1);this.seriesStack.push(am)};this.moveSeriesToBack=function(am){am=parseInt(am,10);var ap=L.inArray(am,this.seriesStack);if(ap==0||ap==-1){return}var al=this.seriesStack[0];var ao=this.series[am].canvas._elem.detach();var an=this.series[am].shadowCanvas._elem.detach();this.series[al].shadowCanvas._elem.before(an);this.series[al].canvas._elem.before(ao);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(ap,1);this.seriesStack.unshift(am)};this.restorePreviousSeriesOrder=function(){var ar,aq,ap,ao,an,al,am;if(this.seriesStack==this.previousSeriesStack){return}for(ar=1;ar<this.previousSeriesStack.length;ar++){al=this.previousSeriesStack[ar];am=this.previousSeriesStack[ar-1];ap=this.series[al].canvas._elem.detach();ao=this.series[al].shadowCanvas._elem.detach();this.series[am].shadowCanvas._elem.after(ao);this.series[am].canvas._elem.after(ap)}an=this.seriesStack.slice(0);this.seriesStack=this.previousSeriesStack.slice(0);this.previousSeriesStack=an};this.restoreOriginalSeriesOrder=function(){var ap,ao,al=[],an,am;for(ap=0;ap<this.series.length;ap++){al.push(ap)}if(this.seriesStack==al){return}this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack=al;for(ap=1;ap<this.seriesStack.length;ap++){an=this.series[ap].canvas._elem.detach();am=this.series[ap].shadowCanvas._elem.detach();this.series[ap-1].shadowCanvas._elem.after(am);this.series[ap-1].canvas._elem.after(an)}};this.activateTheme=function(al){this.themeEngine.activate(this,al)}}L.jqplot.computeHighlightColors=function(ai){var ak;if(L.isArray(ai)){ak=[];for(var am=0;am<ai.length;am++){var al=L.jqplot.getColorComponents(ai[am]);var ah=[al[0],al[1],al[2]];var an=ah[0]+ah[1]+ah[2];for(var aj=0;aj<3;aj++){ah[aj]=(an>660)?ah[aj]*0.85:0.73*ah[aj]+90;ah[aj]=parseInt(ah[aj],10);(ah[aj]>255)?255:ah[aj]}ah[3]=0.3+0.35*al[3];ak.push("rgba("+ah[0]+","+ah[1]+","+ah[2]+","+ah[3]+")")}}else{var al=L.jqplot.getColorComponents(ai);var ah=[al[0],al[1],al[2]];var an=ah[0]+ah[1]+ah[2];for(var aj=0;aj<3;aj++){ah[aj]=(an>660)?ah[aj]*0.85:0.73*ah[aj]+90;ah[aj]=parseInt(ah[aj],10);(ah[aj]>255)?255:ah[aj]}ah[3]=0.3+0.35*al[3];ak="rgba("+ah[0]+","+ah[1]+","+ah[2]+","+ah[3]+")"}return ak};L.jqplot.ColorGenerator=function(ai){ai=ai||L.jqplot.config.defaultColors;var ah=0;this.next=function(){if(ah<ai.length){return ai[ah++]}else{ah=0;return ai[ah++]}};this.previous=function(){if(ah>0){return ai[ah--]}else{ah=ai.length-1;return ai[ah]}};this.get=function(ak){var aj=ak-ai.length*Math.floor(ak/ai.length);return ai[aj]};this.setColors=function(aj){ai=aj};this.reset=function(){ah=0};this.getIndex=function(){return ah};this.setIndex=function(aj){ah=aj}};L.jqplot.hex2rgb=function(aj,ah){aj=aj.replace("#","");if(aj.length==3){aj=aj.charAt(0)+aj.charAt(0)+aj.charAt(1)+aj.charAt(1)+aj.charAt(2)+aj.charAt(2)}var ai;ai="rgba("+parseInt(aj.slice(0,2),16)+", "+parseInt(aj.slice(2,4),16)+", "+parseInt(aj.slice(4,6),16);if(ah){ai+=", "+ah}ai+=")";return ai};L.jqplot.rgb2hex=function(am){var aj=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var ah=am.match(aj);var al="#";for(var ak=1;ak<4;ak++){var ai;if(ah[ak].search(/%/)!=-1){ai=parseInt(255*ah[ak]/100,10).toString(16);if(ai.length==1){ai="0"+ai}}else{ai=parseInt(ah[ak],10).toString(16);if(ai.length==1){ai="0"+ai}}al+=ai}return al};L.jqplot.normalize2rgb=function(ai,ah){if(ai.search(/^ *rgba?\(/)!=-1){return ai}else{if(ai.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return L.jqplot.hex2rgb(ai,ah)}else{throw new Error("Invalid color spec")}}};L.jqplot.getColorComponents=function(am){am=L.jqplot.colorKeywordMap[am]||am;var ak=L.jqplot.normalize2rgb(am);var aj=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var ah=ak.match(aj);var ai=[];for(var al=1;al<4;al++){if(ah[al].search(/%/)!=-1){ai[al-1]=parseInt(255*ah[al]/100,10)}else{ai[al-1]=parseInt(ah[al],10)}}ai[3]=parseFloat(ah[4])?parseFloat(ah[4]):1;return ai};L.jqplot.colorKeywordMap={aliceblue:"rgb(240, 248, 255)",antiquewhite:"rgb(250, 235, 215)",aqua:"rgb( 0, 255, 255)",aquamarine:"rgb(127, 255, 212)",azure:"rgb(240, 255, 255)",beige:"rgb(245, 245, 220)",bisque:"rgb(255, 228, 196)",black:"rgb( 0, 0, 0)",blanchedalmond:"rgb(255, 235, 205)",blue:"rgb( 0, 0, 255)",blueviolet:"rgb(138, 43, 226)",brown:"rgb(165, 42, 42)",burlywood:"rgb(222, 184, 135)",cadetblue:"rgb( 95, 158, 160)",chartreuse:"rgb(127, 255, 0)",chocolate:"rgb(210, 105, 30)",coral:"rgb(255, 127, 80)",cornflowerblue:"rgb(100, 149, 237)",cornsilk:"rgb(255, 248, 220)",crimson:"rgb(220, 20, 60)",cyan:"rgb( 0, 255, 255)",darkblue:"rgb( 0, 0, 139)",darkcyan:"rgb( 0, 139, 139)",darkgoldenrod:"rgb(184, 134, 11)",darkgray:"rgb(169, 169, 169)",darkgreen:"rgb( 0, 100, 0)",darkgrey:"rgb(169, 169, 169)",darkkhaki:"rgb(189, 183, 107)",darkmagenta:"rgb(139, 0, 139)",darkolivegreen:"rgb( 85, 107, 47)",darkorange:"rgb(255, 140, 0)",darkorchid:"rgb(153, 50, 204)",darkred:"rgb(139, 0, 0)",darksalmon:"rgb(233, 150, 122)",darkseagreen:"rgb(143, 188, 143)",darkslateblue:"rgb( 72, 61, 139)",darkslategray:"rgb( 47, 79, 79)",darkslategrey:"rgb( 47, 79, 79)",darkturquoise:"rgb( 0, 206, 209)",darkviolet:"rgb(148, 0, 211)",deeppink:"rgb(255, 20, 147)",deepskyblue:"rgb( 0, 191, 255)",dimgray:"rgb(105, 105, 105)",dimgrey:"rgb(105, 105, 105)",dodgerblue:"rgb( 30, 144, 255)",firebrick:"rgb(178, 34, 34)",floralwhite:"rgb(255, 250, 240)",forestgreen:"rgb( 34, 139, 34)",fuchsia:"rgb(255, 0, 255)",gainsboro:"rgb(220, 220, 220)",ghostwhite:"rgb(248, 248, 255)",gold:"rgb(255, 215, 0)",goldenrod:"rgb(218, 165, 32)",gray:"rgb(128, 128, 128)",grey:"rgb(128, 128, 128)",green:"rgb( 0, 128, 0)",greenyellow:"rgb(173, 255, 47)",honeydew:"rgb(240, 255, 240)",hotpink:"rgb(255, 105, 180)",indianred:"rgb(205, 92, 92)",indigo:"rgb( 75, 0, 130)",ivory:"rgb(255, 255, 240)",khaki:"rgb(240, 230, 140)",lavender:"rgb(230, 230, 250)",lavenderblush:"rgb(255, 240, 245)",lawngreen:"rgb(124, 252, 0)",lemonchiffon:"rgb(255, 250, 205)",lightblue:"rgb(173, 216, 230)",lightcoral:"rgb(240, 128, 128)",lightcyan:"rgb(224, 255, 255)",lightgoldenrodyellow:"rgb(250, 250, 210)",lightgray:"rgb(211, 211, 211)",lightgreen:"rgb(144, 238, 144)",lightgrey:"rgb(211, 211, 211)",lightpink:"rgb(255, 182, 193)",lightsalmon:"rgb(255, 160, 122)",lightseagreen:"rgb( 32, 178, 170)",lightskyblue:"rgb(135, 206, 250)",lightslategray:"rgb(119, 136, 153)",lightslategrey:"rgb(119, 136, 153)",lightsteelblue:"rgb(176, 196, 222)",lightyellow:"rgb(255, 255, 224)",lime:"rgb( 0, 255, 0)",limegreen:"rgb( 50, 205, 50)",linen:"rgb(250, 240, 230)",magenta:"rgb(255, 0, 255)",maroon:"rgb(128, 0, 0)",mediumaquamarine:"rgb(102, 205, 170)",mediumblue:"rgb( 0, 0, 205)",mediumorchid:"rgb(186, 85, 211)",mediumpurple:"rgb(147, 112, 219)",mediumseagreen:"rgb( 60, 179, 113)",mediumslateblue:"rgb(123, 104, 238)",mediumspringgreen:"rgb( 0, 250, 154)",mediumturquoise:"rgb( 72, 209, 204)",mediumvioletred:"rgb(199, 21, 133)",midnightblue:"rgb( 25, 25, 112)",mintcream:"rgb(245, 255, 250)",mistyrose:"rgb(255, 228, 225)",moccasin:"rgb(255, 228, 181)",navajowhite:"rgb(255, 222, 173)",navy:"rgb( 0, 0, 128)",oldlace:"rgb(253, 245, 230)",olive:"rgb(128, 128, 0)",olivedrab:"rgb(107, 142, 35)",orange:"rgb(255, 165, 0)",orangered:"rgb(255, 69, 0)",orchid:"rgb(218, 112, 214)",palegoldenrod:"rgb(238, 232, 170)",palegreen:"rgb(152, 251, 152)",paleturquoise:"rgb(175, 238, 238)",palevioletred:"rgb(219, 112, 147)",papayawhip:"rgb(255, 239, 213)",peachpuff:"rgb(255, 218, 185)",peru:"rgb(205, 133, 63)",pink:"rgb(255, 192, 203)",plum:"rgb(221, 160, 221)",powderblue:"rgb(176, 224, 230)",purple:"rgb(128, 0, 128)",red:"rgb(255, 0, 0)",rosybrown:"rgb(188, 143, 143)",royalblue:"rgb( 65, 105, 225)",saddlebrown:"rgb(139, 69, 19)",salmon:"rgb(250, 128, 114)",sandybrown:"rgb(244, 164, 96)",seagreen:"rgb( 46, 139, 87)",seashell:"rgb(255, 245, 238)",sienna:"rgb(160, 82, 45)",silver:"rgb(192, 192, 192)",skyblue:"rgb(135, 206, 235)",slateblue:"rgb(106, 90, 205)",slategray:"rgb(112, 128, 144)",slategrey:"rgb(112, 128, 144)",snow:"rgb(255, 250, 250)",springgreen:"rgb( 0, 255, 127)",steelblue:"rgb( 70, 130, 180)",tan:"rgb(210, 180, 140)",teal:"rgb( 0, 128, 128)",thistle:"rgb(216, 191, 216)",tomato:"rgb(255, 99, 71)",turquoise:"rgb( 64, 224, 208)",violet:"rgb(238, 130, 238)",wheat:"rgb(245, 222, 179)",white:"rgb(255, 255, 255)",whitesmoke:"rgb(245, 245, 245)",yellow:"rgb(255, 255, 0)",yellowgreen:"rgb(154, 205, 50)"};L.jqplot.AxisLabelRenderer=function(ah){L.jqplot.ElemContainer.call(this);this.axis;this.show=true;this.label="";this.fontFamily=null;this.fontSize=null;this.textColor=null;this._elem;this.escapeHTML=false;L.extend(true,this,ah)};L.jqplot.AxisLabelRenderer.prototype=new L.jqplot.ElemContainer();L.jqplot.AxisLabelRenderer.prototype.constructor=L.jqplot.AxisLabelRenderer;L.jqplot.AxisLabelRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.AxisLabelRenderer.prototype.draw=function(ah,ai){if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=L('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};L.jqplot.AxisLabelRenderer.prototype.pack=function(){};L.jqplot.AxisTickRenderer=function(ah){L.jqplot.ElemContainer.call(this);this.mark="outside";this.axis;this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.size=4;this.markSize=6;this.show=true;this.showLabel=true;this.label=null;this.value=null;this._styles={};this.formatter=L.jqplot.DefaultTickFormatter;this.prefix="";this.suffix="";this.formatString="";this.fontFamily;this.fontSize;this.textColor;this.escapeHTML=false;this._elem;this._breakTick=false;L.extend(true,this,ah)};L.jqplot.AxisTickRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.AxisTickRenderer.prototype=new L.jqplot.ElemContainer();L.jqplot.AxisTickRenderer.prototype.constructor=L.jqplot.AxisTickRenderer;L.jqplot.AxisTickRenderer.prototype.setTick=function(ah,aj,ai){this.value=ah;this.axis=aj;if(ai){this.isMinorTick=true}return this};L.jqplot.AxisTickRenderer.prototype.draw=function(){if(this.label===null){this.label=this.prefix+this.formatter(this.formatString,this.value)+this.suffix}var ai={position:"absolute"};if(Number(this.label)){ai.whitSpace="nowrap"}if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=L(document.createElement("div"));this._elem.addClass("jqplot-"+this.axis+"-tick");if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}this._elem.css(ai);for(var ah in this._styles){this._elem.css(ah,this._styles[ah])}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}if(this._breakTick){this._elem.addClass("jqplot-breakTick")}return this._elem};L.jqplot.DefaultTickFormatter=function(ah,ai){if(typeof ai=="number"){if(!ah){ah=L.jqplot.config.defaultTickFormatString}return L.jqplot.sprintf(ah,ai)}else{return String(ai)}};L.jqplot.PercentTickFormatter=function(ah,ai){if(typeof ai=="number"){ai=100*ai;if(!ah){ah=L.jqplot.config.defaultTickFormatString}return L.jqplot.sprintf(ah,ai)}else{return String(ai)}};L.jqplot.AxisTickRenderer.prototype.pack=function(){};L.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new L.jqplot.ShadowRenderer()};L.jqplot.CanvasGridRenderer.prototype.init=function(ai){this._ctx;L.extend(true,this,ai);var ah={lineJoin:"miter",lineCap:"round",fill:false,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.shadowWidth,closePath:false,strokeStyle:this.shadowColor};this.renderer.shadowRenderer.init(ah)};L.jqplot.CanvasGridRenderer.prototype.createElement=function(ak){var aj;if(this._elem){if(L.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==u){aj=this._elem.get(0);window.G_vmlCanvasManager.uninitElement(aj);aj=null}this._elem.emptyForce();this._elem=null}aj=ak.canvasManager.getCanvas();var ah=this._plotDimensions.width;var ai=this._plotDimensions.height;aj.width=ah;aj.height=ai;this._elem=L(aj);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});aj=ak.canvasManager.initCanvas(aj);this._top=this._offsets.top;this._bottom=ai-this._offsets.bottom;this._left=this._offsets.left;this._right=ah-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;aj=null;return this._elem};L.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var at=this._ctx;var aw=this._axes;at.save();at.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);at.fillStyle=this.backgroundColor||this.background;at.fillRect(this._left,this._top,this._width,this._height);at.save();at.lineJoin="miter";at.lineCap="butt";at.lineWidth=this.gridLineWidth;at.strokeStyle=this.gridLineColor;var aA,az,ap,aq;var am=["xaxis","yaxis","x2axis","y2axis"];for(var ay=4;ay>0;ay--){var aD=am[ay-1];var ah=aw[aD];var aB=ah._ticks;var ar=aB.length;if(ah.show){if(ah.drawBaseline){var aC={};if(ah.baselineWidth!==null){aC.lineWidth=ah.baselineWidth}if(ah.baselineColor!==null){aC.strokeStyle=ah.baselineColor}switch(aD){case"xaxis":ao(this._left,this._bottom,this._right,this._bottom,aC);break;case"yaxis":ao(this._left,this._bottom,this._left,this._top,aC);break;case"x2axis":ao(this._left,this._bottom,this._right,this._bottom,aC);break;case"y2axis":ao(this._right,this._bottom,this._right,this._top,aC);break}}for(var au=ar;au>0;au--){var an=aB[au-1];if(an.show){var ak=Math.round(ah.u2p(an.value))+0.5;switch(aD){case"xaxis":if(an.showGridline&&this.drawGridlines&&((!an.isMinorTick&&ah.drawMajorGridlines)||(an.isMinorTick&&ah.drawMinorGridlines))){ao(ak,this._top,ak,this._bottom)}if(an.showMark&&an.mark&&((!an.isMinorTick&&ah.drawMajorTickMarks)||(an.isMinorTick&&ah.drawMinorTickMarks))){ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;switch(aq){case"outside":aA=this._bottom;az=this._bottom+ap;break;case"inside":aA=this._bottom-ap;az=this._bottom;break;case"cross":aA=this._bottom-ap;az=this._bottom+ap;break;default:aA=this._bottom;az=this._bottom+ap;break}if(this.shadow){this.renderer.shadowRenderer.draw(at,[[ak,aA],[ak,az]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ao(ak,aA,ak,az)}break;case"yaxis":if(an.showGridline&&this.drawGridlines&&((!an.isMinorTick&&ah.drawMajorGridlines)||(an.isMinorTick&&ah.drawMinorGridlines))){ao(this._right,ak,this._left,ak)}if(an.showMark&&an.mark&&((!an.isMinorTick&&ah.drawMajorTickMarks)||(an.isMinorTick&&ah.drawMinorTickMarks))){ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;switch(aq){case"outside":aA=this._left-ap;az=this._left;break;case"inside":aA=this._left;az=this._left+ap;break;case"cross":aA=this._left-ap;az=this._left+ap;break;default:aA=this._left-ap;az=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(at,[[aA,ak],[az,ak]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ao(aA,ak,az,ak,{strokeStyle:ah.borderColor})}break;case"x2axis":if(an.showGridline&&this.drawGridlines&&((!an.isMinorTick&&ah.drawMajorGridlines)||(an.isMinorTick&&ah.drawMinorGridlines))){ao(ak,this._bottom,ak,this._top)}if(an.showMark&&an.mark&&((!an.isMinorTick&&ah.drawMajorTickMarks)||(an.isMinorTick&&ah.drawMinorTickMarks))){ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;switch(aq){case"outside":aA=this._top-ap;az=this._top;break;case"inside":aA=this._top;az=this._top+ap;break;case"cross":aA=this._top-ap;az=this._top+ap;break;default:aA=this._top-ap;az=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(at,[[ak,aA],[ak,az]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ao(ak,aA,ak,az)}break;case"y2axis":if(an.showGridline&&this.drawGridlines&&((!an.isMinorTick&&ah.drawMajorGridlines)||(an.isMinorTick&&ah.drawMinorGridlines))){ao(this._left,ak,this._right,ak)}if(an.showMark&&an.mark&&((!an.isMinorTick&&ah.drawMajorTickMarks)||(an.isMinorTick&&ah.drawMinorTickMarks))){ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;switch(aq){case"outside":aA=this._right;az=this._right+ap;break;case"inside":aA=this._right-ap;az=this._right;break;case"cross":aA=this._right-ap;az=this._right+ap;break;default:aA=this._right;az=this._right+ap;break}if(this.shadow){this.renderer.shadowRenderer.draw(at,[[aA,ak],[az,ak]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ao(aA,ak,az,ak,{strokeStyle:ah.borderColor})}break;default:break}}}an=null}ah=null;aB=null}am=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];for(var ay=7;ay>0;ay--){var ah=aw[am[ay-1]];var aB=ah._ticks;if(ah.show){var ai=aB[ah.numberTicks-1];var al=aB[0];var aj=ah.getLeft();var av=[[aj,ai.getTop()+ai.getHeight()/2],[aj,al.getTop()+al.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(at,av,{lineCap:"butt",fill:false,closePath:false})}ao(av[0][0],av[0][1],av[1][0],av[1][1],{lineCap:"butt",strokeStyle:ah.borderColor,lineWidth:ah.borderWidth});for(var au=aB.length;au>0;au--){var an=aB[au-1];ap=an.markSize;aq=an.mark;var ak=Math.round(ah.u2p(an.value))+0.5;if(an.showMark&&an.mark){switch(aq){case"outside":aA=aj;az=aj+ap;break;case"inside":aA=aj-ap;az=aj;break;case"cross":aA=aj-ap;az=aj+ap;break;default:aA=aj;az=aj+ap;break}av=[[aA,ak],[az,ak]];if(this.shadow){this.renderer.shadowRenderer.draw(at,av,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ao(aA,ak,az,ak,{strokeStyle:ah.borderColor})}an=null}al=null}ah=null;aB=null}at.restore();function ao(aH,aG,aE,ax,aF){at.save();aF=aF||{};if(aF.lineWidth==null||aF.lineWidth!=0){L.extend(true,at,aF);at.beginPath();at.moveTo(aH,aG);at.lineTo(aE,ax);at.stroke();at.restore()}}if(this.shadow){var av=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(at,av)}if(this.borderWidth!=0&&this.drawBorder){ao(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:aw.x2axis.borderColor,lineWidth:aw.x2axis.borderWidth});ao(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:aw.y2axis.borderColor,lineWidth:aw.y2axis.borderWidth});ao(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:aw.xaxis.borderColor,lineWidth:aw.xaxis.borderWidth});ao(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:aw.yaxis.borderColor,lineWidth:aw.yaxis.borderWidth})}at.restore();at=null;aw=null};L.jqplot.DivTitleRenderer=function(){};L.jqplot.DivTitleRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.DivTitleRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}var ak=this.renderer;var aj=document.createElement("div");this._elem=L(aj);this._elem.addClass("jqplot-title");if(!this.text){this.show=false;this._elem.height(0);this._elem.width(0)}else{if(this.text){var ah;if(this.color){ah=this.color}else{if(this.textColor){ah=this.textColor}}var ai={position:"absolute",top:"0px",left:"0px"};if(this._plotWidth){ai.width=this._plotWidth+"px"}if(this.fontSize){ai.fontSize=this.fontSize}if(typeof this.textAlign==="string"){ai.textAlign=this.textAlign}else{ai.textAlign="center"}if(ah){ai.color=ah}if(this.paddingBottom){ai.paddingBottom=this.paddingBottom}if(this.fontFamily){ai.fontFamily=this.fontFamily}this._elem.css(ai);if(this.escapeHtml){this._elem.text(this.text)}else{this._elem.html(this.text)}}}aj=null;return this._elem};L.jqplot.DivTitleRenderer.prototype.pack=function(){};var r=0.1;L.jqplot.LinePattern=function(aw,aq){var ap={dotted:[r,L.jqplot.config.dotGapLength],dashed:[L.jqplot.config.dashLength,L.jqplot.config.gapLength],solid:null};if(typeof aq==="string"){if(aq[0]==="."||aq[0]==="-"){var ax=aq;aq=[];for(var ao=0,al=ax.length;ao<al;ao++){if(ax[ao]==="."){aq.push(r)}else{if(ax[ao]==="-"){aq.push(L.jqplot.config.dashLength)}else{continue}}aq.push(L.jqplot.config.gapLength)}}else{aq=ap[aq]}}if(!(aq&&aq.length)){return aw}var ak=0;var ar=aq[0];var au=0;var at=0;var an=0;var ah=0;var av=function(ay,az){aw.moveTo(ay,az);au=ay;at=az;an=ay;ah=az};var aj=function(ay,aE){var aC=aw.lineWidth;var aA=ay-au;var az=aE-at;var aB=Math.sqrt(aA*aA+az*az);if((aB>0)&&(aC>0)){aA/=aB;az/=aB;while(true){var aD=aC*ar;if(aD<aB){au+=aD*aA;at+=aD*az;if((ak&1)==0){aw.lineTo(au,at)}else{aw.moveTo(au,at)}aB-=aD;ak++;if(ak>=aq.length){ak=0}ar=aq[ak]}else{au=ay;at=aE;if((ak&1)==0){aw.lineTo(au,at)}else{aw.moveTo(au,at)}ar-=aB/aC;break}}}};var ai=function(){aw.beginPath()};var am=function(){aj(an,ah)};return{moveTo:av,lineTo:aj,beginPath:ai,closePath:am}};L.jqplot.LineRenderer=function(){this.shapeRenderer=new L.jqplot.ShapeRenderer();this.shadowRenderer=new L.jqplot.ShadowRenderer()};L.jqplot.LineRenderer.prototype.init=function(ai,an){ai=ai||{};this._type="line";this.renderer.animation={show:false,direction:"left",speed:2500,_supported:true};this.renderer.smooth=false;this.renderer.tension=null;this.renderer.constrainSmoothing=true;this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];this.renderer.bandData=[];this.renderer.bands={show:false,hiData:[],lowData:[],color:this.color,showLines:false,fill:true,fillColor:null,_min:null,_max:null,interval:"3%"};var al={highlightMouseOver:ai.highlightMouseOver,highlightMouseDown:ai.highlightMouseDown,highlightColor:ai.highlightColor};delete (ai.highlightMouseOver);delete (ai.highlightMouseDown);delete (ai.highlightColor);L.extend(true,this.renderer,ai);this.renderer.options=ai;if(this.renderer.bandData.length>1&&(!ai.bands||ai.bands.show==null)){this.renderer.bands.show=true}else{if(ai.bands&&ai.bands.show==null&&ai.bands.interval!=null){this.renderer.bands.show=true}}if(this.fill){this.renderer.bands.show=false}if(this.renderer.bands.show){this.renderer.initBands.call(this,this.renderer.options,an)}if(this._stack){this.renderer.smooth=false}var am={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.fillColor,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shapeRenderer.init(am);var aj=ai.shadowOffset;if(aj==null){if(this.lineWidth>2.5){aj=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{aj=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var ah={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,angle:this.shadowAngle,offset:aj,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shadowRenderer.init(ah);this._areaPoints=[];this._boundingBox=[[],[]];if(!this.isTrendline&&this.fill||this.renderer.bands.show){this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColor=null;if(al.highlightMouseDown&&al.highlightMouseOver==null){al.highlightMouseOver=false}L.extend(true,this,{highlightMouseOver:al.highlightMouseOver,highlightMouseDown:al.highlightMouseDown,highlightColor:al.highlightColor});if(!this.highlightColor){var ak=(this.renderer.bands.show)?this.renderer.bands.fillColor:this.fillColor;this.highlightColor=L.jqplot.computeHighlightColors(ak)}if(this.highlighter){this.highlighter.show=false}}if(!this.isTrendline&&an){an.plugins.lineRenderer={};an.postInitHooks.addOnce(z);an.postDrawHooks.addOnce(af);an.eventListenerHooks.addOnce("jqplotMouseMove",h);an.eventListenerHooks.addOnce("jqplotMouseDown",e);an.eventListenerHooks.addOnce("jqplotMouseUp",ad);an.eventListenerHooks.addOnce("jqplotClick",g);an.eventListenerHooks.addOnce("jqplotRightClick",s)}};L.jqplot.LineRenderer.prototype.initBands=function(ak,av){var al=ak.bandData||[];var an=this.renderer.bands;an.hiData=[];an.lowData=[];var aB=this.data;an._max=null;an._min=null;if(al.length==2){if(L.isArray(al[0][0])){var ao;var ah=0,ar=0;for(var aw=0,at=al[0].length;aw<at;aw++){ao=al[0][aw];if((ao[1]!=null&&ao[1]>an._max)||an._max==null){an._max=ao[1]}if((ao[1]!=null&&ao[1]<an._min)||an._min==null){an._min=ao[1]}}for(var aw=0,at=al[1].length;aw<at;aw++){ao=al[1][aw];if((ao[1]!=null&&ao[1]>an._max)||an._max==null){an._max=ao[1];ar=1}if((ao[1]!=null&&ao[1]<an._min)||an._min==null){an._min=ao[1];ah=1}}if(ar===ah){an.show=false}an.hiData=al[ar];an.lowData=al[ah]}else{if(al[0].length===aB.length&&al[1].length===aB.length){var aj=(al[0][0]>al[1][0])?0:1;var aC=(aj)?0:1;for(var aw=0,at=aB.length;aw<at;aw++){an.hiData.push([aB[aw][0],al[aj][aw]]);an.lowData.push([aB[aw][0],al[aC][aw]])}}else{an.show=false}}}else{if(al.length>2&&!L.isArray(al[0][0])){var aj=(al[0][0]>al[0][1])?0:1;var aC=(aj)?0:1;for(var aw=0,at=al.length;aw<at;aw++){an.hiData.push([aB[aw][0],al[aw][aj]]);an.lowData.push([aB[aw][0],al[aw][aC]])}}else{var aq=an.interval;var aA=null;var az=null;var ai=null;var au=null;if(L.isArray(aq)){aA=aq[0];az=aq[1]}else{aA=aq}if(isNaN(aA)){if(aA.charAt(aA.length-1)==="%"){ai="multiply";aA=parseFloat(aA)/100+1}}else{aA=parseFloat(aA);ai="add"}if(az!==null&&isNaN(az)){if(az.charAt(az.length-1)==="%"){au="multiply";az=parseFloat(az)/100+1}}else{if(az!==null){az=parseFloat(az);au="add"}}if(aA!==null){if(az===null){az=-aA;au=ai;if(au==="multiply"){az+=2}}if(aA<az){var ax=aA;aA=az;az=ax;ax=ai;ai=au;au=ax}for(var aw=0,at=aB.length;aw<at;aw++){switch(ai){case"add":an.hiData.push([aB[aw][0],aB[aw][1]+aA]);break;case"multiply":an.hiData.push([aB[aw][0],aB[aw][1]*aA]);break}switch(au){case"add":an.lowData.push([aB[aw][0],aB[aw][1]+az]);break;case"multiply":an.lowData.push([aB[aw][0],aB[aw][1]*az]);break}}}else{an.show=false}}}var am=an.hiData;var ap=an.lowData;for(var aw=0,at=am.length;aw<at;aw++){if((am[aw][1]!=null&&am[aw][1]>an._max)||an._max==null){an._max=am[aw][1]}}for(var aw=0,at=ap.length;aw<at;aw++){if((ap[aw][1]!=null&&ap[aw][1]<an._min)||an._min==null){an._min=ap[aw][1]}}if(an.fillColor===null){var ay=L.jqplot.getColorComponents(an.color);ay[3]=ay[3]*0.5;an.fillColor="rgba("+ay[0]+", "+ay[1]+", "+ay[2]+", "+ay[3]+")"}};function K(ai,ah){return(3.4182054+ah)*Math.pow(ai,-0.3534992)}function n(aj,ai){var ah=Math.sqrt(Math.pow((ai[0]-aj[0]),2)+Math.pow((ai[1]-aj[1]),2));return 5.7648*Math.log(ah)+7.4456}function A(ah){var ai=(Math.exp(2*ah)-1)/(Math.exp(2*ah)+1);return ai}function J(aJ){var at=this.renderer.smooth;var aD=this.canvas.getWidth();var an=this._xaxis.series_p2u;var aG=this._yaxis.series_p2u;var aF=null;var am=null;var az=aJ.length/aD;var aj=[];var ay=[];if(!isNaN(parseFloat(at))){aF=parseFloat(at)}else{aF=K(az,0.5)}var aw=[];var ak=[];for(var aE=0,aA=aJ.length;aE<aA;aE++){aw.push(aJ[aE][1]);ak.push(aJ[aE][0])}function av(aK,aL){if(aK-aL==0){return Math.pow(10,10)}else{return aK-aL}}var ax,ar,aq,ap;var ah=aJ.length-1;for(var al=1,aB=aJ.length;al<aB;al++){var ai=[];var au=[];for(var aC=0;aC<2;aC++){var aE=al-1+aC;if(aE==0||aE==ah){ai[aC]=Math.pow(10,10)}else{if(aw[aE+1]-aw[aE]==0||aw[aE]-aw[aE-1]==0){ai[aC]=0}else{if(((ak[aE+1]-ak[aE])/(aw[aE+1]-aw[aE])+(ak[aE]-ak[aE-1])/(aw[aE]-aw[aE-1]))==0){ai[aC]=0}else{if((aw[aE+1]-aw[aE])*(aw[aE]-aw[aE-1])<0){ai[aC]=0}else{ai[aC]=2/(av(ak[aE+1],ak[aE])/(aw[aE+1]-aw[aE])+av(ak[aE],ak[aE-1])/(aw[aE]-aw[aE-1]))}}}}}if(al==1){ai[0]=3/2*(aw[1]-aw[0])/av(ak[1],ak[0])-ai[1]/2}else{if(al==ah){ai[1]=3/2*(aw[ah]-aw[ah-1])/av(ak[ah],ak[ah-1])-ai[0]/2}}au[0]=-2*(ai[1]+2*ai[0])/av(ak[al],ak[al-1])+6*(aw[al]-aw[al-1])/Math.pow(av(ak[al],ak[al-1]),2);au[1]=2*(2*ai[1]+ai[0])/av(ak[al],ak[al-1])-6*(aw[al]-aw[al-1])/Math.pow(av(ak[al],ak[al-1]),2);ap=1/6*(au[1]-au[0])/av(ak[al],ak[al-1]);aq=1/2*(ak[al]*au[0]-ak[al-1]*au[1])/av(ak[al],ak[al-1]);ar=(aw[al]-aw[al-1]-aq*(Math.pow(ak[al],2)-Math.pow(ak[al-1],2))-ap*(Math.pow(ak[al],3)-Math.pow(ak[al-1],3)))/av(ak[al],ak[al-1]);ax=aw[al-1]-ar*ak[al-1]-aq*Math.pow(ak[al-1],2)-ap*Math.pow(ak[al-1],3);var aI=(ak[al]-ak[al-1])/aF;var aH,ao;for(var aC=0,aA=aF;aC<aA;aC++){aH=[];ao=ak[al-1]+aC*aI;aH.push(ao);aH.push(ax+ar*ao+aq*Math.pow(ao,2)+ap*Math.pow(ao,3));aj.push(aH);ay.push([an(aH[0]),aG(aH[1])])}}aj.push(aJ[aE]);ay.push([an(aJ[aE][0]),aG(aJ[aE][1])]);return[aj,ay]}function F(ap){var ao=this.renderer.smooth;var aU=this.renderer.tension;var ah=this.canvas.getWidth();var aH=this._xaxis.series_p2u;var aq=this._yaxis.series_p2u;var aI=null;var aJ=null;var aT=null;var aO=null;var aM=null;var at=null;var aR=null;var am=null;var aK,aL,aD,aC,aA,ay;var ak,ai,av,au;var aB,az,aN;var aw=[];var aj=[];var al=ap.length/ah;var aS,ax,aF,aG,aE;var ar=[];var an=[];if(!isNaN(parseFloat(ao))){aI=parseFloat(ao)}else{aI=K(al,0.5)}if(!isNaN(parseFloat(aU))){aU=parseFloat(aU)}for(var aQ=0,aP=ap.length-1;aQ<aP;aQ++){if(aU===null){at=Math.abs((ap[aQ+1][1]-ap[aQ][1])/(ap[aQ+1][0]-ap[aQ][0]));aS=0.3;ax=0.6;aF=(ax-aS)/2;aG=2.5;aE=-1.4;am=at/aG+aE;aO=aF*A(am)-aF*A(aE)+aS;if(aQ>0){aR=Math.abs((ap[aQ][1]-ap[aQ-1][1])/(ap[aQ][0]-ap[aQ-1][0]))}am=aR/aG+aE;aM=aF*A(am)-aF*A(aE)+aS;aT=(aO+aM)/2}else{aT=aU}for(aK=0;aK<aI;aK++){aL=aK/aI;aD=(1+2*aL)*Math.pow((1-aL),2);aC=aL*Math.pow((1-aL),2);aA=Math.pow(aL,2)*(3-2*aL);ay=Math.pow(aL,2)*(aL-1);if(ap[aQ-1]){ak=aT*(ap[aQ+1][0]-ap[aQ-1][0]);ai=aT*(ap[aQ+1][1]-ap[aQ-1][1])}else{ak=aT*(ap[aQ+1][0]-ap[aQ][0]);ai=aT*(ap[aQ+1][1]-ap[aQ][1])}if(ap[aQ+2]){av=aT*(ap[aQ+2][0]-ap[aQ][0]);au=aT*(ap[aQ+2][1]-ap[aQ][1])}else{av=aT*(ap[aQ+1][0]-ap[aQ][0]);au=aT*(ap[aQ+1][1]-ap[aQ][1])}aB=aD*ap[aQ][0]+aA*ap[aQ+1][0]+aC*ak+ay*av;az=aD*ap[aQ][1]+aA*ap[aQ+1][1]+aC*ai+ay*au;aN=[aB,az];ar.push(aN);an.push([aH(aB),aq(az)])}}ar.push(ap[aP]);an.push([aH(ap[aP][0]),aq(ap[aP][1])]);return[ar,an]}L.jqplot.LineRenderer.prototype.setGridData=function(ap){var al=this._xaxis.series_u2p;var ah=this._yaxis.series_u2p;var am=this._plotData;var aq=this._prevPlotData;this.gridData=[];this._prevGridData=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var ak=this.renderer.bands;var ai=false;for(var an=0,aj=am.length;an<aj;an++){if(am[an][0]!=null&&am[an][1]!=null){this.gridData.push([al.call(this._xaxis,am[an][0]),ah.call(this._yaxis,am[an][1])])}else{if(am[an][0]==null){ai=true;this.gridData.push([null,ah.call(this._yaxis,am[an][1])])}else{if(am[an][1]==null){ai=true;this.gridData.push([al.call(this._xaxis,am[an][0]),null])}}}if(aq[an]!=null&&aq[an][0]!=null&&aq[an][1]!=null){this._prevGridData.push([al.call(this._xaxis,aq[an][0]),ah.call(this._yaxis,aq[an][1])])}else{if(aq[an]!=null&&aq[an][0]==null){this._prevGridData.push([null,ah.call(this._yaxis,aq[an][1])])}else{if(aq[an]!=null&&aq[an][0]!=null&&aq[an][1]==null){this._prevGridData.push([al.call(this._xaxis,aq[an][0]),null])}}}}if(ai){this.renderer.smooth=false;if(this._type==="line"){ak.show=false}}if(this._type==="line"&&ak.show){for(var an=0,aj=ak.hiData.length;an<aj;an++){this.renderer._hiBandGridData.push([al.call(this._xaxis,ak.hiData[an][0]),ah.call(this._yaxis,ak.hiData[an][1])])}for(var an=0,aj=ak.lowData.length;an<aj;an++){this.renderer._lowBandGridData.push([al.call(this._xaxis,ak.lowData[an][0]),ah.call(this._yaxis,ak.lowData[an][1])])}}if(this._type==="line"&&this.renderer.smooth&&this.gridData.length>2){var ao;if(this.renderer.constrainSmoothing){ao=J.call(this,this.gridData);this.renderer._smoothedData=ao[0];this.renderer._smoothedPlotData=ao[1];if(ak.show){ao=J.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ao[0];ao=J.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ao[0]}ao=null}else{ao=F.call(this,this.gridData);this.renderer._smoothedData=ao[0];this.renderer._smoothedPlotData=ao[1];if(ak.show){ao=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ao[0];ao=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ao[0]}ao=null}}};L.jqplot.LineRenderer.prototype.makeGridData=function(ao,aq){var am=this._xaxis.series_u2p;var ah=this._yaxis.series_u2p;var ar=[];var aj=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var al=this.renderer.bands;var ai=false;for(var an=0;an<ao.length;an++){if(ao[an][0]!=null&&ao[an][1]!=null){ar.push([am.call(this._xaxis,ao[an][0]),ah.call(this._yaxis,ao[an][1])])}else{if(ao[an][0]==null){ai=true;ar.push([null,ah.call(this._yaxis,ao[an][1])])}else{if(ao[an][1]==null){ai=true;ar.push([am.call(this._xaxis,ao[an][0]),null])}}}}if(ai){this.renderer.smooth=false;if(this._type==="line"){al.show=false}}if(this._type==="line"&&al.show){for(var an=0,ak=al.hiData.length;an<ak;an++){this.renderer._hiBandGridData.push([am.call(this._xaxis,al.hiData[an][0]),ah.call(this._yaxis,al.hiData[an][1])])}for(var an=0,ak=al.lowData.length;an<ak;an++){this.renderer._lowBandGridData.push([am.call(this._xaxis,al.lowData[an][0]),ah.call(this._yaxis,al.lowData[an][1])])}}if(this._type==="line"&&this.renderer.smooth&&ar.length>2){var ap;if(this.renderer.constrainSmoothing){ap=J.call(this,ar);this.renderer._smoothedData=ap[0];this.renderer._smoothedPlotData=ap[1];if(al.show){ap=J.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ap[0];ap=J.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ap[0]}ap=null}else{ap=F.call(this,ar);this.renderer._smoothedData=ap[0];this.renderer._smoothedPlotData=ap[1];if(al.show){ap=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ap[0];ap=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ap[0]}ap=null}}return ar};L.jqplot.LineRenderer.prototype.draw=function(ax,aI,ai,aB){var aC;var aq=L.extend(true,{},ai);var ak=(aq.shadow!=u)?aq.shadow:this.shadow;var aJ=(aq.showLine!=u)?aq.showLine:this.showLine;var aA=(aq.fill!=u)?aq.fill:this.fill;var ah=(aq.fillAndStroke!=u)?aq.fillAndStroke:this.fillAndStroke;var ar,ay,av,aE;ax.save();if(aI.length){if(aJ){if(aA){if(this.fillToZero){var aF=this.negativeColor;if(!this.useNegativeColors){aF=aq.fillStyle}var ao=false;var ap=aq.fillStyle;if(ah){var aH=aI.slice(0)}if(this.index==0||!this._stack){var aw=[];var aL=(this.renderer.smooth)?this.renderer._smoothedPlotData:this._plotData;this._areaPoints=[];var aG=this._yaxis.series_u2p(this.fillToValue);var aj=this._xaxis.series_u2p(this.fillToValue);aq.closePath=true;if(this.fillAxis=="y"){aw.push([aI[0][0],aG]);this._areaPoints.push([aI[0][0],aG]);for(var aC=0;aC<aI.length-1;aC++){aw.push(aI[aC]);this._areaPoints.push(aI[aC]);if(aL[aC][1]*aL[aC+1][1]<=0){if(aL[aC][1]<0){ao=true;aq.fillStyle=aF}else{ao=false;aq.fillStyle=ap}var an=aI[aC][0]+(aI[aC+1][0]-aI[aC][0])*(aG-aI[aC][1])/(aI[aC+1][1]-aI[aC][1]);aw.push([an,aG]);this._areaPoints.push([an,aG]);if(ak){this.renderer.shadowRenderer.draw(ax,aw,aq)}this.renderer.shapeRenderer.draw(ax,aw,aq);aw=[[an,aG]]}}if(aL[aI.length-1][1]<0){ao=true;aq.fillStyle=aF}else{ao=false;aq.fillStyle=ap}aw.push(aI[aI.length-1]);this._areaPoints.push(aI[aI.length-1]);aw.push([aI[aI.length-1][0],aG]);this._areaPoints.push([aI[aI.length-1][0],aG])}if(ak){this.renderer.shadowRenderer.draw(ax,aw,aq)}this.renderer.shapeRenderer.draw(ax,aw,aq)}else{var au=this._prevGridData;for(var aC=au.length;aC>0;aC--){aI.push(au[aC-1])}if(ak){this.renderer.shadowRenderer.draw(ax,aI,aq)}this._areaPoints=aI;this.renderer.shapeRenderer.draw(ax,aI,aq)}}else{if(ah){var aH=aI.slice(0)}if(this.index==0||!this._stack){var al=ax.canvas.height;aI.unshift([aI[0][0],al]);var aD=aI.length;aI.push([aI[aD-1][0],al])}else{var au=this._prevGridData;for(var aC=au.length;aC>0;aC--){aI.push(au[aC-1])}}this._areaPoints=aI;if(ak){this.renderer.shadowRenderer.draw(ax,aI,aq)}this.renderer.shapeRenderer.draw(ax,aI,aq)}if(ah){var az=L.extend(true,{},aq,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(ax,aH,az);if(this.markerRenderer.show){if(this.renderer.smooth){aH=this.gridData}for(aC=0;aC<aH.length;aC++){this.markerRenderer.draw(aH[aC][0],aH[aC][1],ax,aq.markerOptions)}}}}else{if(this.renderer.bands.show){var am;var aK=L.extend(true,{},aq);if(this.renderer.bands.showLines){am=(this.renderer.smooth)?this.renderer._hiBandSmoothedData:this.renderer._hiBandGridData;this.renderer.shapeRenderer.draw(ax,am,aq);am=(this.renderer.smooth)?this.renderer._lowBandSmoothedData:this.renderer._lowBandGridData;this.renderer.shapeRenderer.draw(ax,am,aK)}if(this.renderer.bands.fill){if(this.renderer.smooth){am=this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse())}else{am=this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse())}this._areaPoints=am;aK.closePath=true;aK.fill=true;aK.fillStyle=this.renderer.bands.fillColor;this.renderer.shapeRenderer.draw(ax,am,aK)}}if(ak){this.renderer.shadowRenderer.draw(ax,aI,aq)}this.renderer.shapeRenderer.draw(ax,aI,aq)}}var ar=av=ay=aE=null;for(aC=0;aC<this._areaPoints.length;aC++){var at=this._areaPoints[aC];if(ar>at[0]||ar==null){ar=at[0]}if(aE<at[1]||aE==null){aE=at[1]}if(av<at[0]||av==null){av=at[0]}if(ay>at[1]||ay==null){ay=at[1]}}if(this.type==="line"&&this.renderer.bands.show){aE=this._yaxis.series_u2p(this.renderer.bands._min);ay=this._yaxis.series_u2p(this.renderer.bands._max)}this._boundingBox=[[ar,aE],[av,ay]];if(this.markerRenderer.show&&!aA){if(this.renderer.smooth){aI=this.gridData}for(aC=0;aC<aI.length;aC++){if(aI[aC][0]!=null&&aI[aC][1]!=null){this.markerRenderer.draw(aI[aC][0],aI[aC][1],ax,aq.markerOptions)}}}}ax.restore()};L.jqplot.LineRenderer.prototype.drawShadow=function(ah,aj,ai){};function z(ak,aj,ah){for(var ai=0;ai<this.series.length;ai++){if(this.series[ai].renderer.constructor==L.jqplot.LineRenderer){if(this.series[ai].highlightMouseOver){this.series[ai].highlightMouseDown=false}}}}function af(){if(this.plugins.lineRenderer&&this.plugins.lineRenderer.highlightCanvas){this.plugins.lineRenderer.highlightCanvas.resetCanvas();this.plugins.lineRenderer.highlightCanvas=null}this.plugins.lineRenderer.highlightedSeriesIndex=null;this.plugins.lineRenderer.highlightCanvas=new L.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-lineRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.lineRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(ah){aa(ah.data.plot)})}function ac(an,am,ak,aj){var ai=an.series[am];var ah=an.plugins.lineRenderer.highlightCanvas;ah._ctx.clearRect(0,0,ah._ctx.canvas.width,ah._ctx.canvas.height);ai._highlightedPoint=ak;an.plugins.lineRenderer.highlightedSeriesIndex=am;var al={fillStyle:ai.highlightColor};if(ai.type==="line"&&ai.renderer.bands.show){al.fill=true;al.closePath=true}ai.renderer.shapeRenderer.draw(ah._ctx,aj,al);ah=null}function aa(aj){var ah=aj.plugins.lineRenderer.highlightCanvas;ah._ctx.clearRect(0,0,ah._ctx.canvas.width,ah._ctx.canvas.height);for(var ai=0;ai<aj.series.length;ai++){aj.series[ai]._highlightedPoint=null}aj.plugins.lineRenderer.highlightedSeriesIndex=null;aj.target.trigger("jqplotDataUnhighlight");ah=null}function h(al,ak,ao,an,am){if(an){var aj=[an.seriesIndex,an.pointIndex,an.data];var ai=jQuery.Event("jqplotDataMouseOver");ai.pageX=al.pageX;ai.pageY=al.pageY;am.target.trigger(ai,aj);if(am.series[aj[0]].highlightMouseOver&&!(aj[0]==am.plugins.lineRenderer.highlightedSeriesIndex)){var ah=jQuery.Event("jqplotDataHighlight");ah.which=al.which;ah.pageX=al.pageX;ah.pageY=al.pageY;am.target.trigger(ah,aj);ac(am,an.seriesIndex,an.pointIndex,an.points)}}else{if(an==null){aa(am)}}}function e(ak,aj,an,am,al){if(am){var ai=[am.seriesIndex,am.pointIndex,am.data];if(al.series[ai[0]].highlightMouseDown&&!(ai[0]==al.plugins.lineRenderer.highlightedSeriesIndex)){var ah=jQuery.Event("jqplotDataHighlight");ah.which=ak.which;ah.pageX=ak.pageX;ah.pageY=ak.pageY;al.target.trigger(ah,ai);ac(al,am.seriesIndex,am.pointIndex,am.points)}}else{if(am==null){aa(al)}}}function ad(aj,ai,am,al,ak){var ah=ak.plugins.lineRenderer.highlightedSeriesIndex;if(ah!=null&&ak.series[ah].highlightMouseDown){aa(ak)}}function g(ak,aj,an,am,al){if(am){var ai=[am.seriesIndex,am.pointIndex,am.data];var ah=jQuery.Event("jqplotDataClick");ah.which=ak.which;ah.pageX=ak.pageX;ah.pageY=ak.pageY;al.target.trigger(ah,ai)}}function s(al,ak,ao,an,am){if(an){var aj=[an.seriesIndex,an.pointIndex,an.data];var ah=am.plugins.lineRenderer.highlightedSeriesIndex;if(ah!=null&&am.series[ah].highlightMouseDown){aa(am)}var ai=jQuery.Event("jqplotDataRightClick");ai.which=al.which;ai.pageX=al.pageX;ai.pageY=al.pageY;am.target.trigger(ai,aj)}}L.jqplot.LinearAxisRenderer=function(){};L.jqplot.LinearAxisRenderer.prototype.init=function(ah){this.breakPoints=null;this.breakTickLabel="&asymp;";this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.forceTickAt0=false;this.forceTickAt100=false;this.tickInset=0;this.minorTicks=0;this.alignTicks=false;this._autoFormatString="";this._overrideFormatString=false;this._scalefact=1;L.extend(true,this,ah);if(this.breakPoints){if(!L.isArray(this.breakPoints)){this.breakPoints=null}else{if(this.breakPoints.length<2||this.breakPoints[1]<=this.breakPoints[0]){this.breakPoints=null}}}if(this.numberTicks!=null&&this.numberTicks<2){this.numberTicks=2}this.resetDataBounds()};L.jqplot.LinearAxisRenderer.prototype.draw=function(ah,ao){if(this.show){this.renderer.createTicks.call(this,ao);var an=0;var ai;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=L(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var am=this._label.draw(ah,ao);am.appendTo(this._elem);am=null}var al=this._ticks;var ak;for(var aj=0;aj<al.length;aj++){ak=al[aj];if(ak.show&&ak.showLabel&&(!ak.isMinorTick||this.showMinorTicks)){this._elem.append(ak.draw(ah,ao))}}ak=null;al=null}return this._elem};L.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}};L.jqplot.LinearAxisRenderer.prototype.set=function(){var ao=0;var aj;var ai=0;var an=0;var ah=(this._label==null)?false:this._label.show;if(this.show){var am=this._ticks;var al;for(var ak=0;ak<am.length;ak++){al=am[ak];if(!al._breakTick&&al.show&&al.showLabel&&(!al.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){aj=al._elem.outerHeight(true)}else{aj=al._elem.outerWidth(true)}if(aj>ao){ao=aj}}}al=null;am=null;if(ah){ai=this._label._elem.outerWidth(true);an=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){ao=ao+an;this._elem.css({height:ao+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){ao=ao+an;this._elem.css({height:ao+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){ao=ao+ai;this._elem.css({width:ao+"px",left:"0px",top:"0px"});if(ah&&this._label.constructor==L.jqplot.AxisLabelRenderer){this._label._elem.css("width",ai+"px")}}else{ao=ao+ai;this._elem.css({width:ao+"px",right:"0px",top:"0px"});if(ah&&this._label.constructor==L.jqplot.AxisLabelRenderer){this._label._elem.css("width",ai+"px")}}}}}};L.jqplot.LinearAxisRenderer.prototype.createTicks=function(aj){var aT=this._ticks;var aK=this.ticks;var az=this.name;var aB=this._dataBounds;var ah=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var an;var a6,aI;var ap,ao;var a4,a0;var aH=this.min;var a5=this.max;var aW=this.numberTicks;var ba=this.tickInterval;var am=30;this._scalefact=(Math.max(ah,am+1)-am)/300;if(aK.length){for(a0=0;a0<aK.length;a0++){var aO=aK[a0];var aU=new this.tickRenderer(this.tickOptions);if(L.isArray(aO)){aU.value=aO[0];if(this.breakPoints){if(aO[0]==this.breakPoints[0]){aU.label=this.breakTickLabel;aU._breakTick=true;aU.showGridline=false;aU.showMark=false}else{if(aO[0]>this.breakPoints[0]&&aO[0]<=this.breakPoints[1]){aU.show=false;aU.showGridline=false;aU.label=aO[1]}else{aU.label=aO[1]}}}else{aU.label=aO[1]}aU.setTick(aO[0],this.name);this._ticks.push(aU)}else{if(L.isPlainObject(aO)){L.extend(true,aU,aO);aU.axis=this.name;this._ticks.push(aU)}else{aU.value=aO;if(this.breakPoints){if(aO==this.breakPoints[0]){aU.label=this.breakTickLabel;aU._breakTick=true;aU.showGridline=false;aU.showMark=false}else{if(aO>this.breakPoints[0]&&aO<=this.breakPoints[1]){aU.show=false;aU.showGridline=false}}}aU.setTick(aO,this.name);this._ticks.push(aU)}}}this.numberTicks=aK.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(az=="xaxis"||az=="x2axis"){ah=this._plotDimensions.width}else{ah=this._plotDimensions.height}var ax=this.numberTicks;if(this.alignTicks){if(this.name==="x2axis"&&aj.axes.xaxis.show){ax=aj.axes.xaxis.numberTicks}else{if(this.name.charAt(0)==="y"&&this.name!=="yaxis"&&this.name!=="yMidAxis"&&aj.axes.yaxis.show){ax=aj.axes.yaxis.numberTicks}}}a6=((this.min!=null)?this.min:aB.min);aI=((this.max!=null)?this.max:aB.max);var av=aI-a6;var aS,ay;var at;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}if(this.min==null||this.max==null&&this.tickInterval==null&&!this.autoscale){if(this.forceTickAt0){if(a6>0){a6=0}if(aI<0){aI=0}}if(this.forceTickAt100){if(a6>100){a6=100}if(aI<100){aI=100}}var aE=false,a1=false;if(this.min!=null){aE=true}else{if(this.max!=null){a1=true}}var aP=L.jqplot.LinearTickGenerator(a6,aI,this._scalefact,ax,aE,a1);var aw=(this.min!=null)?a6:a6+av*(this.padMin-1);var aQ=(this.max!=null)?aI:aI-av*(this.padMax-1);if(a6<aw||aI>aQ){aw=(this.min!=null)?a6:a6-av*(this.padMin-1);aQ=(this.max!=null)?aI:aI+av*(this.padMax-1);aP=L.jqplot.LinearTickGenerator(aw,aQ,this._scalefact,ax,aE,a1)}this.min=aP[0];this.max=aP[1];this.numberTicks=aP[2];this._autoFormatString=aP[3];this.tickInterval=aP[4]}else{if(a6==aI){var ai=0.05;if(a6>0){ai=Math.max(Math.log(a6)/Math.LN10,0.05)}a6-=ai;aI+=ai}if(this.autoscale&&this.min==null&&this.max==null){var ak,al,ar;var aC=false;var aN=false;var aA={min:null,max:null,average:null,stddev:null};for(var a0=0;a0<this._series.length;a0++){var aV=this._series[a0];var aD=(aV.fillAxis=="x")?aV._xaxis.name:aV._yaxis.name;if(this.name==aD){var aR=aV._plotValues[aV.fillAxis];var aG=aR[0];var a2=aR[0];for(var aZ=1;aZ<aR.length;aZ++){if(aR[aZ]<aG){aG=aR[aZ]}else{if(aR[aZ]>a2){a2=aR[aZ]}}}var au=(a2-aG)/a2;if(aV.renderer.constructor==L.jqplot.BarRenderer){if(aG>=0&&(aV.fillToZero||au>0.1)){aC=true}else{aC=false;if(aV.fill&&aV.fillToZero&&aG<0&&a2>0){aN=true}else{aN=false}}}else{if(aV.fill){if(aG>=0&&(aV.fillToZero||au>0.1)){aC=true}else{if(aG<0&&a2>0&&aV.fillToZero){aC=false;aN=true}else{aC=false;aN=false}}}else{if(aG<0){aC=false}}}}}if(aC){this.numberTicks=2+Math.ceil((ah-(this.tickSpacing-1))/this.tickSpacing);this.min=0;aH=0;al=aI/(this.numberTicks-1);at=Math.pow(10,Math.abs(Math.floor(Math.log(al)/Math.LN10)));if(al/at==parseInt(al/at,10)){al+=at}this.tickInterval=Math.ceil(al/at)*at;this.max=this.tickInterval*(this.numberTicks-1)}else{if(aN){this.numberTicks=2+Math.ceil((ah-(this.tickSpacing-1))/this.tickSpacing);var aJ=Math.ceil(Math.abs(a6)/av*(this.numberTicks-1));var a9=this.numberTicks-1-aJ;al=Math.max(Math.abs(a6/aJ),Math.abs(aI/a9));at=Math.pow(10,Math.abs(Math.floor(Math.log(al)/Math.LN10)));this.tickInterval=Math.ceil(al/at)*at;this.max=this.tickInterval*a9;this.min=-this.tickInterval*aJ}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(av/this.tickInterval)}else{this.numberTicks=2+Math.ceil((ah-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){al=av/(this.numberTicks-1);if(al<1){at=Math.pow(10,Math.abs(Math.floor(Math.log(al)/Math.LN10)))}else{at=1}this.tickInterval=Math.ceil(al*at*this.pad)/at}else{at=1/this.tickInterval}ak=this.tickInterval*(this.numberTicks-1);ar=(ak-av)/2;if(this.min==null){this.min=Math.floor(at*(a6-ar))/at}if(this.max==null){this.max=this.min+ak}}}var aF=L.jqplot.getSignificantFigures(this.tickInterval);var aM;if(aF.digitsLeft>=aF.significantDigits){aM="%d"}else{var at=Math.max(0,5-aF.digitsLeft);at=Math.min(at,aF.digitsRight);aM="%."+at+"f"}this._autoFormatString=aM}else{aS=(this.min!=null)?this.min:a6-av*(this.padMin-1);ay=(this.max!=null)?this.max:aI+av*(this.padMax-1);av=ay-aS;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((ay-aS)/this.tickInterval)+1}else{if(ah>100){this.numberTicks=parseInt(3+(ah-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=av/(this.numberTicks-1)}if(this.max==null){ay=aS+this.tickInterval*(this.numberTicks-1)}if(this.min==null){aS=ay-this.tickInterval*(this.numberTicks-1)}var aF=L.jqplot.getSignificantFigures(this.tickInterval);var aM;if(aF.digitsLeft>=aF.significantDigits){aM="%d"}else{var at=Math.max(0,5-aF.digitsLeft);at=Math.min(at,aF.digitsRight);aM="%."+at+"f"}this._autoFormatString=aM;this.min=aS;this.max=ay}if(this.renderer.constructor==L.jqplot.LinearAxisRenderer&&this._autoFormatString==""){av=this.max-this.min;var a7=new this.tickRenderer(this.tickOptions);var aL=a7.formatString||L.jqplot.config.defaultTickFormatString;var aL=aL.match(L.jqplot.sprintf.regex)[0];var a3=0;if(aL){if(aL.search(/[fFeEgGpP]/)>-1){var aY=aL.match(/\%\.(\d{0,})?[eEfFgGpP]/);if(aY){a3=parseInt(aY[1],10)}else{a3=6}}else{if(aL.search(/[di]/)>-1){a3=0}}var aq=Math.pow(10,-a3);if(this.tickInterval<aq){if(aW==null&&ba==null){this.tickInterval=aq;if(a5==null&&aH==null){this.min=Math.floor(this._dataBounds.min/aq)*aq;if(this.min==this._dataBounds.min){this.min=this._dataBounds.min-this.tickInterval}this.max=Math.ceil(this._dataBounds.max/aq)*aq;if(this.max==this._dataBounds.max){this.max=this._dataBounds.max+this.tickInterval}var aX=(this.max-this.min)/this.tickInterval;aX=aX.toFixed(11);aX=Math.ceil(aX);this.numberTicks=aX+1}else{if(a5==null){var aX=(this._dataBounds.max-this.min)/this.tickInterval;aX=aX.toFixed(11);this.numberTicks=Math.ceil(aX)+2;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(aH==null){var aX=(this.max-this._dataBounds.min)/this.tickInterval;aX=aX.toFixed(11);this.numberTicks=Math.ceil(aX)+2;this.min=this.max-this.tickInterval*(this.numberTicks-1)}else{this.numberTicks=Math.ceil((a5-aH)/this.tickInterval)+1;this.min=Math.floor(aH*Math.pow(10,a3))/Math.pow(10,a3);this.max=Math.ceil(a5*Math.pow(10,a3))/Math.pow(10,a3);this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1}}}}}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var aU,a8;for(var a0=0;a0<this.numberTicks;a0++){a4=this.min+a0*this.tickInterval;aU=new this.tickRenderer(this.tickOptions);aU.setTick(a4,this.name);this._ticks.push(aU);if(a0<this.numberTicks-1){for(var aZ=0;aZ<this.minorTicks;aZ++){a4+=this.tickInterval/(this.minorTicks+1);a8=L.extend(true,{},this.tickOptions,{name:this.name,value:a4,label:"",isMinorTick:true});aU=new this.tickRenderer(a8);this._ticks.push(aU)}}aU=null}}if(this.tickInset){this.min=this.min-this.tickInset*this.tickInterval;this.max=this.max+this.tickInset*this.tickInterval}aT=null};L.jqplot.LinearAxisRenderer.prototype.resetTickValues=function(aj){if(L.isArray(aj)&&aj.length==this._ticks.length){var ai;for(var ah=0;ah<aj.length;ah++){ai=this._ticks[ah];ai.value=aj[ah];ai.label=ai.formatter(ai.formatString,aj[ah]);ai.label=ai.prefix+ai.label;ai._elem.html(ai.label)}ai=null;this.min=L.jqplot.arrayMin(aj);this.max=L.jqplot.arrayMax(aj);this.pack()}};L.jqplot.LinearAxisRenderer.prototype.pack=function(aj,ai){aj=aj||{};ai=ai||this._offsets;var ay=this._ticks;var au=this.max;var at=this.min;var ao=ai.max;var am=ai.min;var aq=(this._label==null)?false:this._label.show;for(var ar in aj){this._elem.css(ar,aj[ar])}this._offsets=ai;var ak=ao-am;var al=au-at;if(this.breakPoints){al=al-this.breakPoints[1]+this.breakPoints[0];this.p2u=function(aA){return(aA-am)*al/ak+at};this.u2p=function(aA){if(aA>this.breakPoints[0]&&aA<this.breakPoints[1]){aA=this.breakPoints[0]}if(aA<=this.breakPoints[0]){return(aA-at)*ak/al+am}else{return(aA-this.breakPoints[1]+this.breakPoints[0]-at)*ak/al+am}};if(this.name.charAt(0)=="x"){this.series_u2p=function(aA){if(aA>this.breakPoints[0]&&aA<this.breakPoints[1]){aA=this.breakPoints[0]}if(aA<=this.breakPoints[0]){return(aA-at)*ak/al}else{return(aA-this.breakPoints[1]+this.breakPoints[0]-at)*ak/al}};this.series_p2u=function(aA){return aA*al/ak+at}}else{this.series_u2p=function(aA){if(aA>this.breakPoints[0]&&aA<this.breakPoints[1]){aA=this.breakPoints[0]}if(aA>=this.breakPoints[1]){return(aA-au)*ak/al}else{return(aA+this.breakPoints[1]-this.breakPoints[0]-au)*ak/al}};this.series_p2u=function(aA){return aA*al/ak+au}}}else{this.p2u=function(aA){return(aA-am)*al/ak+at};this.u2p=function(aA){return(aA-at)*ak/al+am};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(aA){return(aA-at)*ak/al};this.series_p2u=function(aA){return aA*al/ak+at}}else{this.series_u2p=function(aA){return(aA-au)*ak/al};this.series_p2u=function(aA){return aA*al/ak+au}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var av=0;av<ay.length;av++){var ap=ay[av];if(ap.show&&ap.showLabel){var ah;if(ap.constructor==L.jqplot.CanvasAxisTickRenderer&&ap.angle){var ax=(this.name=="xaxis")?1:-1;switch(ap.labelPosition){case"auto":if(ax*ap.angle<0){ah=-ap.getWidth()+ap._textRenderer.height*Math.sin(-ap._textRenderer.angle)/2}else{ah=-ap._textRenderer.height*Math.sin(ap._textRenderer.angle)/2}break;case"end":ah=-ap.getWidth()+ap._textRenderer.height*Math.sin(-ap._textRenderer.angle)/2;break;case"start":ah=-ap._textRenderer.height*Math.sin(ap._textRenderer.angle)/2;break;case"middle":ah=-ap.getWidth()/2+ap._textRenderer.height*Math.sin(-ap._textRenderer.angle)/2;break;default:ah=-ap.getWidth()/2+ap._textRenderer.height*Math.sin(-ap._textRenderer.angle)/2;break}}else{ah=-ap.getWidth()/2}var az=this.u2p(ap.value)+ah+"px";ap._elem.css("left",az);ap.pack()}}if(aq){var an=this._label._elem.outerWidth(true);this._label._elem.css("left",am+ak/2-an/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var av=0;av<ay.length;av++){var ap=ay[av];if(ap.show&&ap.showLabel){var ah;if(ap.constructor==L.jqplot.CanvasAxisTickRenderer&&ap.angle){var ax=(this.name=="yaxis")?1:-1;switch(ap.labelPosition){case"auto":case"end":if(ax*ap.angle<0){ah=-ap._textRenderer.height*Math.cos(-ap._textRenderer.angle)/2}else{ah=-ap.getHeight()+ap._textRenderer.height*Math.cos(ap._textRenderer.angle)/2}break;case"start":if(ap.angle>0){ah=-ap._textRenderer.height*Math.cos(-ap._textRenderer.angle)/2}else{ah=-ap.getHeight()+ap._textRenderer.height*Math.cos(ap._textRenderer.angle)/2}break;case"middle":ah=-ap.getHeight()/2;break;default:ah=-ap.getHeight()/2;break}}else{ah=-ap.getHeight()/2}var az=this.u2p(ap.value)+ah+"px";ap._elem.css("top",az);ap.pack()}}if(aq){var aw=this._label._elem.outerHeight(true);this._label._elem.css("top",ao-ak/2-aw/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}ay=null};function i(ai){var ah;ai=Math.abs(ai);if(ai>=10){ah="%d"}else{if(ai>1){if(ai===parseInt(ai,10)){ah="%d"}else{ah="%.1f"}}else{var aj=-Math.floor(Math.log(ai)/Math.LN10);ah="%."+aj+"f"}}return ah}var b=[0.1,0.2,0.3,0.4,0.5,0.8,1,2,3,4,5];var c=function(ai){var ah=b.indexOf(ai);if(ah>0){return b[ah-1]}else{return b[b.length-1]/100}};var k=function(ai){var ah=b.indexOf(ai);if(ah<b.length-1){return b[ah+1]}else{return b[0]*100}};function d(al,au,at){var aq=Math.floor(at/2);var ai=Math.ceil(at*1.5);var ak=Number.MAX_VALUE;var ah=(au-al);var ax;var ap;var ar;var ay=L.jqplot.getSignificantFigures;var aw;var an;var ao;var av;for(var am=0,aj=ai-aq+1;am<aj;am++){ao=aq+am;ax=ah/(ao-1);ap=ay(ax);ax=Math.abs(at-ao)+ap.digitsRight;if(ax<ak){ak=ax;ar=ao;av=ap.digitsRight}else{if(ax===ak){if(ap.digitsRight<av){ar=ao;av=ap.digitsRight}}}}aw=Math.max(av,Math.max(ay(al).digitsRight,ay(au).digitsRight));if(aw===0){an="%d"}else{an="%."+aw+"f"}ax=ah/(ar-1);return[al,au,ar,an,ax]}function W(ai,al){al=al||7;var ak=ai/(al-1);var aj=Math.pow(10,Math.floor(Math.log(ak)/Math.LN10));var am=ak/aj;var ah;if(aj<1){if(am>5){ah=10*aj}else{if(am>2){ah=5*aj}else{if(am>1){ah=2*aj}else{ah=aj}}}}else{if(am>5){ah=10*aj}else{if(am>4){ah=5*aj}else{if(am>3){ah=4*aj}else{if(am>2){ah=3*aj}else{if(am>1){ah=2*aj}else{ah=aj}}}}}}return ah}function Q(ai,ah){ah=ah||1;var ak=Math.floor(Math.log(ai)/Math.LN10);var am=Math.pow(10,ak);var al=ai/am;var aj;al=al/ah;if(al<=0.38){aj=0.1}else{if(al<=1.6){aj=0.2}else{if(al<=4){aj=0.5}else{if(al<=8){aj=1}else{if(al<=16){aj=2}else{aj=5}}}}}return aj*am}function x(aj,ai){var al=Math.floor(Math.log(aj)/Math.LN10);var an=Math.pow(10,al);var am=aj/an;var ah;var ak;am=am/ai;if(am<=0.38){ak=0.1}else{if(am<=1.6){ak=0.2}else{if(am<=4){ak=0.5}else{if(am<=8){ak=1}else{if(am<=16){ak=2}else{ak=5}}}}}ah=ak*an;return[ah,ak,an]}L.jqplot.LinearTickGenerator=function(an,aq,aj,ak,ao,ar){ao=(ao===null)?false:ao;ar=(ar===null||ao)?false:ar;if(an===aq){aq=(aq)?0:1}aj=aj||1;if(aq<an){var at=aq;aq=an;an=at}var ai=[];var aw=Q(aq-an,aj);var av=L.jqplot.getSignificantFigures;if(ak==null){if(!ao&&!ar){ai[0]=Math.floor(an/aw)*aw;ai[1]=Math.ceil(aq/aw)*aw;ai[2]=Math.round((ai[1]-ai[0])/aw+1);ai[3]=i(aw);ai[4]=aw}else{if(ao){ai[0]=an;ai[2]=Math.ceil((aq-an)/aw+1);ai[1]=an+(ai[2]-1)*aw;var au=av(an).digitsRight;var ap=av(aw).digitsRight;if(au<ap){ai[3]=i(aw)}else{ai[3]="%."+au+"f"}ai[4]=aw}else{if(ar){ai[1]=aq;ai[2]=Math.ceil((aq-an)/aw+1);ai[0]=aq-(ai[2]-1)*aw;var al=av(aq).digitsRight;var ap=av(aw).digitsRight;if(al<ap){ai[3]=i(aw)}else{ai[3]="%."+al+"f"}ai[4]=aw}}}}else{var am=[];am[0]=Math.floor(an/aw)*aw;am[1]=Math.ceil(aq/aw)*aw;am[2]=Math.round((am[1]-am[0])/aw+1);am[3]=i(aw);am[4]=aw;if(am[2]===ak){ai=am}else{var ah=W(am[1]-am[0],ak);ai[0]=am[0];ai[2]=ak;ai[4]=ah;ai[3]=i(ah);ai[1]=ai[0]+(ai[2]-1)*ai[4]}}return ai};L.jqplot.LinearTickGenerator.bestLinearInterval=Q;L.jqplot.LinearTickGenerator.bestInterval=W;L.jqplot.LinearTickGenerator.bestLinearComponents=x;L.jqplot.LinearTickGenerator.bestConstrainedInterval=d;L.jqplot.MarkerRenderer=function(ah){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new L.jqplot.ShadowRenderer();this.shapeRenderer=new L.jqplot.ShapeRenderer();L.extend(true,this,ah)};L.jqplot.MarkerRenderer.prototype.init=function(ah){L.extend(true,this,ah);var aj={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){aj.fill=true}if(this.style.indexOf("ircle")!=-1){aj.isarc=true;aj.closePath=false}this.shadowRenderer.init(aj);var ai={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){ai.fill=true}if(this.style.indexOf("ircle")!=-1){ai.isarc=true;ai.closePath=false}this.shapeRenderer.init(ai)};L.jqplot.MarkerRenderer.prototype.drawDiamond=function(aj,ai,am,al,ao){var ah=1.2;var ap=this.size/2/ah;var an=this.size/2*ah;var ak=[[aj-ap,ai],[aj,ai+an],[aj+ap,ai],[aj,ai-an]];if(this.shadow){this.shadowRenderer.draw(am,ak)}this.shapeRenderer.draw(am,ak,ao)};L.jqplot.MarkerRenderer.prototype.drawPlus=function(ak,aj,an,am,aq){var ai=1;var ar=this.size/2*ai;var ao=this.size/2*ai;var ap=[[ak,aj-ao],[ak,aj+ao]];var al=[[ak+ar,aj],[ak-ar,aj]];var ah=L.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(an,ap,{closePath:false});this.shadowRenderer.draw(an,al,{closePath:false})}this.shapeRenderer.draw(an,ap,ah);this.shapeRenderer.draw(an,al,ah)};L.jqplot.MarkerRenderer.prototype.drawX=function(ak,aj,an,am,aq){var ai=1;var ar=this.size/2*ai;var ao=this.size/2*ai;var ah=L.extend(true,{},this.options,{closePath:false});var ap=[[ak-ar,aj-ao],[ak+ar,aj+ao]];var al=[[ak-ar,aj+ao],[ak+ar,aj-ao]];if(this.shadow){this.shadowRenderer.draw(an,ap,{closePath:false});this.shadowRenderer.draw(an,al,{closePath:false})}this.shapeRenderer.draw(an,ap,ah);this.shapeRenderer.draw(an,al,ah)};L.jqplot.MarkerRenderer.prototype.drawDash=function(aj,ai,am,al,ao){var ah=1;var ap=this.size/2*ah;var an=this.size/2*ah;var ak=[[aj-ap,ai],[aj+ap,ai]];if(this.shadow){this.shadowRenderer.draw(am,ak)}this.shapeRenderer.draw(am,ak,ao)};L.jqplot.MarkerRenderer.prototype.drawLine=function(am,al,ah,ak,ai){var aj=[am,al];if(this.shadow){this.shadowRenderer.draw(ah,aj)}this.shapeRenderer.draw(ah,aj,ai)};L.jqplot.MarkerRenderer.prototype.drawSquare=function(aj,ai,am,al,ao){var ah=1;var ap=this.size/2/ah;var an=this.size/2*ah;var ak=[[aj-ap,ai-an],[aj-ap,ai+an],[aj+ap,ai+an],[aj+ap,ai-an]];if(this.shadow){this.shadowRenderer.draw(am,ak)}this.shapeRenderer.draw(am,ak,ao)};L.jqplot.MarkerRenderer.prototype.drawCircle=function(ai,ao,ak,an,al){var ah=this.size/2;var aj=2*Math.PI;var am=[ai,ao,ah,0,aj,true];if(this.shadow){this.shadowRenderer.draw(ak,am)}this.shapeRenderer.draw(ak,am,al)};L.jqplot.MarkerRenderer.prototype.draw=function(ah,ak,ai,aj){aj=aj||{};if(aj.show==null||aj.show!=false){if(aj.color&&!aj.fillStyle){aj.fillStyle=aj.color}if(aj.color&&!aj.strokeStyle){aj.strokeStyle=aj.color}switch(this.style){case"diamond":this.drawDiamond(ah,ak,ai,false,aj);break;case"filledDiamond":this.drawDiamond(ah,ak,ai,true,aj);break;case"circle":this.drawCircle(ah,ak,ai,false,aj);break;case"filledCircle":this.drawCircle(ah,ak,ai,true,aj);break;case"square":this.drawSquare(ah,ak,ai,false,aj);break;case"filledSquare":this.drawSquare(ah,ak,ai,true,aj);break;case"x":this.drawX(ah,ak,ai,true,aj);break;case"plus":this.drawPlus(ah,ak,ai,true,aj);break;case"dash":this.drawDash(ah,ak,ai,true,aj);break;case"line":this.drawLine(ah,ak,ai,false,aj);break;default:this.drawDiamond(ah,ak,ai,false,aj);break}}};L.jqplot.ShadowRenderer=function(ah){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.strokeStyle="rgba(0,0,0,0.1)";this.isarc=false;L.extend(true,this,ah)};L.jqplot.ShadowRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.ShadowRenderer.prototype.draw=function(av,at,ax){av.save();var ah=(ax!=null)?ax:{};var au=(ah.fill!=null)?ah.fill:this.fill;var ap=(ah.fillRect!=null)?ah.fillRect:this.fillRect;var ao=(ah.closePath!=null)?ah.closePath:this.closePath;var al=(ah.offset!=null)?ah.offset:this.offset;var aj=(ah.alpha!=null)?ah.alpha:this.alpha;var an=(ah.depth!=null)?ah.depth:this.depth;var aw=(ah.isarc!=null)?ah.isarc:this.isarc;var aq=(ah.linePattern!=null)?ah.linePattern:this.linePattern;av.lineWidth=(ah.lineWidth!=null)?ah.lineWidth:this.lineWidth;av.lineJoin=(ah.lineJoin!=null)?ah.lineJoin:this.lineJoin;av.lineCap=(ah.lineCap!=null)?ah.lineCap:this.lineCap;av.strokeStyle=ah.strokeStyle||this.strokeStyle||"rgba(0,0,0,"+aj+")";av.fillStyle=ah.fillStyle||this.fillStyle||"rgba(0,0,0,"+aj+")";for(var ak=0;ak<an;ak++){var ar=L.jqplot.LinePattern(av,aq);av.translate(Math.cos(this.angle*Math.PI/180)*al,Math.sin(this.angle*Math.PI/180)*al);ar.beginPath();if(aw){av.arc(at[0],at[1],at[2],at[3],at[4],true)}else{if(ap){if(ap){av.fillRect(at[0],at[1],at[2],at[3])}}else{if(at&&at.length){var ai=true;for(var am=0;am<at.length;am++){if(at[am][0]!=null&&at[am][1]!=null){if(ai){ar.moveTo(at[am][0],at[am][1]);ai=false}else{ar.lineTo(at[am][0],at[am][1])}}else{ai=true}}}}}if(ao){ar.closePath()}if(au){av.fill()}else{av.stroke()}}av.restore()};L.jqplot.ShapeRenderer=function(ah){this.lineWidth=1.5;this.linePattern="solid";this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";L.extend(true,this,ah)};L.jqplot.ShapeRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.ShapeRenderer.prototype.draw=function(at,aq,av){at.save();var ah=(av!=null)?av:{};var ar=(ah.fill!=null)?ah.fill:this.fill;var am=(ah.closePath!=null)?ah.closePath:this.closePath;var an=(ah.fillRect!=null)?ah.fillRect:this.fillRect;var ak=(ah.strokeRect!=null)?ah.strokeRect:this.strokeRect;var ai=(ah.clearRect!=null)?ah.clearRect:this.clearRect;var au=(ah.isarc!=null)?ah.isarc:this.isarc;var ao=(ah.linePattern!=null)?ah.linePattern:this.linePattern;var ap=L.jqplot.LinePattern(at,ao);at.lineWidth=ah.lineWidth||this.lineWidth;at.lineJoin=ah.lineJoin||this.lineJoin;at.lineCap=ah.lineCap||this.lineCap;at.strokeStyle=(ah.strokeStyle||ah.color)||this.strokeStyle;at.fillStyle=ah.fillStyle||this.fillStyle;at.beginPath();if(au){at.arc(aq[0],aq[1],aq[2],aq[3],aq[4],true);if(am){at.closePath()}if(ar){at.fill()}else{at.stroke()}at.restore();return}else{if(ai){at.clearRect(aq[0],aq[1],aq[2],aq[3]);at.restore();return}else{if(an||ak){if(an){at.fillRect(aq[0],aq[1],aq[2],aq[3])}if(ak){at.strokeRect(aq[0],aq[1],aq[2],aq[3]);at.restore();return}}else{if(aq&&aq.length){var aj=true;for(var al=0;al<aq.length;al++){if(aq[al][0]!=null&&aq[al][1]!=null){if(aj){ap.moveTo(aq[al][0],aq[al][1]);aj=false}else{ap.lineTo(aq[al][0],aq[al][1])}}else{aj=true}}if(am){ap.closePath()}if(ar){at.fill()}else{at.stroke()}}}}}at.restore()};L.jqplot.TableLegendRenderer=function(){};L.jqplot.TableLegendRenderer.prototype.init=function(ah){L.extend(true,this,ah)};L.jqplot.TableLegendRenderer.prototype.addrow=function(aq,ak,ah,ao){var al=(ah)?this.rowSpacing+"px":"0px";var ap;var aj;var ai;var an;var am;ai=document.createElement("tr");ap=L(ai);ap.addClass("jqplot-table-legend");ai=null;if(ao){ap.prependTo(this._elem)}else{ap.appendTo(this._elem)}if(this.showSwatches){aj=L(document.createElement("td"));aj.addClass("jqplot-table-legend jqplot-table-legend-swatch");aj.css({textAlign:"center",paddingTop:al});an=L(document.createElement("div"));an.addClass("jqplot-table-legend-swatch-outline");am=L(document.createElement("div"));am.addClass("jqplot-table-legend-swatch");am.css({backgroundColor:ak,borderColor:ak});ap.append(aj.append(an.append(am)))}if(this.showLabels){aj=L(document.createElement("td"));aj.addClass("jqplot-table-legend jqplot-table-legend-label");aj.css("paddingTop",al);ap.append(aj);if(this.escapeHtml){aj.text(aq)}else{aj.html(aq)}}aj=null;an=null;am=null;ap=null;ai=null};L.jqplot.TableLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var am=this._series;var ai=document.createElement("table");this._elem=L(ai);this._elem.addClass("jqplot-table-legend");var ar={position:"absolute"};if(this.background){ar.background=this.background}if(this.border){ar.border=this.border}if(this.fontSize){ar.fontSize=this.fontSize}if(this.fontFamily){ar.fontFamily=this.fontFamily}if(this.textColor){ar.textColor=this.textColor}if(this.marginTop!=null){ar.marginTop=this.marginTop}if(this.marginBottom!=null){ar.marginBottom=this.marginBottom}if(this.marginLeft!=null){ar.marginLeft=this.marginLeft}if(this.marginRight!=null){ar.marginRight=this.marginRight}var ah=false,ao=false,aq;for(var an=0;an<am.length;an++){aq=am[an];if(aq._stack||aq.renderer.constructor==L.jqplot.BezierCurveRenderer){ao=true}if(aq.show&&aq.showLabel){var al=this.labels[an]||aq.label.toString();if(al){var aj=aq.color;if(ao&&an<am.length-1){ah=true}else{if(ao&&an==am.length-1){ah=false}}this.renderer.addrow.call(this,al,aj,ah,ao);ah=true}for(var ak=0;ak<L.jqplot.addLegendRowHooks.length;ak++){var ap=L.jqplot.addLegendRowHooks[ak].call(this,aq);if(ap){this.renderer.addrow.call(this,ap.label,ap.color,ah);ah=true}}al=null}}}return this._elem};L.jqplot.TableLegendRenderer.prototype.pack=function(aj){if(this.show){if(this.placement=="insideGrid"){switch(this.location){case"nw":var ai=aj.left;var ah=aj.top;this._elem.css("left",ai);this._elem.css("top",ah);break;case"n":var ai=(aj.left+(this._plotDimensions.width-aj.right))/2-this.getWidth()/2;var ah=aj.top;this._elem.css("left",ai);this._elem.css("top",ah);break;case"ne":var ai=aj.right;var ah=aj.top;this._elem.css({right:ai,top:ah});break;case"e":var ai=aj.right;var ah=(aj.top+(this._plotDimensions.height-aj.bottom))/2-this.getHeight()/2;this._elem.css({right:ai,top:ah});break;case"se":var ai=aj.right;var ah=aj.bottom;this._elem.css({right:ai,bottom:ah});break;case"s":var ai=(aj.left+(this._plotDimensions.width-aj.right))/2-this.getWidth()/2;var ah=aj.bottom;this._elem.css({left:ai,bottom:ah});break;case"sw":var ai=aj.left;var ah=aj.bottom;this._elem.css({left:ai,bottom:ah});break;case"w":var ai=aj.left;var ah=(aj.top+(this._plotDimensions.height-aj.bottom))/2-this.getHeight()/2;this._elem.css({left:ai,top:ah});break;default:var ai=aj.right;var ah=aj.bottom;this._elem.css({right:ai,bottom:ah});break}}else{if(this.placement=="outside"){switch(this.location){case"nw":var ai=this._plotDimensions.width-aj.left;var ah=aj.top;this._elem.css("right",ai);this._elem.css("top",ah);break;case"n":var ai=(aj.left+(this._plotDimensions.width-aj.right))/2-this.getWidth()/2;var ah=this._plotDimensions.height-aj.top;this._elem.css("left",ai);this._elem.css("bottom",ah);break;case"ne":var ai=this._plotDimensions.width-aj.right;var ah=aj.top;this._elem.css({left:ai,top:ah});break;case"e":var ai=this._plotDimensions.width-aj.right;var ah=(aj.top+(this._plotDimensions.height-aj.bottom))/2-this.getHeight()/2;this._elem.css({left:ai,top:ah});break;case"se":var ai=this._plotDimensions.width-aj.right;var ah=aj.bottom;this._elem.css({left:ai,bottom:ah});break;case"s":var ai=(aj.left+(this._plotDimensions.width-aj.right))/2-this.getWidth()/2;var ah=this._plotDimensions.height-aj.bottom;this._elem.css({left:ai,top:ah});break;case"sw":var ai=this._plotDimensions.width-aj.left;var ah=aj.bottom;this._elem.css({right:ai,bottom:ah});break;case"w":var ai=this._plotDimensions.width-aj.left;var ah=(aj.top+(this._plotDimensions.height-aj.bottom))/2-this.getHeight()/2;this._elem.css({right:ai,top:ah});break;default:var ai=aj.right;var ah=aj.bottom;this._elem.css({right:ai,bottom:ah});break}}else{switch(this.location){case"nw":this._elem.css({left:0,top:aj.top});break;case"n":var ai=(aj.left+(this._plotDimensions.width-aj.right))/2-this.getWidth()/2;this._elem.css({left:ai,top:aj.top});break;case"ne":this._elem.css({right:0,top:aj.top});break;case"e":var ah=(aj.top+(this._plotDimensions.height-aj.bottom))/2-this.getHeight()/2;this._elem.css({right:aj.right,top:ah});break;case"se":this._elem.css({right:aj.right,bottom:aj.bottom});break;case"s":var ai=(aj.left+(this._plotDimensions.width-aj.right))/2-this.getWidth()/2;this._elem.css({left:ai,bottom:aj.bottom});break;case"sw":this._elem.css({left:aj.left,bottom:aj.bottom});break;case"w":var ah=(aj.top+(this._plotDimensions.height-aj.bottom))/2-this.getHeight()/2;this._elem.css({left:aj.left,top:ah});break;default:this._elem.css({right:aj.right,bottom:aj.bottom});break}}}}};L.jqplot.ThemeEngine=function(){this.themes={};this.activeTheme=null};L.jqplot.ThemeEngine.prototype.init=function(){var ak=new L.jqplot.Theme({_name:"Default"});var an,ai,am;for(an in ak.target){if(an=="textColor"){ak.target[an]=this.target.css("color")}else{ak.target[an]=this.target.css(an)}}if(this.title.show&&this.title._elem){for(an in ak.title){if(an=="textColor"){ak.title[an]=this.title._elem.css("color")}else{ak.title[an]=this.title._elem.css(an)}}}for(an in ak.grid){ak.grid[an]=this.grid[an]}if(ak.grid.backgroundColor==null&&this.grid.background!=null){ak.grid.backgroundColor=this.grid.background}if(this.legend.show&&this.legend._elem){for(an in ak.legend){if(an=="textColor"){ak.legend[an]=this.legend._elem.css("color")}else{ak.legend[an]=this.legend._elem.css(an)}}}var aj;for(ai=0;ai<this.series.length;ai++){aj=this.series[ai];if(aj.renderer.constructor==L.jqplot.LineRenderer){ak.series.push(new p())}else{if(aj.renderer.constructor==L.jqplot.BarRenderer){ak.series.push(new T())}else{if(aj.renderer.constructor==L.jqplot.PieRenderer){ak.series.push(new f())}else{if(aj.renderer.constructor==L.jqplot.DonutRenderer){ak.series.push(new G())}else{if(aj.renderer.constructor==L.jqplot.FunnelRenderer){ak.series.push(new Z())}else{if(aj.renderer.constructor==L.jqplot.MeterGaugeRenderer){ak.series.push(new D())}else{ak.series.push({})}}}}}}for(an in ak.series[ai]){ak.series[ai][an]=aj[an]}}var ah,al;for(an in this.axes){al=this.axes[an];ah=ak.axes[an]=new P();ah.borderColor=al.borderColor;ah.borderWidth=al.borderWidth;if(al._ticks&&al._ticks[0]){for(am in ah.ticks){if(al._ticks[0].hasOwnProperty(am)){ah.ticks[am]=al._ticks[0][am]}else{if(al._ticks[0]._elem){ah.ticks[am]=al._ticks[0]._elem.css(am)}}}}if(al._label&&al._label.show){for(am in ah.label){if(al._label[am]){ah.label[am]=al._label[am]}else{if(al._label._elem){if(am=="textColor"){ah.label[am]=al._label._elem.css("color")}else{ah.label[am]=al._label._elem.css(am)}}}}}}this.themeEngine._add(ak);this.themeEngine.activeTheme=this.themeEngine.themes[ak._name]};L.jqplot.ThemeEngine.prototype.get=function(ah){if(!ah){return this.activeTheme}else{return this.themes[ah]}};function O(ai,ah){return ai-ah}L.jqplot.ThemeEngine.prototype.getThemeNames=function(){var ah=[];for(var ai in this.themes){ah.push(ai)}return ah.sort(O)};L.jqplot.ThemeEngine.prototype.getThemes=function(){var ai=[];var ah=[];for(var ak in this.themes){ai.push(ak)}ai.sort(O);for(var aj=0;aj<ai.length;aj++){ah.push(this.themes[ai[aj]])}return ah};L.jqplot.ThemeEngine.prototype.activate=function(av,aB){var ah=false;if(!aB&&this.activeTheme&&this.activeTheme._name){aB=this.activeTheme._name}if(!this.themes.hasOwnProperty(aB)){throw new Error("No theme of that name")}else{var am=this.themes[aB];this.activeTheme=am;var aA,at=false,ar=false;var ai=["xaxis","x2axis","yaxis","y2axis"];for(aw=0;aw<ai.length;aw++){var an=ai[aw];if(am.axesStyles.borderColor!=null){av.axes[an].borderColor=am.axesStyles.borderColor}if(am.axesStyles.borderWidth!=null){av.axes[an].borderWidth=am.axesStyles.borderWidth}}for(var az in av.axes){var ak=av.axes[az];if(ak.show){var aq=am.axes[az]||{};var ao=am.axesStyles;var al=L.jqplot.extend(true,{},aq,ao);aA=(am.axesStyles.borderColor!=null)?am.axesStyles.borderColor:al.borderColor;if(al.borderColor!=null){ak.borderColor=al.borderColor;ah=true}aA=(am.axesStyles.borderWidth!=null)?am.axesStyles.borderWidth:al.borderWidth;if(al.borderWidth!=null){ak.borderWidth=al.borderWidth;ah=true}if(ak._ticks&&ak._ticks[0]){for(var aj in al.ticks){aA=al.ticks[aj];if(aA!=null){ak.tickOptions[aj]=aA;ak._ticks=[];ah=true}}}if(ak._label&&ak._label.show){for(var aj in al.label){aA=al.label[aj];if(aA!=null){ak.labelOptions[aj]=aA;ah=true}}}}}for(var au in am.grid){if(am.grid[au]!=null){av.grid[au]=am.grid[au]}}if(!ah){av.grid.draw()}if(av.legend.show){for(au in am.legend){if(am.legend[au]!=null){av.legend[au]=am.legend[au]}}}if(av.title.show){for(au in am.title){if(am.title[au]!=null){av.title[au]=am.title[au]}}}var aw;for(aw=0;aw<am.series.length;aw++){var ap={};var ay=false;for(au in am.series[aw]){aA=(am.seriesStyles[au]!=null)?am.seriesStyles[au]:am.series[aw][au];if(aA!=null){ap[au]=aA;if(au=="color"){av.series[aw].renderer.shapeRenderer.fillStyle=aA;av.series[aw].renderer.shapeRenderer.strokeStyle=aA;av.series[aw][au]=aA}else{if((au=="lineWidth")||(au=="linePattern")){av.series[aw].renderer.shapeRenderer[au]=aA;av.series[aw][au]=aA}else{if(au=="markerOptions"){V(av.series[aw].markerOptions,aA);V(av.series[aw].markerRenderer,aA)}else{av.series[aw][au]=aA}}}ah=true}}}if(ah){av.target.empty();av.draw()}for(au in am.target){if(am.target[au]!=null){av.target.css(au,am.target[au])}}}};L.jqplot.ThemeEngine.prototype._add=function(ai,ah){if(ah){ai._name=ah}if(!ai._name){ai._name=Date.parse(new Date())}if(!this.themes.hasOwnProperty(ai._name)){this.themes[ai._name]=ai}else{throw new Error("jqplot.ThemeEngine Error: Theme already in use")}};L.jqplot.ThemeEngine.prototype.remove=function(ah){if(ah=="Default"){return false}return delete this.themes[ah]};L.jqplot.ThemeEngine.prototype.newTheme=function(ah,aj){if(typeof(ah)=="object"){aj=aj||ah;ah=null}if(aj&&aj._name){ah=aj._name}else{ah=ah||Date.parse(new Date())}var ai=this.copy(this.themes.Default._name,ah);L.jqplot.extend(ai,aj);return ai};function B(aj){if(aj==null||typeof(aj)!="object"){return aj}var ah=new aj.constructor();for(var ai in aj){ah[ai]=B(aj[ai])}return ah}L.jqplot.clone=B;function V(aj,ai){if(ai==null||typeof(ai)!="object"){return}for(var ah in ai){if(ah=="highlightColors"){aj[ah]=B(ai[ah])}if(ai[ah]!=null&&typeof(ai[ah])=="object"){if(!aj.hasOwnProperty(ah)){aj[ah]={}}V(aj[ah],ai[ah])}else{aj[ah]=ai[ah]}}}L.jqplot.merge=V;L.jqplot.extend=function(){var am=arguments[0]||{},ak=1,al=arguments.length,ah=false,aj;if(typeof am==="boolean"){ah=am;am=arguments[1]||{};ak=2}if(typeof am!=="object"&&!toString.call(am)==="[object Function]"){am={}}for(;ak<al;ak++){if((aj=arguments[ak])!=null){for(var ai in aj){var an=am[ai],ao=aj[ai];if(am===ao){continue}if(ah&&ao&&typeof ao==="object"&&!ao.nodeType){am[ai]=L.jqplot.extend(ah,an||(ao.length!=null?[]:{}),ao)}else{if(ao!==u){am[ai]=ao}}}}}return am};L.jqplot.ThemeEngine.prototype.rename=function(ai,ah){if(ai=="Default"||ah=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot rename from/to Default")}if(this.themes.hasOwnProperty(ah)){throw new Error("jqplot.ThemeEngine Error: New name already in use.")}else{if(this.themes.hasOwnProperty(ai)){var aj=this.copy(ai,ah);this.remove(ai);return aj}}throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid")};L.jqplot.ThemeEngine.prototype.copy=function(ah,aj,al){if(aj=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot copy over Default theme")}if(!this.themes.hasOwnProperty(ah)){var ai="jqplot.ThemeEngine Error: Source name invalid";throw new Error(ai)}if(this.themes.hasOwnProperty(aj)){var ai="jqplot.ThemeEngine Error: Target name invalid";throw new Error(ai)}else{var ak=B(this.themes[ah]);ak._name=aj;L.jqplot.extend(true,ak,al);this._add(ak);return ak}};L.jqplot.Theme=function(ah,ai){if(typeof(ah)=="object"){ai=ai||ah;ah=null}ah=ah||Date.parse(new Date());this._name=ah;this.target={backgroundColor:null};this.legend={textColor:null,fontFamily:null,fontSize:null,border:null,background:null};this.title={textColor:null,fontFamily:null,fontSize:null,textAlign:null};this.seriesStyles={};this.series=[];this.grid={drawGridlines:null,gridLineColor:null,gridLineWidth:null,backgroundColor:null,borderColor:null,borderWidth:null,shadow:null};this.axesStyles={label:{},ticks:{}};this.axes={};if(typeof(ai)=="string"){this._name=ai}else{if(typeof(ai)=="object"){L.jqplot.extend(true,this,ai)}}};var P=function(){this.borderColor=null;this.borderWidth=null;this.ticks=new o();this.label=new t()};var o=function(){this.show=null;this.showGridline=null;this.showLabel=null;this.showMark=null;this.size=null;this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null};var t=function(){this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null;this.fontWeight=null};var p=function(){this.color=null;this.lineWidth=null;this.linePattern=null;this.shadow=null;this.fillColor=null;this.showMarker=null;this.markerOptions=new I()};var I=function(){this.show=null;this.style=null;this.lineWidth=null;this.size=null;this.color=null;this.shadow=null};var T=function(){this.color=null;this.seriesColors=null;this.lineWidth=null;this.shadow=null;this.barPadding=null;this.barMargin=null;this.barWidth=null;this.highlightColors=null};var f=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.highlightColors=null};var G=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.innerDiameter=null;this.thickness=null;this.ringMargin=null;this.highlightColors=null};var Z=function(){this.color=null;this.lineWidth=null;this.shadow=null;this.padding=null;this.sectionMargin=null;this.seriesColors=null;this.highlightColors=null};var D=function(){this.padding=null;this.backgroundColor=null;this.ringColor=null;this.tickColor=null;this.ringWidth=null;this.intervalColors=null;this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.hubRadius=null;this.needleThickness=null;this.needlePad=null};L.fn.jqplotChildText=function(){return L(this).contents().filter(function(){return this.nodeType==3}).text()};L.fn.jqplotGetComputedFontStyle=function(){var ak=window.getComputedStyle?window.getComputedStyle(this[0],""):this[0].currentStyle;var ai=ak["font-style"]?["font-style","font-weight","font-size","font-family"]:["fontStyle","fontWeight","fontSize","fontFamily"];var al=[];for(var aj=0;aj<ai.length;++aj){var ah=String(ak[ai[aj]]);if(ah&&ah!="normal"){al.push(ah)}}return al.join(" ")};L.fn.jqplotToImageCanvas=function(aj){aj=aj||{};var av=(aj.x_offset==null)?0:aj.x_offset;var ax=(aj.y_offset==null)?0:aj.y_offset;var al=(aj.backgroundColor==null)?"rgb(255,255,255)":aj.backgroundColor;if(L(this).width()==0||L(this).height()==0){return null}if(L.jqplot.use_excanvas){return null}var an=document.createElement("canvas");var aA=L(this).outerHeight(true);var at=L(this).outerWidth(true);var am=L(this).offset();var ao=am.left;var aq=am.top;var au=0,ar=0;var ay=["jqplot-table-legend","jqplot-xaxis-tick","jqplot-x2axis-tick","jqplot-yaxis-tick","jqplot-y2axis-tick","jqplot-y3axis-tick","jqplot-y4axis-tick","jqplot-y5axis-tick","jqplot-y6axis-tick","jqplot-y7axis-tick","jqplot-y8axis-tick","jqplot-y9axis-tick","jqplot-xaxis-label","jqplot-x2axis-label","jqplot-yaxis-label","jqplot-y2axis-label","jqplot-y3axis-label","jqplot-y4axis-label","jqplot-y5axis-label","jqplot-y6axis-label","jqplot-y7axis-label","jqplot-y8axis-label","jqplot-y9axis-label"];var ap,ah,ai,aB;for(var az=0;az<ay.length;az++){L(this).find("."+ay[az]).each(function(){ap=L(this).offset().top-aq;ah=L(this).offset().left-ao;aB=ah+L(this).outerWidth(true)+au;ai=ap+L(this).outerHeight(true)+ar;if(ah<-au){at=at-au-ah;au=-ah}if(ap<-ar){aA=aA-ar-ap;ar=-ap}if(aB>at){at=aB}if(ai>aA){aA=ai}})}an.width=at+Number(av);an.height=aA+Number(ax);var ak=an.getContext("2d");ak.save();ak.fillStyle=al;ak.fillRect(0,0,an.width,an.height);ak.restore();ak.translate(au,ar);ak.textAlign="left";ak.textBaseline="top";function aC(aE){var aF=parseInt(L(aE).css("line-height"),10);if(isNaN(aF)){aF=parseInt(L(aE).css("font-size"),10)*1.2}return aF}function aD(aF,aE,aS,aG,aO,aH){var aQ=aC(aF);var aK=L(aF).innerWidth();var aL=L(aF).innerHeight();var aN=aS.split(/\s+/);var aR=aN.length;var aP="";var aM=[];var aU=aO;var aT=aG;for(var aJ=0;aJ<aR;aJ++){aP+=aN[aJ];if(aE.measureText(aP).width>aK){aM.push(aJ);aP="";aJ--}}if(aM.length===0){if(L(aF).css("textAlign")==="center"){aT=aG+(aH-aE.measureText(aP).width)/2-au}aE.fillText(aS,aT,aO)}else{aP=aN.slice(0,aM[0]).join(" ");if(L(aF).css("textAlign")==="center"){aT=aG+(aH-aE.measureText(aP).width)/2-au}aE.fillText(aP,aT,aU);aU+=aQ;for(var aJ=1,aI=aM.length;aJ<aI;aJ++){aP=aN.slice(aM[aJ-1],aM[aJ]).join(" ");if(L(aF).css("textAlign")==="center"){aT=aG+(aH-aE.measureText(aP).width)/2-au}aE.fillText(aP,aT,aU);aU+=aQ}aP=aN.slice(aM[aJ-1],aN.length).join(" ");if(L(aF).css("textAlign")==="center"){aT=aG+(aH-aE.measureText(aP).width)/2-au}aE.fillText(aP,aT,aU)}}function aw(aG,aJ,aE){var aN=aG.tagName.toLowerCase();var aF=L(aG).position();var aK=window.getComputedStyle?window.getComputedStyle(aG,""):aG.currentStyle;var aI=aJ+aF.left+parseInt(aK.marginLeft,10)+parseInt(aK.borderLeftWidth,10)+parseInt(aK.paddingLeft,10);var aL=aE+aF.top+parseInt(aK.marginTop,10)+parseInt(aK.borderTopWidth,10)+parseInt(aK.paddingTop,10);var aM=an.width;if((aN=="div"||aN=="span")&&!L(aG).hasClass("jqplot-highlighter-tooltip")){L(aG).children().each(function(){aw(this,aI,aL)});var aO=L(aG).jqplotChildText();if(aO){ak.font=L(aG).jqplotGetComputedFontStyle();ak.fillStyle=L(aG).css("color");aD(aG,ak,aO,aI,aL,aM)}}else{if(aN==="table"&&L(aG).hasClass("jqplot-table-legend")){ak.strokeStyle=L(aG).css("border-top-color");ak.fillStyle=L(aG).css("background-color");ak.fillRect(aI,aL,L(aG).innerWidth(),L(aG).innerHeight());if(parseInt(L(aG).css("border-top-width"),10)>0){ak.strokeRect(aI,aL,L(aG).innerWidth(),L(aG).innerHeight())}L(aG).find("div.jqplot-table-legend-swatch-outline").each(function(){var aU=L(this);ak.strokeStyle=aU.css("border-top-color");var aQ=aI+aU.position().left;var aR=aL+aU.position().top;ak.strokeRect(aQ,aR,aU.innerWidth(),aU.innerHeight());aQ+=parseInt(aU.css("padding-left"),10);aR+=parseInt(aU.css("padding-top"),10);var aT=aU.innerHeight()-2*parseInt(aU.css("padding-top"),10);var aP=aU.innerWidth()-2*parseInt(aU.css("padding-left"),10);var aS=aU.children("div.jqplot-table-legend-swatch");ak.fillStyle=aS.css("background-color");ak.fillRect(aQ,aR,aP,aT)});L(aG).find("td.jqplot-table-legend-label").each(function(){var aR=L(this);var aP=aI+aR.position().left;var aQ=aL+aR.position().top+parseInt(aR.css("padding-top"),10);ak.font=aR.jqplotGetComputedFontStyle();ak.fillStyle=aR.css("color");aD(aR,ak,aR.text(),aP,aQ,aM)});var aH=null}else{if(aN=="canvas"){ak.drawImage(aG,aI,aL)}}}}L(this).children().each(function(){aw(this,av,ax)});return an};L.fn.jqplotToImageStr=function(ai){var ah=L(this).jqplotToImageCanvas(ai);if(ah){return ah.toDataURL("image/png")}else{return null}};L.fn.jqplotToImageElem=function(ah){var ai=document.createElement("img");var aj=L(this).jqplotToImageStr(ah);ai.src=aj;return ai};L.fn.jqplotToImageElemStr=function(ah){var ai="<img src="+L(this).jqplotToImageStr(ah)+" />";return ai};L.fn.jqplotSaveImage=function(){var ah=L(this).jqplotToImageStr({});if(ah){window.location.href=ah.replace("image/png","image/octet-stream")}};L.fn.jqplotViewImage=function(){var ai=L(this).jqplotToImageElemStr({});var aj=L(this).jqplotToImageStr({});if(ai){var ah=window.open("");ah.document.open("image/png");ah.document.write(ai);ah.document.close();ah=null}};var ag=function(){this.syntax=ag.config.syntax;this._type="jsDate";this.proxy=new Date();this.options={};this.locale=ag.regional.getLocale();this.formatString="";this.defaultCentury=ag.config.defaultCentury;switch(arguments.length){case 0:break;case 1:if(l(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var aj=this.options=arguments[0];this.syntax=aj.syntax||this.syntax;this.defaultCentury=aj.defaultCentury||this.defaultCentury;this.proxy=ag.createDate(aj.date)}else{this.proxy=ag.createDate(arguments[0])}break;default:var ah=[];for(var ai=0;ai<arguments.length;ai++){ah.push(arguments[ai])}this.proxy=new Date();this.proxy.setFullYear.apply(this.proxy,ah.slice(0,3));if(ah.slice(3).length){this.proxy.setHours.apply(this.proxy,ah.slice(3))}break}};ag.config={defaultLocale:"en",syntax:"perl",defaultCentury:1900};ag.prototype.add=function(aj,ai){var ah=E[ai]||E.day;if(typeof ah=="number"){this.proxy.setTime(this.proxy.getTime()+(ah*aj))}else{ah.add(this,aj)}return this};ag.prototype.clone=function(){return new ag(this.proxy.getTime())};ag.prototype.getUtcOffset=function(){return this.proxy.getTimezoneOffset()*60000};ag.prototype.diff=function(ai,al,ah){ai=new ag(ai);if(ai===null){return null}var aj=E[al]||E.day;if(typeof aj=="number"){var ak=(this.proxy.getTime()-ai.proxy.getTime())/aj}else{var ak=aj.diff(this.proxy,ai.proxy)}return(ah?ak:Math[ak>0?"floor":"ceil"](ak))};ag.prototype.getAbbrDayName=function(){return ag.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]};ag.prototype.getAbbrMonthName=function(){return ag.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]};ag.prototype.getAMPM=function(){return this.proxy.getHours()>=12?"PM":"AM"};ag.prototype.getAmPm=function(){return this.proxy.getHours()>=12?"pm":"am"};ag.prototype.getCentury=function(){return parseInt(this.proxy.getFullYear()/100,10)};ag.prototype.getDate=function(){return this.proxy.getDate()};ag.prototype.getDay=function(){return this.proxy.getDay()};ag.prototype.getDayOfWeek=function(){var ah=this.proxy.getDay();return ah===0?7:ah};ag.prototype.getDayOfYear=function(){var ai=this.proxy;var ah=ai-new Date(""+ai.getFullYear()+"/1/1 GMT");ah+=ai.getTimezoneOffset()*60000;ai=null;return parseInt(ah/60000/60/24,10)+1};ag.prototype.getDayName=function(){return ag.regional[this.locale]["dayNames"][this.proxy.getDay()]};ag.prototype.getFullWeekOfYear=function(){var ak=this.proxy;var ah=this.getDayOfYear();var aj=6-ak.getDay();var ai=parseInt((ah+aj)/7,10);return ai};ag.prototype.getFullYear=function(){return this.proxy.getFullYear()};ag.prototype.getGmtOffset=function(){var ah=this.proxy.getTimezoneOffset()/60;var ai=ah<0?"+":"-";ah=Math.abs(ah);return ai+N(Math.floor(ah),2)+":"+N((ah%1)*60,2)};ag.prototype.getHours=function(){return this.proxy.getHours()};ag.prototype.getHours12=function(){var ah=this.proxy.getHours();return ah>12?ah-12:(ah==0?12:ah)};ag.prototype.getIsoWeek=function(){var ak=this.proxy;var aj=this.getWeekOfYear();var ah=(new Date(""+ak.getFullYear()+"/1/1")).getDay();var ai=aj+(ah>4||ah<=1?0:1);if(ai==53&&(new Date(""+ak.getFullYear()+"/12/31")).getDay()<4){ai=1}else{if(ai===0){ak=new ag(new Date(""+(ak.getFullYear()-1)+"/12/31"));ai=ak.getIsoWeek()}}ak=null;return ai};ag.prototype.getMilliseconds=function(){return this.proxy.getMilliseconds()};ag.prototype.getMinutes=function(){return this.proxy.getMinutes()};ag.prototype.getMonth=function(){return this.proxy.getMonth()};ag.prototype.getMonthName=function(){return ag.regional[this.locale]["monthNames"][this.proxy.getMonth()]};ag.prototype.getMonthNumber=function(){return this.proxy.getMonth()+1};ag.prototype.getSeconds=function(){return this.proxy.getSeconds()};ag.prototype.getShortYear=function(){return this.proxy.getYear()%100};ag.prototype.getTime=function(){return this.proxy.getTime()};ag.prototype.getTimezoneAbbr=function(){return this.proxy.toString().replace(/^.*\(([^)]+)\)$/,"$1")};ag.prototype.getTimezoneName=function(){var ah=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return ah[1]||ah[2]||"GMT"+this.getGmtOffset()};ag.prototype.getTimezoneOffset=function(){return this.proxy.getTimezoneOffset()};ag.prototype.getWeekOfYear=function(){var ah=this.getDayOfYear();var aj=7-this.getDayOfWeek();var ai=parseInt((ah+aj)/7,10);return ai};ag.prototype.getUnix=function(){return Math.round(this.proxy.getTime()/1000,0)};ag.prototype.getYear=function(){return this.proxy.getYear()};ag.prototype.next=function(ah){ah=ah||"day";return this.clone().add(1,ah)};ag.prototype.set=function(){switch(arguments.length){case 0:this.proxy=new Date();break;case 1:if(l(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var aj=this.options=arguments[0];this.syntax=aj.syntax||this.syntax;this.defaultCentury=aj.defaultCentury||this.defaultCentury;this.proxy=ag.createDate(aj.date)}else{this.proxy=ag.createDate(arguments[0])}break;default:var ah=[];for(var ai=0;ai<arguments.length;ai++){ah.push(arguments[ai])}this.proxy=new Date();this.proxy.setFullYear.apply(this.proxy,ah.slice(0,3));if(ah.slice(3).length){this.proxy.setHours.apply(this.proxy,ah.slice(3))}break}return this};ag.prototype.setDate=function(ah){this.proxy.setDate(ah);return this};ag.prototype.setFullYear=function(){this.proxy.setFullYear.apply(this.proxy,arguments);return this};ag.prototype.setHours=function(){this.proxy.setHours.apply(this.proxy,arguments);return this};ag.prototype.setMilliseconds=function(ah){this.proxy.setMilliseconds(ah);return this};ag.prototype.setMinutes=function(){this.proxy.setMinutes.apply(this.proxy,arguments);return this};ag.prototype.setMonth=function(){this.proxy.setMonth.apply(this.proxy,arguments);return this};ag.prototype.setSeconds=function(){this.proxy.setSeconds.apply(this.proxy,arguments);return this};ag.prototype.setTime=function(ah){this.proxy.setTime(ah);return this};ag.prototype.setYear=function(){this.proxy.setYear.apply(this.proxy,arguments);return this};ag.prototype.strftime=function(ah){ah=ah||this.formatString||ag.regional[this.locale]["formatString"];return ag.strftime(this,ah,this.syntax)};ag.prototype.toString=function(){return this.proxy.toString()};ag.prototype.toYmdInt=function(){return(this.proxy.getFullYear()*10000)+(this.getMonthNumber()*100)+this.proxy.getDate()};ag.regional={en:{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"],formatString:"%Y-%m-%d %H:%M:%S"},fr:{monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],formatString:"%Y-%m-%d %H:%M:%S"},de:{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"],formatString:"%Y-%m-%d %H:%M:%S"},es:{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&eacute;rcoles","Jueves","Viernes","S&aacute;bado"],dayNamesShort:["Dom","Lun","Mar","Mi&eacute;","Juv","Vie","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"},ru:{monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],formatString:"%Y-%m-%d %H:%M:%S"},ar:{monthNames:["كانون الثاني","شباط","آذار","نيسان","آذار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["السبت","الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"],dayNamesShort:["سبت","أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة"],formatString:"%Y-%m-%d %H:%M:%S"},pt:{monthNames:["Janeiro","Fevereiro","Mar&ccedil;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&ccedil;a-feira","Quarta-feira","Quinta-feira","Sexta-feira","S&aacute;bado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"},"pt-BR":{monthNames:["Janeiro","Fevereiro","Mar&ccedil;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&ccedil;a-feira","Quarta-feira","Quinta-feira","Sexta-feira","S&aacute;bado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"},pl:{monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lut","Mar","Kwi","Maj","Cze","Lip","Sie","Wrz","Paź","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Ni","Pn","Wt","Śr","Cz","Pt","Sb"],formatString:"%Y-%m-%d %H:%M:%S"},nl:{monthNames:["Januari","Februari","Maart","April","Mei","Juni","July","Augustus","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:","["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],dayNamesShort:["Zo","Ma","Di","Wo","Do","Vr","Za"],formatString:"%Y-%m-%d %H:%M:%S"},sv:{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"],dayNames:["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],dayNamesShort:["sön","mån","tis","ons","tor","fre","lör"],formatString:"%Y-%m-%d %H:%M:%S"}};ag.regional["en-US"]=ag.regional["en-GB"]=ag.regional.en;ag.regional.getLocale=function(){var ah=ag.config.defaultLocale;if(document&&document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang){ah=document.getElementsByTagName("html")[0].lang;if(!ag.regional.hasOwnProperty(ah)){ah=ag.config.defaultLocale}}return ah};var C=24*60*60*1000;var N=function(ah,ak){ah=String(ah);var ai=ak-ah.length;var aj=String(Math.pow(10,ai)).slice(1);return aj.concat(ah)};var E={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:C,week:7*C,month:{add:function(aj,ah){E.year.add(aj,Math[ah>0?"floor":"ceil"](ah/12));var ai=aj.getMonth()+(ah%12);if(ai==12){ai=0;aj.setYear(aj.getFullYear()+1)}else{if(ai==-1){ai=11;aj.setYear(aj.getFullYear()-1)}}aj.setMonth(ai)},diff:function(al,aj){var ah=al.getFullYear()-aj.getFullYear();var ai=al.getMonth()-aj.getMonth()+(ah*12);var ak=al.getDate()-aj.getDate();return ai+(ak/30)}},year:{add:function(ai,ah){ai.setYear(ai.getFullYear()+Math[ah>0?"floor":"ceil"](ah))},diff:function(ai,ah){return E.month.diff(ai,ah)/12}}};for(var Y in E){if(Y.substring(Y.length-1)!="s"){E[Y+"s"]=E[Y]}}var H=function(al,ak,ai){if(ag.formats[ai]["shortcuts"][ak]){return ag.strftime(al,ag.formats[ai]["shortcuts"][ak],ai)}else{var ah=(ag.formats[ai]["codes"][ak]||"").split(".");var aj=al["get"+ah[0]]?al["get"+ah[0]]():"";if(ah[1]){aj=N(aj,ah[1])}return aj}};ag.strftime=function(an,ak,aj,ao){var ai="perl";var am=ag.regional.getLocale();if(aj&&ag.formats.hasOwnProperty(aj)){ai=aj}else{if(aj&&ag.regional.hasOwnProperty(aj)){am=aj}}if(ao&&ag.formats.hasOwnProperty(ao)){ai=ao}else{if(ao&&ag.regional.hasOwnProperty(ao)){am=ao}}if(l(an)!="[object Object]"||an._type!="jsDate"){an=new ag(an);an.locale=am}if(!ak){ak=an.formatString||ag.regional[am]["formatString"]}var ah=ak||"%Y-%m-%d",ap="",al;while(ah.length>0){if(al=ah.match(ag.formats[ai].codes.matcher)){ap+=ah.slice(0,al.index);ap+=(al[1]||"")+H(an,al[2],ai);ah=ah.slice(al.index+al[0].length)}else{ap+=ah;ah=""}}return ap};ag.formats={ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S"};ag.formats.perl={codes:{matcher:/()%(#?(%|[a-z]))/i,Y:"FullYear",y:"ShortYear.2",m:"MonthNumber.2","#m":"MonthNumber",B:"MonthName",b:"AbbrMonthName",d:"Date.2","#d":"Date",e:"Date",A:"DayName",a:"AbbrDayName",w:"Day",H:"Hours.2","#H":"Hours",I:"Hours12.2","#I":"Hours12",p:"AMPM",M:"Minutes.2","#M":"Minutes",S:"Seconds.2","#S":"Seconds",s:"Unix",N:"Milliseconds.3","#N":"Milliseconds",O:"TimezoneOffset",Z:"TimezoneName",G:"GmtOffset"},shortcuts:{F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",D:"%m/%d/%y","#c":"%a %b %e %H:%M:%S %Y",v:"%e-%b-%Y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"}};ag.formats.php={codes:{matcher:/()%((%|[a-z]))/i,a:"AbbrDayName",A:"DayName",d:"Date.2",e:"Date",j:"DayOfYear.3",u:"DayOfWeek",w:"Day",U:"FullWeekOfYear.2",V:"IsoWeek.2",W:"WeekOfYear.2",b:"AbbrMonthName",B:"MonthName",m:"MonthNumber.2",h:"AbbrMonthName",C:"Century.2",y:"ShortYear.2",Y:"FullYear",H:"Hours.2",I:"Hours12.2",l:"Hours12",p:"AMPM",P:"AmPm",M:"Minutes.2",S:"Seconds.2",s:"Unix",O:"TimezoneOffset",z:"GmtOffset",Z:"TimezoneAbbr"},shortcuts:{D:"%m/%d/%y",F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"}};ag.createDate=function(aj){if(aj==null){return new Date()}if(aj instanceof Date){return aj}if(typeof aj=="number"){return new Date(aj)}var ao=String(aj).replace(/^\s*(.+)\s*$/g,"$1");ao=ao.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/,"$1/$2/$3");ao=ao.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i,"$1 $2 $3");var an=ao.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);if(an&&an.length>3){var at=parseFloat(an[3]);var am=ag.config.defaultCentury+at;am=String(am);ao=ao.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i,an[1]+" "+an[2]+" "+am)}an=ao.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);function ar(ax,aw){var aC=parseFloat(aw[1]);var aB=parseFloat(aw[2]);var aA=parseFloat(aw[3]);var az=ag.config.defaultCentury;var av,au,aD,ay;if(aC>31){au=aA;aD=aB;av=az+aC}else{au=aB;aD=aC;av=az+aA}ay=aD+"/"+au+"/"+av;return ax.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/,ay)}if(an&&an.length>3){ao=ar(ao,an)}var an=ao.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);if(an&&an.length>3){ao=ar(ao,an)}var al=0;var ai=ag.matchers.length;var aq,ah,ap=ao,ak;while(al<ai){ah=Date.parse(ap);if(!isNaN(ah)){return new Date(ah)}aq=ag.matchers[al];if(typeof aq=="function"){ak=aq.call(ag,ap);if(ak instanceof Date){return ak}}else{ap=ao.replace(aq[0],aq[1])}al++}return NaN};ag.daysInMonth=function(ah,ai){if(ai==2){return new Date(ah,1,29).getDate()==29?29:28}return[u,31,u,31,30,31,30,31,31,30,31,30,31][ai]};ag.matchers=[[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(ak){var ai=ak.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(ai){if(ai[1]){var aj=this.createDate(ai[1]);if(isNaN(aj)){return}}else{var aj=new Date();aj.setMilliseconds(0)}var ah=parseFloat(ai[2]);if(ai[6]){ah=ai[6].toLowerCase()=="am"?(ah==12?0:ah):(ah==12?12:ah+12)}aj.setHours(ah,parseInt(ai[3]||0,10),parseInt(ai[4]||0,10),((parseFloat(ai[5]||0))||0)*1000);return aj}else{return ak}},function(ak){var ai=ak.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(ai){if(ai[1]){var aj=this.createDate(ai[1]);if(isNaN(aj)){return}}else{var aj=new Date();aj.setMilliseconds(0)}var ah=parseFloat(ai[2]);aj.setHours(ah,parseInt(ai[3],10),parseInt(ai[4],10),parseFloat(ai[5])*1000);return aj}else{return ak}},function(al){var aj=al.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(aj){var ak=new Date();var am=ag.config.defaultCentury;var ao=parseFloat(aj[1]);var an=parseFloat(aj[3]);var ai,ah,ap;if(ao>31){ah=an;ai=am+ao}else{ah=ao;ai=am+an}var ap=ab(aj[2],ag.regional[ag.regional.getLocale()]["monthNamesShort"]);if(ap==-1){ap=ab(aj[2],ag.regional[ag.regional.getLocale()]["monthNames"])}ak.setFullYear(ai,ap,ah);ak.setHours(0,0,0,0);return ak}else{return al}}];function ab(aj,ak){if(ak.indexOf){return ak.indexOf(aj)}for(var ah=0,ai=ak.length;ah<ai;ah++){if(ak[ah]===aj){return ah}}return -1}function l(ah){if(ah===null){return"[object Null]"}return Object.prototype.toString.call(ah)}L.jsDate=ag;L.jqplot.sprintf=function(){function an(au,ap,aq,at){var ar=(au.length>=ap)?"":Array(1+ap-au.length>>>0).join(aq);return at?au+ar:ar+au}function ak(ar){var aq=new String(ar);for(var ap=10;ap>0;ap--){if(aq==(aq=aq.replace(/^(\d+)(\d{3})/,"$1"+L.jqplot.sprintf.thousandsSeparator+"$2"))){break}}return aq}function aj(av,au,ax,ar,at,aq){var aw=ar-av.length;if(aw>0){var ap=" ";if(aq){ap="&nbsp;"}if(ax||!at){av=an(av,ar,ap,ax)}else{av=av.slice(0,au.length)+an("",aw,"0",true)+av.slice(au.length)}}return av}function ao(ay,aq,aw,ar,ap,av,ax,au){var at=ay>>>0;aw=aw&&at&&{"2":"0b","8":"0","16":"0x"}[aq]||"";ay=aw+an(at.toString(aq),av||0,"0",false);return aj(ay,aw,ar,ap,ax,au)}function ah(au,av,ar,ap,at,aq){if(ap!=null){au=au.slice(0,ap)}return aj(au,"",av,ar,at,aq)}var ai=arguments,al=0,am=ai[al++];return am.replace(L.jqplot.sprintf.regex,function(aM,ax,ay,aB,aO,aJ,av){if(aM=="%%"){return"%"}var aD=false,az="",aA=false,aL=false,aw=false,au=false;for(var aI=0;ay&&aI<ay.length;aI++){switch(ay.charAt(aI)){case" ":az=" ";break;case"+":az="+";break;case"-":aD=true;break;case"0":aA=true;break;case"#":aL=true;break;case"&":aw=true;break;case"'":au=true;break}}if(!aB){aB=0}else{if(aB=="*"){aB=+ai[al++]}else{if(aB.charAt(0)=="*"){aB=+ai[aB.slice(1,-1)]}else{aB=+aB}}}if(aB<0){aB=-aB;aD=true}if(!isFinite(aB)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!aJ){aJ="fFeE".indexOf(av)>-1?6:(av=="d")?0:void (0)}else{if(aJ=="*"){aJ=+ai[al++]}else{if(aJ.charAt(0)=="*"){aJ=+ai[aJ.slice(1,-1)]}else{aJ=+aJ}}}var aF=ax?ai[ax.slice(0,-1)]:ai[al++];switch(av){case"s":if(aF==null){return""}return ah(String(aF),aD,aB,aJ,aA,aw);case"c":return ah(String.fromCharCode(+aF),aD,aB,aJ,aA,aw);case"b":return ao(aF,2,aL,aD,aB,aJ,aA,aw);case"o":return ao(aF,8,aL,aD,aB,aJ,aA,aw);case"x":return ao(aF,16,aL,aD,aB,aJ,aA,aw);case"X":return ao(aF,16,aL,aD,aB,aJ,aA,aw).toUpperCase();case"u":return ao(aF,10,aL,aD,aB,aJ,aA,aw);case"i":var ar=parseInt(+aF,10);if(isNaN(ar)){return""}var aH=ar<0?"-":az;var aK=au?ak(String(Math.abs(ar))):String(Math.abs(ar));aF=aH+an(aK,aJ,"0",false);return aj(aF,aH,aD,aB,aA,aw);case"d":var ar=Math.round(+aF);if(isNaN(ar)){return""}var aH=ar<0?"-":az;var aK=au?ak(String(Math.abs(ar))):String(Math.abs(ar));aF=aH+an(aK,aJ,"0",false);return aj(aF,aH,aD,aB,aA,aw);case"e":case"E":case"f":case"F":case"g":case"G":var ar=+aF;if(isNaN(ar)){return""}var aH=ar<0?"-":az;var at=["toExponential","toFixed","toPrecision"]["efg".indexOf(av.toLowerCase())];var aN=["toString","toUpperCase"]["eEfFgG".indexOf(av)%2];var aK=Math.abs(ar)[at](aJ);var aE=aK.toString().split(".");aE[0]=au?ak(aE[0]):aE[0];aK=aE.join(L.jqplot.sprintf.decimalMark);aF=aH+aK;var aC=aj(aF,aH,aD,aB,aA,aw)[aN]();return aC;case"p":case"P":var ar=+aF;if(isNaN(ar)){return""}var aH=ar<0?"-":az;var aE=String(Number(Math.abs(ar)).toExponential()).split(/e|E/);var aq=(aE[0].indexOf(".")!=-1)?aE[0].length-1:String(ar).length;var aG=(aE[1]<0)?-aE[1]-1:0;if(Math.abs(ar)<1){if(aq+aG<=aJ){aF=aH+Math.abs(ar).toPrecision(aq)}else{if(aq<=aJ-1){aF=aH+Math.abs(ar).toExponential(aq-1)}else{aF=aH+Math.abs(ar).toExponential(aJ-1)}}}else{var ap=(aq<=aJ)?aq:aJ;aF=aH+Math.abs(ar).toPrecision(ap)}var aN=["toString","toUpperCase"]["pP".indexOf(av)%2];return aj(aF,aH,aD,aB,aA,aw)[aN]();case"n":return"";default:return aM}})};L.jqplot.sprintf.thousandsSeparator=",";L.jqplot.sprintf.decimalMark=".";L.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;L.jqplot.getSignificantFigures=function(al){var an=String(Number(Math.abs(al)).toExponential()).split(/e|E/);var am=(an[0].indexOf(".")!=-1)?an[0].length-1:an[0].length;var ai=(an[1]<0)?-an[1]-1:0;var ah=parseInt(an[1],10);var aj=(ah+1>0)?ah+1:0;var ak=(am<=aj)?0:am-ah-1;return{significantDigits:am,digitsLeft:aj,digitsRight:ak,zeros:ai,exponent:ah}};L.jqplot.getPrecision=function(ah){return L.jqplot.getSignificantFigures(ah).digitsRight};var X=L.uiBackCompat!==false;L.jqplot.effects={effect:{}};var m="jqplot.storage.";L.extend(L.jqplot.effects,{version:"1.9pre",save:function(ai,aj){for(var ah=0;ah<aj.length;ah++){if(aj[ah]!==null){ai.data(m+aj[ah],ai[0].style[aj[ah]])}}},restore:function(ai,aj){for(var ah=0;ah<aj.length;ah++){if(aj[ah]!==null){ai.css(aj[ah],ai.data(m+aj[ah]))}}},setMode:function(ah,ai){if(ai==="toggle"){ai=ah.is(":hidden")?"show":"hide"}return ai},createWrapper:function(ai){if(ai.parent().is(".ui-effects-wrapper")){return ai.parent()}var aj={width:ai.outerWidth(true),height:ai.outerHeight(true),"float":ai.css("float")},al=L("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),ah={width:ai.width(),height:ai.height()},ak=document.activeElement;ai.wrap(al);if(ai[0]===ak||L.contains(ai[0],ak)){L(ak).focus()}al=ai.parent();if(ai.css("position")==="static"){al.css({position:"relative"});ai.css({position:"relative"})}else{L.extend(aj,{position:ai.css("position"),zIndex:ai.css("z-index")});L.each(["top","left","bottom","right"],function(am,an){aj[an]=ai.css(an);if(isNaN(parseInt(aj[an],10))){aj[an]="auto"}});ai.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}ai.css(ah);return al.css(aj).show()},removeWrapper:function(ah){var ai=document.activeElement;if(ah.parent().is(".ui-effects-wrapper")){ah.parent().replaceWith(ah);if(ah[0]===ai||L.contains(ah[0],ai)){L(ai).focus()}}return ah}});function j(ai,ah,aj,ak){if(L.isPlainObject(ai)){return ai}ai={effect:ai};if(ah===u){ah={}}if(L.isFunction(ah)){ak=ah;aj=null;ah={}}if(L.type(ah)==="number"||L.fx.speeds[ah]){ak=aj;aj=ah;ah={}}if(L.isFunction(aj)){ak=aj;aj=null}if(ah){L.extend(ai,ah)}aj=aj||ah.duration;ai.duration=L.fx.off?0:typeof aj==="number"?aj:aj in L.fx.speeds?L.fx.speeds[aj]:L.fx.speeds._default;ai.complete=ak||ah.complete;return ai}function ae(ah){if(!ah||typeof ah==="number"||L.fx.speeds[ah]){return true}if(typeof ah==="string"&&!L.jqplot.effects.effect[ah]){if(X&&L.jqplot.effects[ah]){return false}return true}return false}L.fn.extend({jqplotEffect:function(ap,aq,ai,ao){var an=j.apply(this,arguments),ak=an.mode,al=an.queue,am=L.jqplot.effects.effect[an.effect],ah=!am&&X&&L.jqplot.effects[an.effect];if(L.fx.off||!(am||ah)){if(ak){return this[ak](an.duration,an.complete)}else{return this.each(function(){if(an.complete){an.complete.call(this)}})}}function aj(au){var av=L(this),at=an.complete,aw=an.mode;function ar(){if(L.isFunction(at)){at.call(av[0])}if(L.isFunction(au)){au()}}if(av.is(":hidden")?aw==="hide":aw==="show"){ar()}else{am.call(av[0],an,ar)}}if(am){return al===false?this.each(aj):this.queue(al||"fx",aj)}else{return ah.call(this,{options:an,duration:an.duration,callback:an.complete,mode:an.mode})}}});var a=/up|down|vertical/,v=/up|left|vertical|horizontal/;L.jqplot.effects.effect.blind=function(aj,ao){var ak=L(this),ar=["position","top","bottom","left","right","height","width"],ap=L.jqplot.effects.setMode(ak,aj.mode||"hide"),au=aj.direction||"up",am=a.test(au),al=am?"height":"width",aq=am?"top":"left",aw=v.test(au),an={},av=ap==="show",ai,ah,at;if(ak.parent().is(".ui-effects-wrapper")){L.jqplot.effects.save(ak.parent(),ar)}else{L.jqplot.effects.save(ak,ar)}ak.show();at=parseInt(ak.css("top"),10);ai=L.jqplot.effects.createWrapper(ak).css({overflow:"hidden"});ah=am?ai[al]()+at:ai[al]();an[al]=av?String(ah):"0";if(!aw){ak.css(am?"bottom":"right",0).css(am?"top":"left","").css({position:"absolute"});an[aq]=av?"0":String(ah)}if(av){ai.css(al,0);if(!aw){ai.css(aq,ah)}}ai.animate(an,{duration:aj.duration,easing:aj.easing,queue:false,complete:function(){if(ap==="hide"){ak.hide()}L.jqplot.effects.restore(ak,ar);L.jqplot.effects.removeWrapper(ak);ao()}})}})(jQuery);

WRFILE: jquery.min.js

/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery.min.map
*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;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 b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.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(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.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?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},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||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.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||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},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:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.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 f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.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?b.extend(e,r):r}},i={};return r.pipe=r.then,b.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=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.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],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.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;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[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%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.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&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.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 b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.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=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.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,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._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(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value: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,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.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 n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},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}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[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),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=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));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,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]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),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=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),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=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=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 b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):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,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.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))},b.Event=function(e,n){return this instanceof b.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&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.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()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._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 b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.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 b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.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,b(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(){b.event.remove(this,e,r,n)})},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)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?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},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.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},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-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 u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(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?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(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]))})})}o=st.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+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===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]||st.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]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.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,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!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[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[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]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[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[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(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:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.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===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.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!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.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:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(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})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(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 mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.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?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(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(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.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,Nt=/^(?:checkbox|radio)$/i,Ct=/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:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(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 b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.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 b.clone(this,e,t)})},html:function(e){return b.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)||!b.support.htmlSerialize&&mt.test(e)||!b.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&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._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++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.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)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(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||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
}b.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),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(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,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});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("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","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"===b.css(e,"display")||!b.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]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.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}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.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))?b(this).show():b(this).hide()})}}),b.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":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],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||b.isNumeric(o)?o||0:a):a},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}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});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+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.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=b.support.boxSizing&&"border-box"===b.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&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<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=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.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,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.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=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.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)||(b.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;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.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(b.isArray(t))b.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"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.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){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.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(w)||[];if(b.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(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.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"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.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,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){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===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.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=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],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=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.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&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.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)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.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 On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=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 u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.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,On.push(o)),s&&b.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){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.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,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.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,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.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||(b.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?b.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=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.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)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.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=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._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=b.timers,a=b._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)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.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}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.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,b.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},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.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?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.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?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);

WRFILE: pgcluu.css

/*
 * Style tweaks
 * --------------------------------------------------
 */
html {
  overflow-x: hidden; /* Prevent scroll on narrow devices */
}
body {
  padding-top: 70px;
}
footer {
  padding: 30px 0;
}

ul#slides li {
  list-style-type: none;
}

ul#slides {
  margin: 0;
  padding: 0;
}

ul#slides li div div {
  padding:0 0.2em;
}

.mainmenu {
	height: 80px;
	width : 100%;
}

.linegraph {
        width : 900px;
        height: 400px;
        background:#FFFFFF;
        border:4px double white;
        padding:0 10px;
        margin: 35px auto;
}
.piegraph {
	width : 500px;
	height: 250px;
	background:#FFFFFF;
	border:4px double white;
	padding:0 10px;
	margin: 35px auto;
}

.smallgraph {
        width : 600px;
        height: 150px;
        background:#FFFFFF;
        border:4px double white;
        padding:0 10px;
        margin: 35px auto;
}

.dropdown-submenu{position:relative;}
.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;}
.dropdown-submenu:hover>.dropdown-menu{display:block;}
.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;}
.dropdown-submenu:hover>a:after{border-left-color:#ffffff;}
.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;}

.panel { background-color: #f5f5f5;}
.panel-body { background-color: #ffffff; font-size: 1.2em;}
.panel-body a {        margin: 5px; }
.panel-footer { background-color: #f5f5f5}
.panel-height { height: 300px}
.panel-xlheight { height: 550px}
.btn { margin-top: 10px};
.key-figures ul {
	margin: 0;
	padding: 0;
}
.key-figures li {
	list-style-type: none;
	margin-bottom: 0.5em;
}
.figure {
	font-weight: bold;
	font-size: 1.0em;
	color:#c43c35;
}
.figure-label {
	color: #666;
	font-size: 0.9em;
}
.figure-date {
	color: #333;
	font-size: 0.8em;
}
.mouse-figures {
	font-weight: bold;
	font-size: 1.0em;
	margin: 0;
	padding: 0;
}       

.mfigure {
	font-weight: bold;
	font-size: 1.2em;
	color:#d26115;
}

.mfigure small {
	font-weight: bold;
	font-size: 0.6em;
	color:#ffffff;
}

.span11 {
	font-size: 0.8em;
}

/*
&.danger {
    .gradientBar(#ee5f5b, #c43c35);
}
*/
/*
 * Off Canvas
 * --------------------------------------------------
 */
@media screen and (max-width: 767px) {
  .row-offcanvas {
    position: relative;
    -webkit-transition: all 0.25s ease-out;
    -moz-transition: all 0.25s ease-out;
    transition: all 0.25s ease-out;
  }

  .row-offcanvas-right
  .sidebar-offcanvas {
    right: -50%; /* 6 columns */
  }

  .row-offcanvas-left
  .sidebar-offcanvas {
    left: -50%; /* 6 columns */
  }

  .row-offcanvas-right.active {
    right: 50%; /* 6 columns */
  }

  .row-offcanvas-left.active {
    left: 50%; /* 6 columns */
  }

  .sidebar-offcanvas {
    position: absolute;
    top: 0;
    width: 50%; /* 6 columns */
  }
}

.jqplot-graph { color: #ac1316; z-index: 99;}
.jqplot-target {
    position: relative;
    color: #333;
    font-size: 0.8em;
}

.jqplot-highlighter-tooltip {
    border: 0px;
    font-size: 1.0em;
    white-space: nowrap;
    font-weight: bold;
    margin: 5px;
    padding: 5px;
    color:#ffffff;
    background: #5f5555;
    border:1px solid #5f5555;
    border:1px solid rgba(0, 0, 0, 0.2);
    -webkit-border-radius:6px;
    -moz-border-radius:6px;
    border-radius:6px;
    -webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);
    -moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);
    box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);
}

 .jqplot-title {
    font-size: 1.1em;
    text-transform: uppercase;
    letter-spacing: .1em;
    margin: 0;
    padding: 0;
    color: #5f5555;
 }

 #start-date {
    color: #000000;
 }

 #end-date {
    color: #000000;
 }

WRFILE: pgcluu.js

function create_download_button (buttonid, cssclass) {
	document.writeln('<input type="button" class="'+cssclass+'" value="Download" id="download'+buttonid+'" onclick="return false;">');
	document.writeln('<input type="button" class="'+cssclass+'" value="CSV export" id="csv'+buttonid+'" onclick="return false;">');
	document.writeln('<a id="acsv'+buttonid+'" href="#"></a>');
}

/* Disable disabled menus */
$(document).ready(function() {
   $(".nav li.disabled a").click(function() {
     return false;
   });
});

function add_download_button_event (buttonid, divid, plot) {

	jQuery('#download'+buttonid).click( function() {
		$('#'+divid).jqplotViewImage();
		var nagent = navigator.userAgent.toLowerCase();
		if (nagent.indexOf('chrome') > -1) {
			$('#'+divid).jqplotViewImage();
		} else {
			var imgData = $('#'+divid).jqplotToImageStr({});
			var w = window.open('chart.html');
			w.document.open("text/html");
			w.document.write("<img src='"+imgData+"' />");
			w.document.close();
			w = null;
		}
	});
	jQuery('#csv'+buttonid).click( function() {
      export_csv(plot, buttonid);
    });

}

function create_linegraph (divid, charttitle, ylabel, arr_series, lineseries) {
        return $.jqplot(divid, lineseries, { 
        seriesColors: ['#6e9dc9','#f4ab3a','#ac7fa8','#8dbd0f',"#958c12","#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"],
        seriesDefaults: { markerOptions: {show: false}, lineWidth:1 },
        grid: { borderWidth: 1, background: '#ffffff'},
        title: charttitle,
        series: arr_series,
        axes: {
            xaxis: {
                renderer:$.jqplot.DateAxisRenderer,
                tickOptions:{ angle: -30, textColor: '#333' },
            },
            yaxis: {
                renderer: $.jqplot.LogAxisRenderer,
                labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
                tickRenderer: $.jqplot.CanvasAxisTickRenderer,
                tickOptions: {
                        textColor: '#333',
                        formatter: function(format, value) { return pretty_print_number(value, 0, ylabel); }
                },
            }
        },
        legend: {
            show: true,
	    placement: 'outside',
        },
        cursor:{
            show: true,
            zoom: true,
            showTooltip:false,
            looseZoom: true,
            followMouse: true,
        },
        highlighter: {
                show: true,
                tooltipContentEditor: function (str, seriesIndex, pointIndex, plot) {
                    var dateToDisplay = new Date(plot.data[seriesIndex][pointIndex][0]);
                    var textToShow = '<div>On '+dateToDisplay.toGMTString();
                    for (var i=0; i<plot.data.length;i++) {
                            textToShow += '<br><span class="mfigure">'+pretty_print_number(plot.data[i][pointIndex][1], 2, plot.series[i].label)+' <small>'+plot.series[i].label+'</small></span>';
                    }
                    textToShow += '</div>';
                    return textToShow;
                }
        }
    });
}

function create_piechart(divid, title, data) {
	return $.jqplot(divid, [data], 
	{
		seriesColors: ['#6e9dc9','#f4ab3a','#ac7fa8','#8dbd0f',"#958c12","#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc","#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557","#498991", "#C08840", "#9F9274", "#546D61", "#646C4A", "#6F6621","#6E3F5F", "#4F64B0", "#A89050", "#C45923", "#187399", "#945381","#959E5C", "#C7AF7B", "#478396", "#907294"],
		grid: { borderWidth: 1, background: '#ffffff'},
		title: title,
		seriesDefaults: {
			renderer: $.jqplot.PieRenderer,
			rendererOptions: {
				showDataLabels: true
			}
		}, 
		legend: { show:true, location: 'e' },
		highlighter: {
			show: true,
			tooltipLocation:'sw', 
			useAxesFormatters:false,
			tooltipContentEditor: function (str, seriesIndex, pointIndex, plot) {
			    var textToShow = '<div>';
			    //textToShow += '<span class="mfigure">'+pretty_print_number(plot.data[0][pointIndex][1], 2)+' <small>'+plot.data[0][pointIndex][0]+'</small></span>';
			    textToShow += '<span class="mfigure">'+format_number(plot.data[0][pointIndex][1])+' <small>'+plot.data[0][pointIndex][0]+'</small></span>';
			    textToShow += '</div>';
			    return textToShow;
			}
		}
	}
	);
}

function create_bargraph (divid, title, ytitle, data, y2title) {
	return $.jqplot(divid, data, {
		grid: { borderWidth: 1, background: '#ffffff'},
		title: title,
		seriesDefaults: {
			rendererOptions: {
				barPadding: 4,
				barMargin: 5,
			}
		},
		seriesColors: ['#6e9dc9','#8dbd0f','#f4ab3a','#ac7fa8',"#958c12","#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"],
		series:[
			{ renderer:$.jqplot.BarRenderer, label: ytitle},
			{ yaxis:'y2axis', label: y2title, markerOptions: {show: false}, lineWidth:1 }
		],
		axes: {
		    xaxis: {
			renderer: $.jqplot.CategoryAxisRenderer, 
			drawMajorGridlines: false,
			drawMajorTickMarks: false,
			tickRenderer: $.jqplot.CanvasAxisTickRenderer,
			tickOptions: {
			    angle: -30,
			    textColor: '#333',
			    formatString:'%H:%M',
			    fontFamily:'Helvetica',
			    fontSize: '8pt'
			}
		    },
		    yaxis: {
			autoscale:true,
			labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
			tickOptions:{ textColor: '#333' },
			tickRenderer: $.jqplot.CanvasAxisTickRenderer,
                        tickOptions: {
                            textColor: '#333',
                            formatter: function(format, value) { return pretty_print_number(value, 0, ytitle); },
			    fontFamily:'Helvetica',
			    fontSize: '8pt'
                        },
			label: ytitle
		    },
		    y2axis: {
			autoscale:true,
			labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
			tickRenderer: $.jqplot.CanvasAxisTickRenderer,
			tickOptions: {
			    textColor: '#8dbd0f',
			    formatter: function(format, value) { return pretty_print_number(value, 0, y2title); },
			    fontFamily:'Helvetica',
			    fontSize: '8pt'
			},
                        rendererOptions: {
                                alignTicks: true,
                        },
			label: y2title,
			
		    }
		},
		highlighter: {
			show: true,
			tooltipLocation:'ne', 
			useAxesFormatters:false,
			tooltipContentEditor: function (str, seriesIndex, pointIndex, plot) {
			    var textToShow = '<div style="z-index: 99;">At '+plot.data[0][pointIndex][0];
			    for (var i=0; i<plot.data.length;i++) {
				    textToShow += '<br><span class="mfigure">'+pretty_print_number(plot.data[i][pointIndex][1], 2, plot.series[i].label)+' <small>'+plot.series[i].label+'</small></span>';
			    }
			    textToShow += '</div>';
			    return textToShow;
			}
		}
	});
}

function pretty_print_number(val, scale, type) 
{

	if ( (scale == undefined) || ((scale == 0) && (val != 0)) ) {
		scale = 1;
	};

	if (type != undefined) {
		type = type.toLowerCase();

		if (type.search('size') >= 0) {
			if (Math.abs(val) >= 1125899906842624) {
				val = (val / 1125899906842624);
				return val.toFixed(scale) + " PiB";
			} else if (Math.abs(val) >= 1099511627776) {
				val = (val / 1099511627776);
				return val.toFixed(scale) + " TiB";
			} else if (Math.abs(val) >= 1073741824) {
				val = (val / 1073741824);
				return val.toFixed(scale) + " GiB";
			} else if (Math.abs(val) >= 1048576) {
				val = (val / 1048576);
				return val.toFixed(scale) + " MiB";
			} else if (Math.abs(val) >= 1024) {
				val = (val / 1024);
				return val.toFixed(scale) + " KiB";
			} else {
				return val + " B";
			}
		} else if (type.search('duration') >= 0) {
			if (Math.abs(val) >= 1000) {
				val = (val / 1000);
				return val.toFixed(scale) + " sec";
			} else {
				return val + " ms";
			}
		} else {
			if (Math.abs(val) >= 1000000000000000) {
				val = (val / 1000000000000000);
				return val.toFixed(scale) + " P";
			} else if (Math.abs(val) >= 1000000000000) {
				val = (val / 1000000000000);
				return val.toFixed(scale) + " T";
			} else if (Math.abs(val) >= 1000000000) {
				val = (val / 1000000000);
				return val.toFixed(scale) + " G";
			} else if (Math.abs(val) >= 1000000) {
				val = (val / 1000000);
				return val.toFixed(scale) + " M";
			} else if (Math.abs(val) >= 1000) {
				val = (val / 1000);
				return val.toFixed(scale) + " K";
			}
		}
	}

	return val.toFixed(scale);
}

function format_number(val) {
        var decimal = 2;
        var msep = ',';
        var deci = Math.round( Math.pow(10,decimal)*(Math.abs(val)-Math.floor(Math.abs(val)))) ;     
        val = Math.floor(Math.abs(val));
        if ((decimal==0)||(deci==Math.pow(10,decimal))) {deci=0;}
        var val_format=val+""; 
        var nb=val_format.length;
        for (var i=1;i<4;i++) {
                if (val>=Math.pow(10,(3*i))) {
                        val_format=val_format.substring(0,nb-(3*i))+msep+val_format.substring(nb-(3*i));
                }       
        }       
        if (decimal>0) {
                var decim="";
                for (var j=0;j<(decimal-deci.toString().length);j++) {decim+="0";}
                deci=decim+deci.toString();
		if (deci > 0) {
			val_format=val_format+"."+deci;
		}
        }
        if (parseFloat(val)<0) {val_format="-"+val_format;}
        return val_format;
}

function export_csv(plot, buttonid) {
  if (jQuery('#acsv' + buttonid).attr('href') === '#') {
    var csv = "data:text/csv;charset=utf-8,";

    if (plot.plugins.lineRenderer != null) {
      csv += '"serie","epoch","value"\n';
    } else {
      csv += '"serie","value"\n';
    }

    _.each(plot.series[0]._plotValues.x, function(val,i) {
      _.each(plot.series, function(s, j) {
        if (plot.plugins.lineRenderer != null) {
          csv += '"' + s.label + '",' + s._plotValues.x[i] + ',' + s._plotValues.y[i] + '\n';
        }
        else {
          csv += '"' + s._plotValues.x[i] + '",' + s._plotValues.y[i] + '\n';
        }
      });
    });

    var encodedUri = encodeURI(csv);
    jQuery('#acsv' + buttonid).attr('href', encodedUri).attr('download', 'data.csv');
  }

  document.getElementById('acsv' + buttonid).click();
}

WRFILE: pgcluu_slide.js

jQuery(function (){

        jQuery('.slide').hide();
        jQuery('.active-slide').show();

        /* Go to specific slide and report from external link call */
         var activeMenu = location.hash;
         if (activeMenu) {
                 activeMenu = activeMenu.substring(1);
                 var lkobj = document.getElementById(activeMenu);
                 var liId = jQuery(lkobj).parent().attr("id");
                 if (liId != undefined) {
                         var slideId = '#'+liId;
                         jQuery('#main-container li.slide').removeClass('active-slide').hide();
                         jQuery(slideId).addClass("active-slide").fadeIn();
                         window.location.hash = '#'+activeMenu;
                 }
         }

        jQuery('.navbar li.dropdown').click(function() {
                var id = jQuery(this).attr("id");
                id = id.substring(5);
                if ( (id == 'home') || (id == 'about') || (id == 'info')) {
                        var slideId = '#'+id+'-slide';
                        var currentSlide = jQuery('#main-container .active-slide').attr("id");
                        currentSlide = '#'+currentSlide;

                        if(slideId != currentSlide) {
                                jQuery('#main-container li.slide').removeClass('active-slide').hide();
                                jQuery(slideId).addClass("active-slide").fadeIn();
                        }
                }
        });

        jQuery('.navbar li ul li').click(function() {
                var liId = jQuery(this).attr("id");
                var id = liId.substring(5);
                if (id.lastIndexOf("-") > 0) {
                        var lookobj = document.getElementById(id+'-slide');
                        if (lookobj != undefined) {
                                var slideId = '#'+id+'-slide';
                                jQuery('#main-container li.slide').removeClass('active-slide').hide();
                                jQuery(slideId).addClass("active-slide").fadeIn();
                        }
                }
        });
});

jQuery(document).ready(function () {
    jQuery('.sql').dblclick(function () {
        if (this.style == undefined || this.style.whiteSpace == 'pre') {
            this.style.whiteSpace ='normal';
        } else {
            this.style.whiteSpace = 'pre';
        }
    });
    jQuery('.icon-copy').click(function () {
        var obj = $(this).parent()[0];
        if (window.getSelection) {
            var sel = window.getSelection();
            sel.removeAllRanges();
            var range = document.createRange();
            range.selectNodeContents(obj);
            sel.addRange(range);
        } else if (document.selection) {
            var textRange = document.body.createTextRange();
            textRange.moveToElementText(obj);
            textRange.select();
        }
    });
});

WRFILE: sorttable.js

/*
  Modified version of sorttable for pgCluu.
*/
/*
  SortTable
  version 2
  7th April 2007
  Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/

  Instructions:
  Download this file
  Add <script src="sorttable.js"></script> to your HTML
  Add class="sortable" to any table you'd like to make sortable
  Click on the headers to sort

  Thanks to many, many people for contributions and suggestions.
  Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
  This basically means: do what you want with it.
*/


var stIsIE = /*@cc_on!@*/false;

sorttable = {
  init: function() {
    // quit if this function has already been called
    if (arguments.callee.done) return;
    // flag this function so we don't do the same thing twice
    arguments.callee.done = true;
    // kill the timer
    if (_timer) clearInterval(_timer);

    if (!document.createElement || !document.getElementsByTagName) return;

    sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;

    forEach(document.getElementsByTagName('table'), function(table) {
      if (table.className.search(/\bsortable\b/) != -1) {
        sorttable.makeSortable(table);
      }
    });

  },

  makeSortable: function(table) {
    if (table.getElementsByTagName('thead').length == 0) {
      // table doesn't have a tHead. Since it should have, create one and
      // put the first table row in it.
      the = document.createElement('thead');
      the.appendChild(table.rows[0]);
      table.insertBefore(the,table.firstChild);
    }
    // Safari doesn't support table.tHead, sigh
    if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];

    if (table.tHead.rows.length != 1) return; // can't cope with two header rows

    // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
    // "total" rows, for example). This is B&R, since what you're supposed
    // to do is put them in a tfoot. So, if there are sortbottom rows,
    // for backwards compatibility, move them to tfoot (creating it if needed).
    sortbottomrows = [];
    for (var i=0; i<table.rows.length; i++) {
      if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
        sortbottomrows[sortbottomrows.length] = table.rows[i];
      }
    }
    if (sortbottomrows) {
      if (table.tFoot == null) {
        // table doesn't have a tfoot. Create one.
        tfo = document.createElement('tfoot');
        table.appendChild(tfo);
      }
      for (var i=0; i<sortbottomrows.length; i++) {
        tfo.appendChild(sortbottomrows[i]);
      }
      delete sortbottomrows;
    }

    // work through each column and calculate its type
    headrow = table.tHead.rows[0].cells;
    for (var i=0; i<headrow.length; i++) {
      // manually override the type with a sorttable_type attribute
      if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
        mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
        if (mtch) { override = mtch[1]; }
	      if (mtch && typeof sorttable["sort_"+override] == 'function') {
	        headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
	      } else {
	        headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);
	      }
	      // make it clickable to sort
	      headrow[i].sorttable_columnindex = i;
	      headrow[i].sorttable_tbody = table.tBodies[0];
	      dean_addEvent(headrow[i],"click", sorttable.innerSortFunction = function(e) {

          if (this.className.search(/\bsorttable_sorted\b/) != -1) {
            // if we're already sorted by this column, just
            // reverse the table, which is quicker
            sorttable.reverse(this.sorttable_tbody);
            this.className = this.className.replace('sorttable_sorted',
                                                    'sorttable_sorted_reverse');
            this.removeChild(document.getElementById('sorttable_sortfwdind'));
            sortrevind = document.createElement('span');
            sortrevind.id = "sorttable_sortrevind";
            sortrevind.innerHTML = stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
            this.appendChild(sortrevind);
            return;
          }
          if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
            // if we're already sorted by this column in reverse, just
            // re-reverse the table, which is quicker
            sorttable.reverse(this.sorttable_tbody);
            this.className = this.className.replace('sorttable_sorted_reverse',
                                                    'sorttable_sorted');
            this.removeChild(document.getElementById('sorttable_sortrevind'));
            sortfwdind = document.createElement('span');
            sortfwdind.id = "sorttable_sortfwdind";
            sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
            this.appendChild(sortfwdind);
            return;
          }

          // remove sorttable_sorted classes
          theadrow = this.parentNode;
          forEach(theadrow.childNodes, function(cell) {
            if (cell.nodeType == 1) { // an element
              cell.className = cell.className.replace('sorttable_sorted_reverse','');
              cell.className = cell.className.replace('sorttable_sorted','');
            }
          });
          sortfwdind = document.getElementById('sorttable_sortfwdind');
          if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
          sortrevind = document.getElementById('sorttable_sortrevind');
          if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }

          this.className += ' sorttable_sorted';
          sortfwdind = document.createElement('span');
          sortfwdind.id = "sorttable_sortfwdind";
          sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
          this.appendChild(sortfwdind);

	        // build an array to sort. This is a Schwartzian transform thing,
	        // i.e., we "decorate" each row with the actual sort key,
	        // sort based on the sort keys, and then put the rows back in order
	        // which is a lot faster because you only do getInnerText once per row
	        row_array = [];
	        col = this.sorttable_columnindex;
	        rows = this.sorttable_tbody.rows;
	        for (var j=0; j<rows.length; j++) {
	          row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
	        }
	        /* If you want a stable sort, uncomment the following line */
	        //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
	        /* and comment out this one */
	        row_array.sort(this.sorttable_sortfunction);
		// pgCluu: Sort in descending order first
		row_array.reverse();

	        tb = this.sorttable_tbody;
	        for (var j=0; j<row_array.length; j++) {
	          tb.appendChild(row_array[j][1]);
	        }

	        delete row_array;
	      });
	    }
    }
  },

  guessType: function(table, column) {
    // guess the type of a column based on its first non-blank row
    sortfn = sorttable.sort_alpha;
    for (var i=0; i<table.tBodies[0].rows.length; i++) {
      text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
      if (text != '') {
        if (text.match(/^-?[£$¤]?[\d,.]+\s*[%KMGTP]?[B]?$/)) {
          return sorttable.sort_numeric;
        }
        // check for a date: dd/mm/yyyy or dd/mm/yy
        // can have / or . or - as separator
        // can be mm/dd as well
        possdate = text.match(sorttable.DATE_RE)
        if (possdate) {
          // looks like a date
          first = parseInt(possdate[1]);
          second = parseInt(possdate[2]);
          if (first > 12) {
            // definitely dd/mm
            return sorttable.sort_ddmm;
          } else if (second > 12) {
            return sorttable.sort_mmdd;
          } else {
            // looks like a date, but we can't tell which, so assume
            // that it's dd/mm (English imperialism!) and keep looking
            sortfn = sorttable.sort_ddmm;
          }
        }
      }
    }
    return sortfn;
  },

  getInnerText: function(node) {
    // gets the text we want to use for sorting for a cell.
    // strips leading and trailing whitespace.
    // this is *not* a generic getInnerText function; it's special to sorttable.
    // for example, you can override the cell text with a customkey attribute.
    // it also gets .value for <input> fields.

    if (!node) return "";

    hasInputs = (typeof node.getElementsByTagName == 'function') &&
                 node.getElementsByTagName('input').length;

    if (node.getAttribute("sorttable_customkey") != null) {
      return node.getAttribute("sorttable_customkey");
    }
    else if (typeof node.textContent != 'undefined' && !hasInputs) {
      return node.textContent.replace(/^\s+|\s+$/g, '');
    }
    else if (typeof node.innerText != 'undefined' && !hasInputs) {
      return node.innerText.replace(/^\s+|\s+$/g, '');
    }
    else if (typeof node.text != 'undefined' && !hasInputs) {
      return node.text.replace(/^\s+|\s+$/g, '');
    }
    else {
      switch (node.nodeType) {
        case 3:
          if (node.nodeName.toLowerCase() == 'input') {
            return node.value.replace(/^\s+|\s+$/g, '');
          }
        case 4:
          return node.nodeValue.replace(/^\s+|\s+$/g, '');
          break;
        case 1:
        case 11:
          var innerText = '';
          for (var i = 0; i < node.childNodes.length; i++) {
            innerText += sorttable.getInnerText(node.childNodes[i]);
          }
          return innerText.replace(/^\s+|\s+$/g, '');
          break;
        default:
          return '';
      }
    }
  },

  reverse: function(tbody) {
    // reverse the rows in a tbody
    newrows = [];
    for (var i=0; i<tbody.rows.length; i++) {
      newrows[newrows.length] = tbody.rows[i];
    }
    for (var i=newrows.length-1; i>=0; i--) {
       tbody.appendChild(newrows[i]);
    }
    delete newrows;
  },

  /* sort functions
     each sort function takes two parameters, a and b
     you are comparing a[0] and b[0] */
  sort_numeric: function(a,b) {
    am = 1;
    if (a[0].match(/KB/)) {
	am = 1000;
    } else if (a[0].match(/MB/)) {
	am = 1000000;
    } else if (a[0].match(/GB/)) {
	am = 1000000000;
    } else if (a[0].match(/TB/)) {
	am = 1000000000000;
    } else if (a[0].match(/PB/)) {
	am = 1000000000000000;
    }
    aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
    if (isNaN(aa)) aa = 0;
    aa = aa*am;
    bm = 1;
    if (b[0].match(/KB/)) {
	bm = 1000;
    } else if (b[0].match(/MB/)) {
	bm = 1000000;
    } else if (b[0].match(/GB/)) {
	bm = 1000000000;
    } else if (b[0].match(/TB/)) {
	bm = 1000000000000;
    } else if (b[0].match(/PB/)) {
	bm = 1000000000000000;
    }
    bb = parseFloat(b[0].replace(/[^0-9.-]/g,''));
    if (isNaN(bb)) bb = 0;
    bb = bb*bm;

    return aa-bb;
  },
  sort_alpha: function(a,b) {
    // PgCluu: remove percentage for numeric sort
    if (a[0].replace(/ <.*\(.*%\).*/, '')) {
	b[0].replace(/ <.*\(.*%\).*/,''); 
	aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
	if (isNaN(aa)) aa = 0;
	bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); 
	if (isNaN(bb)) bb = 0;
	return aa-bb;
    } else {
	if (a[0]==b[0]) return 0;
	if (a[0]<b[0]) return -1;
    }
    return 1;
  },
  sort_ddmm: function(a,b) {
    mtch = a[0].match(sorttable.DATE_RE);
    y = mtch[3]; m = mtch[2]; d = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt1 = y+m+d;
    mtch = b[0].match(sorttable.DATE_RE);
    y = mtch[3]; m = mtch[2]; d = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt2 = y+m+d;
    if (dt1==dt2) return 0;
    if (dt1<dt2) return -1;
    return 1;
  },
  sort_mmdd: function(a,b) {
    mtch = a[0].match(sorttable.DATE_RE);
    y = mtch[3]; d = mtch[2]; m = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt1 = y+m+d;
    mtch = b[0].match(sorttable.DATE_RE);
    y = mtch[3]; d = mtch[2]; m = mtch[1];
    if (m.length == 1) m = '0'+m;
    if (d.length == 1) d = '0'+d;
    dt2 = y+m+d;
    if (dt1==dt2) return 0;
    if (dt1<dt2) return -1;
    return 1;
  },

  shaker_sort: function(list, comp_func) {
    // A stable sort function to allow multi-level sorting of data
    // see: http://en.wikipedia.org/wiki/Cocktail_sort
    // thanks to Joseph Nahmias
    var b = 0;
    var t = list.length - 1;
    var swap = true;

    while(swap) {
        swap = false;
        for(var i = b; i < t; ++i) {
            if ( comp_func(list[i], list[i+1]) > 0 ) {
                var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
                swap = true;
            }
        } // for
        t--;

        if (!swap) break;

        for(var i = t; i > b; --i) {
            if ( comp_func(list[i], list[i-1]) < 0 ) {
                var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
                swap = true;
            }
        } // for
        b++;

    } // while(swap)
  }
}

/* ******************************************************************
   Supporting functions: bundled here to avoid depending on a library
   ****************************************************************** */

// Dean Edwards/Matthias Miller/John Resig

/* for Mozilla/Opera9 */
if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", sorttable.init, false);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
    document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
    var script = document.getElementById("__ie_onload");
    script.onreadystatechange = function() {
        if (this.readyState == "complete") {
            sorttable.init(); // call the onload handler
        }
    };
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
    var _timer = setInterval(function() {
        if (/loaded|complete/.test(document.readyState)) {
            sorttable.init(); // call the onload handler
        }
    }, 10);
}

/* for other browsers */
window.onload = sorttable.init;

// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function dean_addEvent(element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = handleEvent;
	}
};
// a counter used to create unique IDs
dean_addEvent.guid = 1;

function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
  this.cancelBubble = true;
}

// Dean's forEach: http://dean.edwards.name/base/forEach.js
/*
	forEach, version 1.0
	Copyright 2006, Dean Edwards
	License: http://www.opensource.org/licenses/mit-license.php
*/

// array-like enumeration
if (!Array.forEach) { // mozilla already supports this
	Array.forEach = function(array, block, context) {
		for (var i = 0; i < array.length; i++) {
			block.call(context, array[i], i, array);
		}
	};
}

// generic enumeration
Function.prototype.forEach = function(object, block, context) {
	for (var key in object) {
		if (typeof this.prototype[key] == "undefined") {
			block.call(context, object[key], key, object);
		}
	}
};

// character enumeration
String.forEach = function(string, block, context) {
	Array.forEach(string.split(""), function(chr, index) {
		block.call(context, chr, index, string);
	});
};

// globally resolve forEach enumeration
var forEach = function(object, block, context) {
	if (object) {
		var resolve = Object; // default
		if (object instanceof Function) {
			// functions have a "length" property
			resolve = Function;
		} else if (object.forEach instanceof Function) {
			// the object implements a custom forEach method so use that
			object.forEach(block, context);
			return;
		} else if (typeof object == "string") {
			// the object is a string
			resolve = String;
		} else if (typeof object.length == "number") {
			// the object is array-like
			resolve = Array;
		}
		resolve.forEach(object, block, context);
	}
};

WRFILE: underscore.js

//     Underscore.js 1.1.7
//     (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.
//     Underscore is freely distributable under the MIT license.
//     Portions of Underscore are inspired or borrowed from Prototype,
//     Oliver Steele's Functional, and John Resig's Micro-Templating.
//     For all details and documentation:
//     http://documentcloud.github.com/underscore

(function(){var e=this,t=e._,n={},r=Array.prototype,i=Object.prototype,s=Function.prototype,o=r.slice,u=r.unshift,a=i.toString,f=i.hasOwnProperty,l=r.forEach,c=r.map,h=r.reduce,p=r.reduceRight,d=r.filter,v=r.every,m=r.some,g=r.indexOf,y=r.lastIndexOf,b=Array.isArray,w=Object.keys,E=s.bind,S=function(e){return new k(e)};typeof module!="undefined"&&module.exports?(module.exports=S,S._=S):e._=S,S.VERSION="1.1.7";var x=S.each=S.forEach=function(e,t,r){if(e==null)return;if(l&&e.forEach===l)e.forEach(t,r);else if(e.length===+e.length){for(var i=0,s=e.length;i<s;i++)if(i in e&&t.call(r,e[i],i,e)===n)return}else for(var o in e)if(f.call(e,o)&&t.call(r,e[o],o,e)===n)return};S.map=function(e,t,n){var r=[];return e==null?r:c&&e.map===c?e.map(t,n):(x(e,function(e,i,s){r[r.length]=t.call(n,e,i,s)}),r)},S.reduce=S.foldl=S.inject=function(e,t,n,r){var i=n!==void 0;e==null&&(e=[]);if(h&&e.reduce===h)return r&&(t=S.bind(t,r)),i?e.reduce(t,n):e.reduce(t);x(e,function(e,s,o){i?n=t.call(r,n,e,s,o):(n=e,i=!0)});if(!i)throw new TypeError("Reduce of empty array with no initial value");return n},S.reduceRight=S.foldr=function(e,t,n,r){e==null&&(e=[]);if(p&&e.reduceRight===p)return r&&(t=S.bind(t,r)),n!==void 0?e.reduceRight(t,n):e.reduceRight(t);var i=(S.isArray(e)?e.slice():S.toArray(e)).reverse();return S.reduce(i,t,n,r)},S.find=S.detect=function(e,t,n){var r;return T(e,function(e,i,s){if(t.call(n,e,i,s))return r=e,!0}),r},S.filter=S.select=function(e,t,n){var r=[];return e==null?r:d&&e.filter===d?e.filter(t,n):(x(e,function(e,i,s){t.call(n,e,i,s)&&(r[r.length]=e)}),r)},S.reject=function(e,t,n){var r=[];return e==null?r:(x(e,function(e,i,s){t.call(n,e,i,s)||(r[r.length]=e)}),r)},S.every=S.all=function(e,t,r){var i=!0;return e==null?i:v&&e.every===v?e.every(t,r):(x(e,function(e,s,o){if(!(i=i&&t.call(r,e,s,o)))return n}),i)};var T=S.some=S.any=function(e,t,r){t=t||S.identity;var i=!1;return e==null?i:m&&e.some===m?e.some(t,r):(x(e,function(e,s,o){if(i|=t.call(r,e,s,o))return n}),!!i)};S.include=S.contains=function(e,t){var n=!1;return e==null?n:g&&e.indexOf===g?e.indexOf(t)!=-1:(T(e,function(e){if(n=e===t)return!0}),n)},S.invoke=function(e,t){var n=o.call(arguments,2);return S.map(e,function(e){return(t.call?t||e:e[t]).apply(e,n)})},S.pluck=function(e,t){return S.map(e,function(e){return e[t]})},S.max=function(e,t,n){if(!t&&S.isArray(e))return Math.max.apply(Math,e);var r={computed:-Infinity};return x(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o>=r.computed&&(r={value:e,computed:o})}),r.value},S.min=function(e,t,n){if(!t&&S.isArray(e))return Math.min.apply(Math,e);var r={computed:Infinity};return x(e,function(e,i,s){var o=t?t.call(n,e,i,s):e;o<r.computed&&(r={value:e,computed:o})}),r.value},S.sortBy=function(e,t,n){return S.pluck(S.map(e,function(e,r,i){return{value:e,criteria:t.call(n,e,r,i)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;return n<r?-1:n>r?1:0}),"value")},S.groupBy=function(e,t){var n={};return x(e,function(e,r){var i=t(e,r);(n[i]||(n[i]=[])).push(e)}),n},S.sortedIndex=function(e,t,n){n||(n=S.identity);var r=0,i=e.length;while(r<i){var s=r+i>>1;n(e[s])<n(t)?r=s+1:i=s}return r},S.toArray=function(e){return e?e.toArray?e.toArray():S.isArray(e)?o.call(e):S.isArguments(e)?o.call(e):S.values(e):[]},S.size=function(e){return S.toArray(e).length},S.first=S.head=function(e,t,n){return t!=null&&!n?o.call(e,0,t):e[0]},S.rest=S.tail=function(e,t,n){return o.call(e,t==null||n?1:t)},S.last=function(e){return e[e.length-1]},S.compact=function(e){return S.filter(e,function(e){return!!e})},S.flatten=function(e){return S.reduce(e,function(e,t){return S.isArray(t)?e.concat(S.flatten(t)):(e[e.length]=t,e)},[])},S.without=function(e){return S.difference(e,o.call(arguments,1))},S.uniq=S.unique=function(e,t){return S.reduce(e,function(e,n,r){if(0==r||(t===!0?S.last(e)!=n:!S.include(e,n)))e[e.length]=n;return e},[])},S.union=function(){return S.uniq(S.flatten(arguments))},S.intersection=S.intersect=function(e){var t=o.call(arguments,1);return S.filter(S.uniq(e),function(e){return S.every(t,function(t){return S.indexOf(t,e)>=0})})},S.difference=function(e,t){return S.filter(e,function(e){return!S.include(t,e)})},S.zip=function(){var e=o.call(arguments),t=S.max(S.pluck(e,"length")),n=new Array(t);for(var r=0;r<t;r++)n[r]=S.pluck(e,""+r);return n},S.indexOf=function(e,t,n){if(e==null)return-1;var r,i;if(n)return r=S.sortedIndex(e,t),e[r]===t?r:-1;if(g&&e.indexOf===g)return e.indexOf(t);for(r=0,i=e.length;r<i;r++)if(e[r]===t)return r;return-1},S.lastIndexOf=function(e,t){if(e==null)return-1;if(y&&e.lastIndexOf===y)return e.lastIndexOf(t);var n=e.length;while(n--)if(e[n]===t)return n;return-1},S.range=function(e,t,n){arguments.length<=1&&(t=e||0,e=0),n=arguments[2]||1;var r=Math.max(Math.ceil((t-e)/n),0),i=0,s=new Array(r);while(i<r)s[i++]=e,e+=n;return s},S.bind=function(e,t){if(e.bind===E&&E)return E.apply(e,o.call(arguments,1));var n=o.call(arguments,2);return function(){return e.apply(t,n.concat(o.call(arguments)))}},S.bindAll=function(e){var t=o.call(arguments,1);return t.length==0&&(t=S.functions(e)),x(t,function(t){e[t]=S.bind(e[t],e)}),e},S.memoize=function(e,t){var n={};return t||(t=S.identity),function(){var r=t.apply(this,arguments);return f.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},S.delay=function(e,t){var n=o.call(arguments,2);return setTimeout(function(){return e.apply(e,n)},t)},S.defer=function(e){return S.delay.apply(S,[e,1].concat(o.call(arguments,1)))};var N=function(e,t,n){var r;return function(){var i=this,s=arguments,o=function(){r=null,e.apply(i,s)};n&&clearTimeout(r);if(n||!r)r=setTimeout(o,t)}};S.throttle=function(e,t){return N(e,t,!1)},S.debounce=function(e,t){return N(e,t,!0)},S.once=function(e){var t=!1,n;return function(){return t?n:(t=!0,n=e.apply(this,arguments))}},S.wrap=function(e,t){return function(){var n=[e].concat(o.call(arguments));return t.apply(this,n)}},S.compose=function(){var e=o.call(arguments);return function(){var t=o.call(arguments);for(var n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},S.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},S.keys=w||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var n in e)f.call(e,n)&&(t[t.length]=n);return t},S.values=function(e){return S.map(e,S.identity)},S.functions=S.methods=function(e){var t=[];for(var n in e)S.isFunction(e[n])&&t.push(n);return t.sort()},S.extend=function(e){return x(o.call(arguments,1),function(t){for(var n in t)t[n]!==void 0&&(e[n]=t[n])}),e},S.defaults=function(e){return x(o.call(arguments,1),function(t){for(var n in t)e[n]==null&&(e[n]=t[n])}),e},S.clone=function(e){return S.isArray(e)?e.slice():S.extend({},e)},S.tap=function(e,t){return t(e),e},S.isEqual=function(e,t){if(e===t)return!0;var n=typeof e,r=typeof t;if(n!=r)return!1;if(e==t)return!0;if(!e&&t||e&&!t)return!1;e._chain&&(e=e._wrapped),t._chain&&(t=t._wrapped);if(e.isEqual)return e.isEqual(t);if(t.isEqual)return t.isEqual(e);if(S.isDate(e)&&S.isDate(t))return e.getTime()===t.getTime();if(S.isNaN(e)&&S.isNaN(t))return!1;if(S.isRegExp(e)&&S.isRegExp(t))return e.source===t.source&&e.global===t.global&&e.ignoreCase===t.ignoreCase&&e.multiline===t.multiline;if(n!=="object")return!1;if(e.length&&e.length!==t.length)return!1;var i=S.keys(e),s=S.keys(t);if(i.length!=s.length)return!1;for(var o in e)if(!(o in t)||!S.isEqual(e[o],t[o]))return!1;return!0},S.isEmpty=function(e){if(S.isArray(e)||S.isString(e))return e.length===0;for(var t in e)if(f.call(e,t))return!1;return!0},S.isElement=function(e){return!!e&&e.nodeType==1},S.isArray=b||function(e){return a.call(e)==="[object Array]"},S.isObject=function(e){return e===Object(e)},S.isArguments=function(e){return!!e&&!!f.call(e,"callee")},S.isFunction=function(e){return!!(e&&e.constructor&&e.call&&e.apply)},S.isString=function(e){return!!(e===""||e&&e.charCodeAt&&e.substr)},S.isNumber=function(e){return!!(e===0||e&&e.toExponential&&e.toFixed)},S.isNaN=function(e){return e!==e},S.isBoolean=function(e){return e===!0||e===!1},S.isDate=function(e){return!!(e&&e.getTimezoneOffset&&e.setUTCFullYear)},S.isRegExp=function(e){return!(!(e&&e.test&&e.exec)||!e.ignoreCase&&e.ignoreCase!==!1)},S.isNull=function(e){return e===null},S.isUndefined=function(e){return e===void 0},S.noConflict=function(){return e._=t,this},S.identity=function(e){return e},S.times=function(e,t,n){for(var r=0;r<e;r++)t.call(n,r)},S.mixin=function(e){x(S.functions(e),function(t){A(t,S[t]=e[t])})};var C=0;S.uniqueId=function(e){var t=C++;return e?e+t:t},S.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g},S.template=function(e,t){var n=S.templateSettings,r="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+e.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(n.interpolate,function(e,t){return"',"+t.replace(/\\'/g,"'")+",'"}).replace(n.evaluate||null,function(e,t){return"');"+t.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",i=new Function("obj",r);return t?i(t):i};var k=function(e){this._wrapped=e};S.prototype=k.prototype;var L=function(e,t){return t?S(e).chain():e},A=function(e,t){k.prototype[e]=function(){var e=o.call(arguments);return u.call(e,this._wrapped),L(t.apply(S,e),this._chain)}};S.mixin(S),x(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=r[e];k.prototype[e]=function(){return t.apply(this._wrapped,arguments),L(this._wrapped,this._chain)}}),x(["concat","join","slice"],function(e){var t=r[e];k.prototype[e]=function(){return L(t.apply(this._wrapped,arguments),this._chain)}}),k.prototype.chain=function(){return this._chain=!0,this},k.prototype.value=function(){return this._wrapped}})();

